Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中解析KML文件_Android_Google Maps_Kml - Fatal编程技术网

如何在Android中解析KML文件

如何在Android中解析KML文件,android,google-maps,kml,Android,Google Maps,Kml,我想知道一种简单易行的方法来解析KML文件并将其数据存储在对象中,这样我就可以立即访问其数据这里是您可以使用从访问容器中的任何属性: ... KmlLayer layer = new KmlLayer(getMap(), kmlInputStream, getApplicationContext()); Iterable containers = layer.getContainers(); for (KmlContainer container : containers ) { if

我想知道一种简单易行的方法来解析KML文件并将其数据存储在对象中,这样我就可以立即访问其数据这里是

您可以使用从访问容器中的任何属性:

...
KmlLayer layer = new KmlLayer(getMap(), kmlInputStream, getApplicationContext());

Iterable containers = layer.getContainers();
for (KmlContainer container : containers ) {
    if (container.hasProperty("property_name")) {
        // process property
        Log.d(TAG, "" + container.getProperty("property_name"));
    }
}
...
对于标准几何图形的
kml
文件,您可以使用以下内容:

@Override
public void onMapReady(GoogleMap googleMap) {
    mGoogleMap = googleMap;
    mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(17.425868, 78.459761), 16));

    // change next line for your kml source
    InputStream kmlInputStream = getResources().openRawResource(R.raw.data);
    try {
        KmlLayer kmlLayer = new KmlLayer(mGoogleMap, kmlInputStream, getApplicationContext());
        kmlLayer.addLayerToMap();

        ArrayList<LatLng> pathPoints = new ArrayList();

        if (kmlLayer != null && kmlLayer.getContainers() != null) {
            for (KmlContainer container : kmlLayer.getContainers()) {
                if (container.hasPlacemarks()) {
                    for (KmlPlacemark placemark : container.getPlacemarks()) {
                        Geometry geometry = placemark.getGeometry();
                        if (geometry.getGeometryType().equals("Point")) {
                            KmlPoint point = (KmlPoint) placemark.getGeometry();
                            LatLng latLng = new LatLng(point.getGeometryObject().latitude, point.getGeometryObject().longitude);
                            pathPoints.add(latLng);
                        } else if (geometry.getGeometryType().equals("LineString")) {
                            KmlLineString kmlLineString = (KmlLineString) geometry;
                            ArrayList<LatLng> coords = kmlLineString.getGeometryObject();
                            for (LatLng latLng : coords) {
                                pathPoints.add(latLng);
                            }
                        }
                    }
                } 
            }

            for (LatLng latLng : pathPoints) {
                mGoogleMap.addMarker(new MarkerOptions().position(latLng));
            }
        } 

    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
@覆盖
4月1日公开作废(谷歌地图谷歌地图){
mGoogleMap=谷歌地图;
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(NewLatlng(17.425868,78.459761),16));
//更改kml源的下一行
InputStream kmlInputStream=getResources().openRawResource(R.raw.data);
试一试{
Kmlayer Kmlayer=新的Kmlayer(mGoogleMap、kmlInputStream、getApplicationContext());
kmlLayer.addLayerToMap();
ArrayList路径点=新建ArrayList();
if(kmlLayer!=null&&kmlLayer.getContainers()!=null){
对于(KmlContainer容器:Kmlayer.getContainers()){
if(container.hasPlacemarks()){
对于(KmlPlacemark placemark:container.getPlacemarks()){
几何图形=placemark.getGeometry();
if(geometry.getGeometryType().equals(“点”)){
KmlPoint point=(KmlPoint)placemark.getGeometry();
LatLng LatLng=新LatLng(点.getGeometryObject().纬度,点.getGeometryObject().经度);
路径点。添加(latLng);
}else if(geometry.getGeometryType().equals(“LineString”)){
KmlInesting KmlInesting=(KmlInesting)几何图形;
ArrayList coords=Kmlinestring.getGeometryObject();
用于(LatLng LatLng:coords){
路径点。添加(latLng);
}
}
}
} 
}
用于(板条板条:路径点){
mGoogleMap.addMarker(新的MarkerOptions().position(latLng));
}
} 
}catch(XMLPullParseRexE){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
得到这样的结果:

但是对于
,您应该使用具有KML解析支持的外部库,如或将KML文件解析为XML。

您可以使用从访问容器中的任何属性:

...
KmlLayer layer = new KmlLayer(getMap(), kmlInputStream, getApplicationContext());

Iterable containers = layer.getContainers();
for (KmlContainer container : containers ) {
    if (container.hasProperty("property_name")) {
        // process property
        Log.d(TAG, "" + container.getProperty("property_name"));
    }
}
...
对于标准几何图形的
kml
文件,您可以使用以下内容:

@Override
public void onMapReady(GoogleMap googleMap) {
    mGoogleMap = googleMap;
    mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(17.425868, 78.459761), 16));

    // change next line for your kml source
    InputStream kmlInputStream = getResources().openRawResource(R.raw.data);
    try {
        KmlLayer kmlLayer = new KmlLayer(mGoogleMap, kmlInputStream, getApplicationContext());
        kmlLayer.addLayerToMap();

        ArrayList<LatLng> pathPoints = new ArrayList();

        if (kmlLayer != null && kmlLayer.getContainers() != null) {
            for (KmlContainer container : kmlLayer.getContainers()) {
                if (container.hasPlacemarks()) {
                    for (KmlPlacemark placemark : container.getPlacemarks()) {
                        Geometry geometry = placemark.getGeometry();
                        if (geometry.getGeometryType().equals("Point")) {
                            KmlPoint point = (KmlPoint) placemark.getGeometry();
                            LatLng latLng = new LatLng(point.getGeometryObject().latitude, point.getGeometryObject().longitude);
                            pathPoints.add(latLng);
                        } else if (geometry.getGeometryType().equals("LineString")) {
                            KmlLineString kmlLineString = (KmlLineString) geometry;
                            ArrayList<LatLng> coords = kmlLineString.getGeometryObject();
                            for (LatLng latLng : coords) {
                                pathPoints.add(latLng);
                            }
                        }
                    }
                } 
            }

            for (LatLng latLng : pathPoints) {
                mGoogleMap.addMarker(new MarkerOptions().position(latLng));
            }
        } 

    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
@覆盖
4月1日公开作废(谷歌地图谷歌地图){
mGoogleMap=谷歌地图;
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(NewLatlng(17.425868,78.459761),16));
//更改kml源的下一行
InputStream kmlInputStream=getResources().openRawResource(R.raw.data);
试一试{
Kmlayer Kmlayer=新的Kmlayer(mGoogleMap、kmlInputStream、getApplicationContext());
kmlLayer.addLayerToMap();
ArrayList路径点=新建ArrayList();
if(kmlLayer!=null&&kmlLayer.getContainers()!=null){
对于(KmlContainer容器:Kmlayer.getContainers()){
if(container.hasPlacemarks()){
对于(KmlPlacemark placemark:container.getPlacemarks()){
几何图形=placemark.getGeometry();
if(geometry.getGeometryType().equals(“点”)){
KmlPoint point=(KmlPoint)placemark.getGeometry();
LatLng LatLng=新LatLng(点.getGeometryObject().纬度,点.getGeometryObject().经度);
路径点。添加(latLng);
}else if(geometry.getGeometryType().equals(“LineString”)){
KmlInesting KmlInesting=(KmlInesting)几何图形;
ArrayList coords=Kmlinestring.getGeometryObject();
用于(LatLng LatLng:coords){
路径点。添加(latLng);
}
}
}
} 
}
用于(板条板条:路径点){
mGoogleMap.addMarker(新的MarkerOptions().position(latLng));
}
} 
}catch(XMLPullParseRexE){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
得到这样的结果:


但是对于
来说,您应该使用具有KML解析支持的外部库,就像或将KML文件解析为XML一样。

我创建的输入流类似于val-inputStream:inputStream=FileInputStream(file(path))val-layer=KmlLayer(mMap,inputStream,applicationContext)val containers=layer.containers但我在containers中变为null我使用的是kotlin语言谢谢,它在我忘记将层添加到地图之前起作用了非常感谢。嗨,@Andrii Omelchenko我如何读取Kml文件的扩展数据?我调试了应用程序,但它没有在Placemark.property下显示描述标记的值。我们如何删除这些标记?我尝试删除此项,但不适用于(LatLng LatLng:pathPoints){mGoogleMap.addMarker(new MarkerOptions().position(LatLng));}我创建的输入流如下val-inputStream:inputStream=FileInputStream(File(path))val-layer=KmlLayer(mMap、inputStream、applicationContext)val containers=layer.containers但我在containers中变为null我使用的是kotlin语言谢谢,在那之前我忘了将层添加到地图上,非常感谢。嗨,@Andrii Omelchenko我如何读取Kml文件的扩展数据?我调试了应用程序,但它没有在Placemark.propertyHow下显示描述标记的值我们能移除这些标记吗