【问题标题】:How to read kmz file of google map in android如何在android中读取谷歌地图的kmz文件
【发布时间】:2025-12-10 12:10:01
【问题描述】:

我有 KMZ 文件,我想解析该 KMZ 文件,以便我可以读取我尝试使用 KmlLayer 但没有得到任何帮助的该文件的数据,这是我的代码

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

但我在创建 KmlLayer 任何解决方案的对象时遇到了 Parsing 异常。

【问题讨论】:

    标签: android google-maps kmz


    【解决方案1】:

    因为KMZ 被压缩KML 你应该在读取数据之前将unzip .kmz 归档到.kml 或使用ZipInputStream 而不是FileInputStream 就像在这个createLayerFromKmz() 方法中一样:

    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 结构。

    【讨论】: