- Einführung
- KML-Ebenen hinzufügen
- KML-Ebenen entfernen
- KML-Container aufrufen
- KML-Ortsmarkierungen und KML-Boden-Overlays aufrufen
- KML-Attribute aufrufen
- 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 |