Как читать kmz файл карты google в android

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

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

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

4
0
728
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку КМЗ заархивирован, 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() работает только на «плоской» конструкции КМЗ.

Другие вопросы по теме