如何在安卓设备上读取谷歌地图的kmz文件

4

我有一个KMZ文件,希望能够解析该文件并读取其中的数据。我尝试使用KmlLayer,但是没有得到任何帮助。下面是我的代码:

InputStream inputStream = new FileInputStream(path);
KmlLayer layer = new KmlLayer(mMap, inputStream, getApplicationContext());
layer.addLayerToMap();

但是在创建KmlLayer对象时,我遇到了解析异常,有什么解决方案。
1个回答

2
因为 KMZ 是压缩的 KML,所以在读取数据之前应该 解压缩 .kmz 文件成 .kml,或者在 createLayerFromKmz() 方法中使用 ZipInputStream 而不是 FileInputStream
private KmlLayer createLayerFromKmz(String kmzFileName) {
    KmlLayer kmlLayer = null;

    InputStream inputStream;
    ZipInputStream zipInputStream;

    try {
        inputStream = new FileInputStream(kmzFileName);
        zipInputStream = new ZipInputStream(new BufferedInputStream(inputStream));
        ZipEntry zipEntry;

        while ((zipEntry = zipInputStream.getNextEntry()) != null) {
            if (!zipEntry.isDirectory()) {
                String fileName = zipEntry.getName();
                if (fileName.endsWith(".kml")) {
                    kmlLayer = new KmlLayer(mGoogleMap, zipInputStream, getApplicationContext());
                }
            }

            zipInputStream.closeEntry();
        }

        zipInputStream.close();
    }
    catch(IOException e)
    {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    }

    return kmlLayer;
}

你可以这样使用它:
@Override
public void onMapReady(GoogleMap googleMap) {
    mGoogleMap = googleMap;

    // path to your kmz file 
    String kmzFileName = Environment.getExternalStorageDirectory() + "/KMZ/markers.kmz";
    try {
        KmlLayer kmlLayer = createFromKmz(kmzFileName);
        kmlLayer.addLayerToMap();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    }

}

注意!createLayerFromKmz()仅适用于“平面”KMZ结构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接