- Introduzione
- Aggiungere un livello KML
- Cancellare un livello KML
- Accedere ai contenitori KML
- Accedere a segnaposto KML e overlay al suolo KML
- Accedere alle proprietà KML
- Funzionalità supportate da KML
Introduzione
Il file KML
è un'estensione del formato dei dati
XML
e rappresenta i dati geografici su una mappa. Grazie a questa utilità, puoi convertire gli oggetti KML in forme geografiche e eseguirne il rendering come un livello sopra una mappa. Per aggiungere e rimuovere i dati KML nella e dalla mappa, richiama
addLayerToMap()
e removeLayerFromMap()
rispettivamente. Per accedere alle proprietà in un oggetto KML, richiama
getProperties()
in qualsiasi segnaposto, GroundOverlay, Documento o
cartella.
Aggiungi un livello KML alla mappa
Per aggiungere un livello dati alla mappa, crea prima un'istanza della classe KmlLayer
. Esistono due modi per creare un'istanza di
KmlLayer
.
Per importare ed eseguire il rendering di un set di dati KML da una risorsa locale, hai bisogno di:
- Un oggetto
GoogleMap
in cui deve essere eseguito il rendering del livello. - Un file di risorse locali contenente i dati KML.
- Un oggetto
Context
, necessario per aprire un file di risorse locale.
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Per importare ed eseguire il rendering di un set di dati KML da uno stream locale, sono necessari:
- Un oggetto
GoogleMap
in cui deve essere eseguito il rendering del livello. - Un elemento
InputStream
contenente i dati KML. - Un oggetto
Context
, necessario per aprire le risorse locali.
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);
Dopo aver creato un KmlLayer
, chiama
addLayerToMap()()
per aggiungere i dati importati alla mappa.
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
Cancellare un livello KML
Supponiamo che tu abbia creato questo KmlLayer
:
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);
Per rimuovere il livello dalla mappa, chiama removeLayerFromMap()
:
Kotlin
layer.removeLayerFromMap()
Java
layer.removeLayerFromMap();
Accedere ai contenitori KML
Per accedere a tutti i container che sono stati aggiunti al tuo livello, puoi chiamare getContainers()
nel livello creato.
Per verificare se un container ha container nidificati, puoi chiamare
hasContainers()
. Per accedere a questi container nidificati, in modo simile a ciò che puoi fare nel tuo livello, puoi chiamare getContainers()
Per accedere a contenitori che non sono nidificati in un file KmlLayer
o KmlContainer:
Kotlin
for (containers in layer.containers) { // Do something to container }
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Per accedere ai contenitori che sono nidificati in un file KmlLayer
o KmlContainer
:
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()); } } }
Accesso a segnaposto KML e overlay al suolo KML
Per accedere a qualsiasi segnaposto o overlay al suolo aggiunto al livello, puoi chiamare getPlacemarks()
o getGroundOverlays()
in un livello o un contenitore. La chiamata restituirà
rispettivamente KmlPlacemarks
o
KmlGroundOverlays
.
Ad esempio, per accedere a un oggetto KmlPlacemark
da un livello:
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Accedere alle proprietà KML
Per accedere a qualsiasi proprietà in un contenitore o in un segnaposto, chiama
getProperty()
e assegnale una chiave di proprietà. Puoi anche chiamare
hasProperty()
per verificare se esiste. Questo esempio mostra come recuperare il valore della proprietà "name" da un container, se esistente.
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")); } }
Eventi di clic relativi alla geometria KML
Puoi utilizzare KmlLayer.OnFeatureClickListener()
per rimanere in ascolto degli eventi di clic sugli elementi geometrici della mappa. L'esempio seguente registra l'ID di una funzionalità quando l'utente fa clic su di essa:
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()); } });
Guarda l'app demo
Per un esempio di importazione di un file KML e di creazione di un livello con quest'ultimo, dai un'occhiata a KmlDemoActivity
nell'app demo fornita in dotazione con la libreria di utilità. La guida alla configurazione mostra come eseguire l'app demo.
Funzionalità supportate da KML
Elemento KML | Supportato? | Commento |
---|---|---|
<address> | parzialmente | Archiviata come valore di una proprietà |
<AddressDetails> | no | |
<Alias> | no | |
<altitude> | no | |
<altitudeMode> | no | |
<atom:author> | no | |
<atom:link> | no | |
<atom:name> | no | |
<BalloonStyle> | parzialmente | è supportato solo il tag <text> |
<begin> | N/A | <TimeSpan> non supportato |
<bgColor> | no | |
<bottomFov> | N/A | <PhotoOverlay> non è supportato |
<Camera> | no | |
<Cambia> | parzialmente | sono supportate solo le modifiche allo stile |
<color> | parzialmente | include #AABBGGRR e #BBGGRR; non supportato in <ScreenOverlay> e <GroundOverlay> |
<colorMode> | sì | |
<cookie> | no | <NetworkLinkControl> non supportato |
<coordinates> | sì | |
<Crea> | no | |
<Data> | no | |
<Elimina> | no | |
<description> | sì | Solo testo normale, nessun contenuto HTML supportato |
<displayMode> | no | |
<displayName> | no | |
<Document> | sì | |
<drawOrder> | sì | |
<east> | sì | |
<end> | N/A | <TimeSpan> non supportato |
<expires> | no | <NetworkLinkControl> non supportato |
<ExtendedData> | parzialmente | solo <Data> senza tipo, nessun <SempliciData> o <Schema> e le sostituzioni delle entità nel formato$[dataName] non sono supportate. |
<extrude> | no | |
<fill> | sì | |
<flyToView> | no | <NetworkLinkControl> non supportato |
<Cartella> | sì | |
<gridOrigin> | N/A | <PhotoOverlay> non è supportato |
<GroundOverlay> | sì | |
<heading> | sì | |
<hotSpot> | sì | |
<href> | sì | |
<httpQuery> | no | |
<Icon> | sì | |
<IconStyle> | sì | |
<ImagePyramid> | N/A | <PhotoOverlay> non è supportato |
<innerBoundaryIs> | sì | implicitamente dall'ordine <LinearRing> |
<ItemIcon> | N/A | <ListStyle> non è supportato |
<key> | sì | |
<kml> | sì | |
<LabelStyle> | no | |
<latitude> | sì | |
<LatLonAltBox> | no | |
<LatLonBox> | sì | |
<leftFov> | N/A | <PhotoOverlay> non è supportato |
<LinearRing> | sì | |
<LineString> | sì | |
<LineStyle> | sì | |
<Link> | no | |
<linkDescription> | N/A | <NetworkLinkControl> non supportato |
<linkName> | N/A | <NetworkLinkControl> non supportato |
<linkSnippet> | N/A | <NetworkLinkControl> non supportato |
<listItemType> | N/A | <ListStyle> non è supportato |
<ListStyle> | no | |
<Località> | N/A | <Modello> non supportato |
<Lod> | sì | |
<longitude> | sì | |
<LookAt> | no | |
<maxAltitude> | no | |
<maxFadeExtent> | no | |
<maxHeight> | N/A | <PhotoOverlay> non è supportato |
<maxLodPixels> | no | |
<maxSessionLength> | no | |
<maxWidth> | N/A | <PhotoOverlay> non è supportato |
<message> | no | |
<minAltitude> | no | |
<minFadeExtent> | no | |
<minLodPixels> | no | |
<minRefreshPeriod> | no | <NetworkLink> |
<Modello> | no | |
<MultiGeometry> | sì | |
<name> | sì | |
<vicino> | N/A | <PhotoOverlay> non è supportato |
<NetworkLink> | no | |
<NetworkLinkControl> | no | |
<north> | sì | |
<open> | sì | Archiviata come valore di una proprietà |
<Orientation> | N/A | <Modello> non supportato |
<outerBoundaryIs> | sì | implicitamente dall'ordine <LinearRing> |
<outline> | sì | |
<overlayXY> | no | |
<Pair> | sì | |
<phoneNumber> | parzialmente | Archiviata come valore di una proprietà |
<PhotoOverlay> | no | |
<Placemark> | sì | |
<Point> | sì | |
<Polygon> | sì | |
<PolyStyle> | sì | |
<range> | sì | |
<refreshInterval> | no | |
<refreshMode> | no | |
<refreshVisibility> | no | |
<Region> | sì | |
<ResourceMap> | N/A | <Modello> non supportato |
<rightFov> | N/A | <PhotoOverlay> non è supportato |
<roll> | N/A | <Fotocamera> e <Modello> non sono supportati |
<rotation> | sì | |
<rotationXY> | no | |
<Scala> | N/A | <Modello> non supportato |
<scale> | sì | |
<Schema> | no | |
<SchemaData> | no | |
<ScreenOverlay> | no | |
<screenXY> | N/A | <ScreenOverlay> non è supportato |
<shape> | N/A | <PhotoOverlay> non è supportato |
<SimpleData> | N/A | <SchemaData> non è supportato |
<SimpleField> | N/A | <Schema> non è supportato |
<size> | sì | |
<Snippet> | no | |
<south> | sì | |
<state> | N/A | <ListStyle> non è supportato |
<Style> | sì | |
<StyleMap> | parzialmente | Stile evidenziato non fornito. Mappe di stile incorporate non supportate |
<styleUrl> | sì | |
<targetHref> | no | <Alias> non è supportato |
<tessellate> | no | |
<text> | sì | |
<textColor> | no | |
<tileSize> | N/A | <PhotoOverlay> non è supportato |
<tilt> | no | |
<TimeSpan> | no | |
<TimeStamp> | no | |
<topFov> | N/A | <PhotoOverlay> non è supportato |
<Aggiorna> | N/A | <NetworkLinkControl< non supportato |
<value> | sì | |
<viewBoundScale> | no | |
<viewFormat> | no | |
<viewRefreshMode> | no | |
<viewRefreshTime> | no | |
<ViewVolume> | N/A | <PhotoOverlay> non è supportato |
<visibility> | sì | |
<west> | sì | |
<when> | N/A | <TimeStamp> non è supportato |
<width> | sì |