Как прочитать файл kmz карты Google в Android - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть файл KMZ, и я хочу проанализировать этот файл KMZ, чтобы я мог прочитать данные этого файла, который я пытался использовать KmlLayer, но не получил от него никакой помощи. Вот мой код

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

но я получаю исключение при разборе, когда создаю объект KmlLayer для любого решения.

1 Ответ

0 голосов
/ 05 декабря 2018

Поскольку KMZ находится в архиве KML , необходимо распаковать .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();
    }

}

NB!createLayerFromKmz() работает только на «плоской» конструкции КМЗ.

...