- Introduzione
- Aggiungere un livello KML
- Cancellare un livello KML
- Accedere ai contenitori KML
- Accedere a segnaposto e overlay di Earth KML
- Accedere alle proprietà KML
- Funzionalità supportate da KML
Introduzione
KML è un'estensione del formato dati XML e rappresenta i dati geografici su una mappa. Utilizzando questa utilità, è possibile convertire gli oggetti KML in forme geografiche e visualizzarli sotto forma di livello sopra una mappa. Per aggiungere e rimuovere i dati KML da e verso la mappa, chiama rispettivamente addLayerToMap()
e removeLayerFromMap()
. Per accedere alle proprietà in un oggetto KML, chiama
getProperties()
in qualsiasi segnaposto, overlay al suolo, documento o
cartella.
Aggiungere 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, devi disporre di:
- Un oggetto
GoogleMap
in cui deve essere visualizzato il livello. - Un file di risorse locale contenente i dati KML.
- Un oggetto
Context
, necessario per aprire un file di risorse locale.
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
Per importare e visualizzare un set di dati KML da uno stream locale, devi disporre di:
- Un oggetto
GoogleMap
in cui deve essere visualizzato il livello. - Una proprietà
InputStream
contenente i dati KML. - Un oggetto
Context
, necessario per aprire le risorse locali.
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)
Dopo aver creato un KmlLayer
, chiama addLayerToMap()()
per aggiungere i dati importati alla mappa.
Java
layer.addLayerToMap();
Kotlin
layer.addLayerToMap()
Cancellare un livello KML
Supponiamo che tu abbia creato questo KmlLayer
:
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)
Per rimuovere il livello dalla mappa, chiama removeLayerFromMap()
:
Java
layer.removeLayerFromMap();
Kotlin
layer.removeLayerFromMap()
Accedere ai contenitori KML
Per accedere a tutti i contenitori aggiunti al tuo livello, puoi chiamare getContainers()
nel livello che hai creato.
Per verificare se un contenitore include contenitori 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 ai contenitori non nidificati in KmlLayer
o KmlContainer:
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Kotlin
for (containers in layer.containers) { // Do something to container }
Per accedere ai container raccolti in un elemento KmlLayer
o KmlContainer
:
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) } }
Accedere a segnaposto e overlay di Earth KML
Per accedere a un segnaposto o a un overlay del suolo aggiunto al livello, puoi chiamare il livello getPlacemarks()
o getGroundOverlays()
su un livello o un contenitore. La chiamata restituisce
rispettivamente un iterabile di KmlPlacemarks
o
KmlGroundOverlays
.
Ad esempio, per accedere a un oggetto KmlPlacemark
da un livello:
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
Accedere alle proprietà KML
Per accedere a qualsiasi proprietà in un contenitore o in un segnaposto, chiama
getProperty()
e fornisci una chiave della proprietà. Puoi anche chiamare
hasProperty()
per verificare se esiste. Questo esempio mostra come recuperare il valore della proprietà "name" da un container, se esistente.
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")) } }
Eventi clic geometria KML
Puoi utilizzare KmlLayer.OnFeatureClickListener()
per ascoltare gli eventi clic sulle funzionalità geometriche della mappa. Il seguente esempio registra l'ID di una funzionalità quando l'utente fa clic sulla funzionalità:
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 ) }
Visualizza l'app demo
Per un esempio di importazione di un file KML e di una creazione di un livello
con esso, dai un'occhiata al KmlDemoActivity
nell'app demo
fornita 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 | Archiviato come valore della proprietà |
<AddressDetails> | no | |
<Alias> | no | |
<altitudine> | no | |
<altitudeMode> | no | |
<atom:author> | no | |
<atom:link> | no | |
<atom:name> | no | |
<Stile fumetto> | parzialmente | solo <text> è supportato |
<begin> | N/D | <TimeSpan> non è supportato |
<bgColor> | no | |
<bottomFov> | N/D | <FotoOverlay> non è supportato |
<Fotocamera> | no | |
<Cambia> | parzialmente | sono supportate solo le modifiche dello stile |
<colore> | parzialmente | include #AABBGGRR e #BBGGRR; non supportato in <ScreenOverlay> e <GroundOverlay> |
<colorMode> | sì | |
<cookie> | no | <NetworkLinkControl> non supportato |
<coordinate> | sì | |
<Crea> | no | |
<Dati> | no | |
<Elimina> | no | |
<description> | sì | Solo testo normale; non sono supportati contenuti HTML |
<displayMode> | no | |
<NomeDisplay> | no | |
<Documento> | sì | |
<drawOrder> | sì | |
<east> | sì | |
<end> | N/D | <TimeSpan> non è supportato |
<scade> | no | <NetworkLinkControl> non supportato |
<ExtendedData> | parzialmente | untyped <Data> solo, no <SimpleData> o <Schema> e sostituzioni di entità del modulo$[dataName] non sono supportate. |
<estrusione> | no | |
<fill> | sì | |
<flyToView> | no | <NetworkLinkControl> non supportato |
<Cartella> | sì | |
<gridOrigin> | N/D | <FotoOverlay> non è supportato |
<Overlay a terra> | sì | |
<intestazione> | sì | |
<hotSpot> | sì | |
<href> | sì | |
<httpQuery> | no | |
<Icon> | sì | |
<IconStyle> | sì | |
<ImagePyramid> | N/D | <FotoOverlay> non è supportato |
<innerBoundaryè> | sì | implicitamente da <LinearRing> ordine |
<ItemIcon> | N/D | <ListStyle> non è supportato |
<chiave> | sì | |
<="#> | sì | |
<LabelStyle> | no | |
< latitudine> | sì | |
<LatLonAltBox> | no | |
<LatLonBox> | sì | |
<leftFov> | N/D | <FotoOverlay> non è supportato |
<RingLinear> | sì | |
<LineString> | sì | |
<LineStyle> | sì | |
<Link> | no | |
<linkDescription> | N/D | <NetworkLinkControl> non supportato |
<linkName> | N/D | <NetworkLinkControl> non supportato |
<linkSnippet> | N/D | <NetworkLinkControl> non supportato |
<listItemType> | N/D | <ListStyle> non è supportato |
<ListStyle> | no | |
<Posizione> | N/D | <Modello> non è supportato |
<Lod> | sì | |
<longitudine> | sì | |
<LookAt> | no | |
<maxAltitude> | no | |
<maxFadeExtent> | no | |
<maxHeight> | N/D | <FotoOverlay> non è supportato |
<maxLodPixels> | no | |
<maxSessionLength> | no | |
<maxWidth> | N/D | <FotoOverlay> non è supportato |
<message> | no | |
<minAltitude> | no | |
<minFadeExtent> | no | |
<minLodPixels> | no | |
<minRefreshPeriod> | no | <NetworkLink> |
<Modello> | no | |
<MultiGeometry> | sì | |
<nome> | sì | |
<vicino> | N/D | <FotoOverlay> non è supportato |
<NetworkLink> | no | |
<NetworkLinkControl> | no | |
<north> | sì | |
<open> | sì | Archiviato come valore della proprietà |
<Orientamento> | N/D | <Modello> non è supportato |
<outerBoundaryIs> | sì | implicitamente da <LinearRing> ordine |
<outline> | sì | |
<overlayXY> | no | |
<Accoppia> | sì | |
<telefonoNumero> | parzialmente | Archiviato come valore della proprietà |
<FotoOverlay> | no | |
<Segnaposto> | sì | |
<punta> | sì | |
<Poligono> | sì | |
<PolyStyle> | sì | |
<intervallo> | sì | |
<updateInterval> | no | |
<updateMode> | no | |
<aggiornaVisibilità> | no | |
<Regione> | sì | |
<ResourceMap> | N/D | <Modello> non è supportato |
<rightFov> | N/D | <FotoOverlay> non è supportato |
<roll> | N/D | <Fotocamera> e <Modello> non sono supportati |
<rotazione> | sì | |
<rotationXY> | no | |
<Scalabilità> | N/D | <Modello> non è supportato |
<scala> | sì | |
<Schema> | no | |
<SchemaData> | no | |
<Overlay schermo> | no | |
<screenXY> | N/D | <ScreenOverlay> non è supportato |
<shape> | N/D | <FotoOverlay> non è supportato |
<SimpleData> | N/D | <SchemaData> non sono supportati |
<SimpleField> | N/D | <Schema> non sono supportati |
<dimensioni> | sì | |
<Snippet> | no | |
<sud> | sì | |
<stato> | N/D | <ListStyle> non è supportato |
<Stile> | sì | |
<StyleMap> | parzialmente | Stile evidenziato non fornito. StyleMap in linea non supportati |
<styleUrl> | sì | |
<targetHref> | no | <Alias> non è supportato |
<tessellate> | no | |
<testo> | sì | |
<textColor> | no | |
<tileSize> | N/D | <FotoOverlay> non è supportato |
<tilt> | no | |
<TimeSpan> | no | |
<TimeStamp> | no | |
<topFov> | N/D | <FotoOverlay> non è supportato |
<Aggiorna> | N/D | <NetworkLinkControl< non supportato |
<valore> | sì | |
<viewBoundScale> | no | |
<viewFormat> | no | |
<viewRefreshMode> | no | |
<viewRefreshTime> | no | |
<ViewVolume> | N/D | <FotoOverlay> non è supportato |
<visibilità> | sì | |
<west> | sì | |
<quando> | N/D | <TimeStamp> non è supportato |
<larghezza> | sì |