- 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
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
Um einen KML-Datensatz 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
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
Nachdem Sie eine KmlLayer
erstellt haben, rufen Sie addLayerToMap()()
auf, um die importierten Daten in die Karte aufzunehmen.
Java
layer.addLayerToMap();
Kotlin
layer.addLayerToMap()
KML-Ebenen entfernen
Angenommen, du hast diese KmlLayer
erstellt:
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
Um die Ebene aus der Karte zu entfernen, rufen Sie removeLayerFromMap()
auf:
Java
layer.removeLayerFromMap();
Kotlin
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:
verschachtelt sind:
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Kotlin
for (containers in layer.containers) { // Do something to container }
So greifst du auf Container zu, die in einem KmlLayer
oder KmlContainer
verschachtelt sind:
Java
public void accessContainers(Iterable<KmlContainer> containers) { for (KmlContainer container : containers) { if (container.hasContainers()) { accessContainers(container.getContainers()); } } }
Kotlin
fun accessContainers(containers: Iterable<KmlContainer>) { for (container in containers) { if (container.hasContainers()) { accessContainers(container.containers) } }
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:
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
KML-Eigenschaften 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 du den Eigenschaftswert „name“ aus einem Container abrufst, sofern die Eigenschaft vorhanden ist.
Java
for (KmlContainer container : layer.getContainers()) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")); } }
Kotlin
for (container in layer.containers) { 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 einer Funktion protokolliert, wenn der Nutzer darauf klickt:
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()); } });
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i( "KML", "Feature clicked: " + feature.id ) }
Demo-App anzeigen
Ein Beispiel zum Importieren einer KML-Datei und Erstellen einer Ebene mithilfe dieser Datei findest du in der KmlDemoActivity
in der Demo-App, die im Lieferumfang der Dienstprogrammbibliothek enthalten ist. 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 | Hervorgehobene Formate 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 |