Google Maps-Hilfsprogramm für den KML-Import

Plattform auswählen: Android iOS JavaScript
  1. Einführung
  2. KML-Ebenen hinzufügen
  3. KML-Ebenen entfernen
  4. KML-Container aufrufen
  5. KML-Ortsmarkierungen und KML-Boden-Overlays aufrufen
  6. KML-Attribute aufrufen
  7. Durch KML unterstützte Funktionen

Einführung

KML ist eine Erweiterung des XML-Datenformats und stellt geografische Daten auf einer Karte dar. Mit diesem Dienstprogramm können Sie KML-Objekte in geografische Formen umwandeln und als Ebene rendern, die über die Karte gelegt wird. Rufe addLayerToMap() bzw. removeLayerFromMap() auf, um deine KML-Daten der Karte hinzuzufügen oder daraus zu entfernen. Um auf Attribute in einem KML-Objekt zuzugreifen, rufen Sie getProperties() für eine Ortsmarkierung, ein Boden-Overlay, ein Dokument oder einen Ordner auf.

KML-Ebenen der Karte hinzufügen

Erstelle zuerst eine Instanz der Klasse KmlLayer, um der Karte eine Datenebene hinzuzufügen. Es gibt zwei Möglichkeiten, eine KmlLayer zu instanziieren.

Wenn Sie einen KML-Datensatz aus einer lokalen Ressource importieren und rendern möchten, ist Folgendes erforderlich:

  • Ein GoogleMap-Objekt, in dem die Ebene gerendert werden soll
  • Eine lokale Ressourcendatei mit den KML-Daten
  • Ein Context-Objekt, das zum Öffnen von lokalen Ressourcen erforderlich ist

Kotlin



val layer = KmlLayer(map, R.raw.geojson_file, context)

      

Java


KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);

      

Um ein KML-Dataset aus einem lokalen Stream zu importieren und zu rendern, ist Folgendes erforderlich:

  • Ein GoogleMap-Objekt, in dem die Ebene gerendert werden soll
  • Ein InputStream mit den KML-Daten
  • Ein Context-Objekt, das zum Öffnen von lokalen Ressourcen erforderlich ist

Kotlin



val inputStream: InputStream? =  // InputStream containing KML data
val layer = KmlLayer(map, inputStream, context)

      

Java


InputStream inputStream = // InputStream containing KML data
KmlLayer layer = new KmlLayer(map, inputStream, context);

      

Nachdem Sie eine KmlLayer erstellt haben, rufen Sie addLayerToMap()() auf, um die importierten Daten in die Karte aufzunehmen.

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

KML-Ebenen entfernen

Angenommen, Sie haben diese KmlLayer erstellt:

Kotlin



val inputStream: InputStream? =  // InputStream containing KML data
val layer = KmlLayer(map, inputStream, context)

      

Java


InputStream inputStream = // InputStream containing KML data
KmlLayer layer = new KmlLayer(map, inputStream, context);

      

Um die Ebene aus der Karte zu entfernen, rufen Sie removeLayerFromMap() auf:

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

KML-Container aufrufen

Um auf alle Container zuzugreifen, die der Ebene hinzugefügt wurden, können Sie getContainers() für die erstellte Ebene aufrufen. Mit hasContainers() können Sie prüfen, ob ein Container verschachtelte Container enthält. Um diese geschachtelten Container aufzurufen, rufst du, ähnlich wie beim Bearbeiten der Ebenen, getContainers() auf.

Auf Container zugreifen, die nicht in einem KmlLayer- oder KmlContainer:-Objekt verschachtelt sind:

Kotlin



for (containers in layer.containers) {
    // Do something to container
}

      

Java


for (KmlContainer containers : layer.getContainers()) {
    // Do something to container
}

      

So greifen Sie auf Container zu, die in einem KmlLayer- oder KmlContainer-Objekt verschachtelt sind:

Kotlin



fun accessContainers(containers: Iterable<KmlContainer>) {
    for (container in containers) {
        if (container.hasContainers()) {
            accessContainers(container.containers)
        }
    }

      

Java


public void accessContainers(Iterable<KmlContainer> containers) {
    for (KmlContainer container : containers) {
        if (container.hasContainers()) {
            accessContainers(container.getContainers());
        }
    }
}

      

KML-Ortsmarkierungen und KML-Boden-Overlays aufrufen

Um auf Ortsmarkierungen oder Boden-Overlays zuzugreifen, die der Ebene hinzugefügt wurden, können Sie getPlacemarks() oder getGroundOverlays() für eine Ebene oder einen Container aufrufen. Beim Aufrufen von beiden wird ein iterierbarer Wert von KmlPlacemarks bzw. KmlGroundOverlays zurückgegeben.

So greifen Sie beispielsweise über eine Ebene auf KmlPlacemark-Objekte zu:

Kotlin



for (placemark in layer.placemarks) {
    // Do something to Placemark
}

      

Java


for (KmlPlacemark placemark : layer.getPlacemarks()) {
    // Do something to Placemark
}

      

KML-Attribute aufrufen

Um auf ein Attribut in einem Container oder eine Ortsmarkierung zuzugreifen, müssen Sie getProperty() aufrufen und einen Attributschlüssel übergeben. Sie können auch hasProperty() aufrufen, um zu prüfen, ob das Attribut vorhanden ist. Im nachfolgenden Beispiel wird gezeigt, wie Sie den Eigenschaftswert „name“ aus einem Container abrufen, sofern vorhanden.

Kotlin



for (container in layer.containers) {
    if (container.hasProperty("name")) {
        Log.i("KML", container.getProperty("name"))
    }
}

      

Java


for (KmlContainer container : layer.getContainers()) {
    if (container.hasProperty("name")) {
        Log.i("KML", container.getProperty("name"));
    }
}

      

Klickereignisse für KML-Geometrie

Mit KmlLayer.OnFeatureClickListener() lassen sich Klickereignisse für die Geometrieelemente der Karte erfassen. Im folgenden Beispiel wird die ID eines Elements protokolliert, wenn der Nutzer darauf klickt:

Kotlin



// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
    Log.i(
        "KML",
        "Feature clicked: " + feature.id
    )
}

      

Java


// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener(new KmlLayer.OnFeatureClickListener() {
    @Override
    public void onFeatureClick(Feature feature) {
        Log.i("KML", "Feature clicked: " + feature.getId());
    }
});

      

Demo-App ansehen

Ein Beispiel zum Importieren einer KML-Datei und Erstellen einer Ebene mithilfe dieser Datei ist in der KmlDemoActivity der Demo-App verfügbar, die mit der Dienstprogrammbibliothek ausgeliefert wird. Im Einrichtungsleitfaden erhältst du Informationen zum Ausführen der Demo-App.

Durch KML unterstützte Funktionen

KML-Element Unterstützt? Kommentar
<Adresse> Teilweise Hinterlegt als Eigenschaftswert
<AddressDetails> Nein
<Alias> Nein
<Altitude> Nein
<altitudeMode> Nein
<atom:author> Nein
<atom:link> Nein
<atom:name> Nein
<BalloonStyle> Teilweise Nur <text> wird unterstützt.
<begin> <TimeSpan> wird nicht unterstützt.
<bgColor> Nein
<bottomFov> <PhotoOverlay> wird nicht unterstützt.
<Camera> Nein
<Change> Teilweise Nur Formatänderungen werden unterstützt.
<color> Teilweise Umfasst #AABBGGRR und #BBGGRR; nicht unterstützt in <ScreenOverlay> und <GroundOverlay>
<colorMode> Ja
<cookie> Nein <NetworkLinkControl> wird nicht unterstützt.
<coordinates> Ja
<Create> Nein
<Data> Nein
<Delete> Nein
<description> Ja Nur Text, HTML-Inhalt wird nicht unterstützt.
<displayMode> Nein
<displayName> Nein
<Document> Ja
<drawOrder> Ja
<east> Ja
<end> <TimeSpan> wird nicht unterstützt.
<expires> Nein <NetworkLinkControl> wird nicht unterstützt.
<ExtendedData> Teilweise <Data> nur nicht typisiert, nicht <SimpleData> oder <Schema>, und Entitätsersetzungen von form$[dataName] werden nicht unterstützt.
<extrude> Nein
<fill> Ja
<flyToView> Nein <NetworkLinkControl> wird nicht unterstützt.
<Folder> Ja
<gridOrigin> <PhotoOverlay> wird nicht unterstützt.
<GroundOverlay> Ja
<heading> Ja
<hotSpot> Ja
<href> Ja
<httpQuery> Nein
<Icon> Ja
<IconStyle> Ja
<ImagePyramid> <PhotoOverlay> wird nicht unterstützt.
<innerBoundaryIs> Ja Implizit aus <LinearRing>-Reihenfolge
<ItemIcon> <ListStyle> wird nicht unterstützt.
<key> Ja
<kml> Ja
<LabelStyle> Nein
<latitude> Ja
<LatLonAltBox> Nein
<LatLonBox> Ja
<leftFov> <PhotoOverlay> wird nicht unterstützt.
<LinearRing> Ja
<LineString> Ja
<LineStyle> Ja
<Link> Nein
<linkDescription> <NetworkLinkControl> wird nicht unterstützt.
<linkName> <NetworkLinkControl> wird nicht unterstützt.
<linkSnippet> <NetworkLinkControl> wird nicht unterstützt.
<listItemType> <ListStyle> wird nicht unterstützt.
<ListStyle> Nein
<Location> <Model> wird nicht unterstützt.
<Lod> Ja
<longitude> Ja
<LookAt> Nein
<maxAltitude> Nein
<maxFadeExtent> Nein
<maxHeight> <PhotoOverlay> wird nicht unterstützt.
<maxLodPixels> Nein
<maxSessionLength> Nein
<maxWidth> <PhotoOverlay> wird nicht unterstützt.
<message> Nein
<minAltitude> Nein
<minFadeExtent> Nein
<minLodPixels> Nein
<minRefreshPeriod> Nein <NetworkLink>
<Model> Nein
<MultiGeometry> Ja
<name> Ja
<near> <PhotoOverlay> wird nicht unterstützt.
<NetworkLink> Nein
<NetworkLinkControl> Nein
<north> Ja
<open> Ja Hinterlegt als Eigenschaftswert
<Orientation> <Model> wird nicht unterstützt.
<outerBoundaryIs> Ja Implizit aus <LinearRing>-Reihenfolge
<outline> Ja
<overlayXY> Nein
<Pair> Ja
<phoneNumber> Teilweise Hinterlegt als Eigenschaftswert
<PhotoOverlay> Nein
<Placemark> Ja
<Point> Ja
<Polygon> Ja
<PolyStyle> Ja
<range> Ja
<refreshInterval> Nein
<refreshMode> Nein
<refreshVisibility> Nein
<Region> Ja
<ResourceMap> <Model> wird nicht unterstützt.
<rightFov> <PhotoOverlay> wird nicht unterstützt.
<roll> <Camera> und <Model> werden nicht unterstützt.
<rotation> Ja
<rotationXY> Nein
<Scale> <Model> wird nicht unterstützt.
<scale> Ja
<Schema> Nein
<SchemaData> Nein
<ScreenOverlay> Nein
<screenXY> <ScreenOverlay> wird nicht unterstützt.
<shape> <PhotoOverlay> wird nicht unterstützt.
<SimpleData> <SchemaData> wird nicht unterstützt.
<SimpleField> <Schema> wird nicht unterstützt.
<size> Ja
<Snippet> Nein
<south> Ja
<state> <ListStyle> wird nicht unterstützt.
<Style> Ja
<StyleMap> Teilweise Hervorhebungen sind nicht verfügbar. Inline-StyleMaps werden nicht unterstützt.
<styleUrl> Ja
<targetHref> Nein <Alias> wird nicht unterstützt.
<tessellate> Nein
<text> Ja
<textColor> Nein
<tileSize> <PhotoOverlay> wird nicht unterstützt.
<tilt> Nein
<TimeSpan> Nein
<TimeStamp> Nein
<topFov> <PhotoOverlay> wird nicht unterstützt.
<Update> <NetworkLinkControl< wird nicht unterstützt.
<value> Ja
<viewBoundScale> Nein
<viewFormat> Nein
<viewRefreshMode> Nein
<viewRefreshTime> Nein
<ViewVolume> <PhotoOverlay> wird nicht unterstützt.
<visibility> Ja
<west> Ja
<when> <TimeStamp> wird nicht unterstützt.
<width> Ja