У меня есть файл KMZ, и я хочу проанализировать этот файл KMZ, чтобы я мог прочитать данные этого файла. Я пытался использовать KmlLayer
, но не получил от него никакой помощи. Вот мой код.
InputStream inputStream = new FileInputStream(path);
KmlLayer layer = new KmlLayer(mMap, inputStream, getApplicationContext());
layer.addLayerToMap();
но у меня возникла исключительная ситуация при синтаксическом анализе, когда я создаю объект KmlLayer для любого решения.
Поскольку КМЗ заархивирован, 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()
работает только на «плоской» конструкции КМЗ.