我有 KMZ 文件,我想解析该 KMZ 文件,以便我可以读取该文件的数据 我尝试使用 KmlLayer
但没有得到任何帮助 这是我的代码
InputStream inputStream = new FileInputStream(path);
KmlLayer layer = new KmlLayer(mMap, inputStream, getApplicationContext());
layer.addLayerToMap();
但是我在创建 KmlLayer 对象的任何解决方案时遇到解析异常。
最佳答案
因为 KMZ已压缩 KML你应该unzip在读取数据或使用 ZipInputStream
之前将 .kmz
文件转换为 .kml
而不是 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 结构。
关于android - 如何在android中读取谷歌地图的kmz文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53625721/