Как разобрать файл KML в Android - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу знать простой и легкий способ синтаксического анализа файла KML и сохранения его данных в объекте, чтобы я мог мгновенно получить доступ к его данным. мой файл kml

1 Ответ

0 голосов
/ 30 ноября 2018

Вы можете использовать KmlContainer из Утилита импорта карт Google 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();
    }
}

и получить что-то вроде этого:

KML path

но для <ExtendedData> вам следует использовать внешнюю библиотеку с поддержкой синтаксического анализа KML, например GeoTools , или проанализировать файл KML как XML.

...