- 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
KML
è un'estensione del
XML
formato dei dati e rappresenta i dati geografici su una mappa. Utilizzando questa utilità,
puoi convertire oggetti KML in forme geografiche e visualizzarli come livello
in cima a una mappa. Per aggiungere e rimuovere i dati KML da e verso la mappa, richiama
addLayerToMap()
e removeLayerFromMap()
rispettivamente. Per accedere alle proprietà in un oggetto KML, richiama
getProperties()
su qualsiasi segnaposto, overlay al suolo, documento o
Cartella.
Aggiungere un livello KML alla mappa
Per aggiungere un livello dati alla mappa, devi prima creare un'istanza del metodo
KmlLayer
corso. Esistono due modi per creare un'istanza
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 risorsa locale contenente i dati KML.
- Un oggetto
Context
, necessario per aprire una risorsa 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, hai bisogno di:
- 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 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 ai container che sono stati aggiunti al livello,
puoi chiamare getContainers()
sul livello che hai creato.
Per verificare se un container ha container nidificati, puoi chiamare
hasContainers()
. Per accedere a questi container nidificati, in modo simile
cosa puoi fare nel tuo livello, puoi richiamare
getContainers()
Per accedere ai contenitori che non sono nidificati in un 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 KmlLayer
oppure 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()
su un livello o un container. Chiamando una delle due opzioni
restituisce un valore iterabile di KmlPlacemarks
rispettivamente 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 un segnaposto, richiama
getProperty()
e assegnargli una chiave di proprietà. Puoi anche chiamare
hasProperty()
per verificare se esiste. Questo esempio mostra come
recupera 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 sulla geometria KML
Puoi utilizzare KmlLayer.OnFeatureClickListener()
per rimanere in ascolto degli eventi di clic nella
elementi geometrici sulla mappa. L'esempio seguente registra l'ID di una caratteristica quando l'utente
fa clic sulla funzionalità:
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
Esempio di importazione di un file KML e creazione di un livello
dai un'occhiata a KmlDemoActivity
nell'app demo
fornito insieme alla libreria di utility. La guida alla configurazione ti mostra come
per eseguire l'app demo.
Funzionalità supportate da KML
Elemento KML | Supportato? | Commento |
---|---|---|
<address> | parzialmente | Archiviati come valore di proprietà |
<AddressDetails> | no | |
<Alias> | no | |
<altitude> | no | |
<altitudeMode> | no | |
<atom:author> | no | |
<atom:link> | no | |
<atom:name> | no | |
<BalloonStyle> | parzialmente | solo <text> è supportato |
<begin> | N/D | <TimeSpan> non è supportato |
<bgColor> | no | |
<bottomFov> | N/D | <PhotoOverlay> non è supportato |
<Camera> | no | |
<Change> | parzialmente | sono supportate solo le modifiche di stile |
<color> | parzialmente | include #AABBGGRR e #BBGGRR; non supportato in <ScreenOverlay> e <GroundOverlay> |
<colorMode> | sì | |
<cookie> | no | <NetworkLinkControl> non supportato |
<coordinates> | sì | |
<Create> | no | |
<Data> | no | |
<Delete> | no | |
<description> | sì | Solo testo normale, nessun contenuto HTML supportato |
<displayMode> | no | |
<displayName> | no | |
<Document> | sì | |
<drawOrder> | sì | |
<east> | sì | |
<end> | N/D | <TimeSpan> non è supportato |
<expires> | no | <NetworkLinkControl> non supportato |
<ExtendedData> | parzialmente | <Data> non digitato solo e nessun <SimpleData> o <Schema> e le sostituzioni di entità nel formato$[dataName] non sono supportate. |
<extrude> | no | |
<fill> | sì | |
<flyToView> | no | <NetworkLinkControl> non supportato |
<Folder> | sì | |
<gridOrigin> | N/D | <PhotoOverlay> non è supportato |
<GroundOverlay> | sì | |
<heading> | sì | |
<hotSpot> | sì | |
<href> | sì | |
<httpQuery> | no | |
<Icon> | sì | |
<IconStyle> | sì | |
<ImagePyramid> | N/D | <PhotoOverlay> non è supportato |
<innerBoundaryIs> | sì | implicitamente da <LinearRing> ordine |
<ItemIcon> | N/D | <ListStyle> non è supportato |
<key> | sì | |
<kml> | sì | |
<LabelStyle> | no | |
<latitudine> | sì | |
<LatLonAltBox> | no | |
<LatLonBox> | sì | |
<leftFov> | N/D | <PhotoOverlay> non è supportato |
<LinearRing> | 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 | |
<Location> | N/D | <Model> non è supportato |
<Lod> | sì | |
<longitude> | sì | |
<LookAt> | no | |
<maxAltitude> | no | |
<maxFadeExtent> | no | |
<maxHeight> | N/D | <PhotoOverlay> non è supportato |
<maxLodPixels> | no | |
<maxSessionLength> | no | |
<maxWidth> | N/D | <PhotoOverlay> non è supportato |
<message> | no | |
<minAltitude> | no | |
<minFadeExtent> | no | |
<minLodPixels> | no | |
<minRefreshPeriod> | no | <NetworkLink> |
<Model> | no | |
<MultiGeometry> | sì | |
<name> | sì | |
<near> | N/D | <PhotoOverlay> non è supportato |
<NetworkLink> | no | |
<NetworkLinkControl> | no | |
<north> | sì | |
<open> | sì | Archiviati come valore di proprietà |
<Orientamento> | N/D | <Model> non è supportato |
<outerBoundaryIs> | sì | implicitamente da <LinearRing> ordine |
<outline> | sì | |
<overlayXY> | no | |
<Pair> | sì | |
<phoneNumber> | parzialmente | Archiviati come valore di proprietà |
<PhotoOverlay> | no | |
<Segnaposto> | sì | |
<Point> | sì | |
<Polygon> | sì | |
<PolyStyle> | sì | |
<range> | sì | |
<refreshInterval> | no | |
<refreshMode> | no | |
<refreshVisibility> | no | |
<Region> | sì | |
<ResourceMap> | N/D | <Model> non è supportato |
<rightFov> | N/D | <PhotoOverlay> non è supportato |
<roll> | N/D | <Camera> e <Model> non sono supportati |
<rotation> | sì | |
<rotationXY> | no | |
<Scale> | N/D | <Model> non è supportato |
<scale> | sì | |
<Schema> | no | |
<SchemaData> | no | |
<ScreenOverlay> | no | |
<screenXY> | N/D | <ScreenOverlay> non è supportato |
<shape> | N/D | <PhotoOverlay> non è supportato |
<SimpleData> | N/D | <SchemaData> non sono supportati |
<SimpleField> | N/D | <Schema> non sono supportati |
<size> | sì | |
<Snippet> | no | |
<south> | sì | |
<state> | N/D | <ListStyle> non è supportato |
<Style> | sì | |
<StyleMap> | parzialmente | Stile evidenziato non fornito. StyleMaps in linea non supportati |
<styleUrl> | sì | |
<targetHref> | no | <Alias> non è supportato |
<tessellate> | no | |
<text> | sì | |
<textColor> | no | |
<tileSize> | N/D | <PhotoOverlay> non è supportato |
<tilt> | no | |
<TimeSpan> | no | |
<TimeStamp> | no | |
<topFov> | N/D | <PhotoOverlay> non è supportato |
<Aggiorna> | N/D | <NetworkLinkControl< non supportato |
<value> | sì | |
<viewBoundScale> | no | |
<viewFormat> | no | |
<viewRefreshMode> | no | |
<viewRefreshTime> | no | |
<ViewVolume> | N/D | <PhotoOverlay> non è supportato |
<visibility> | sì | |
<west> | sì | |
<when> | N/D | <TimeStamp> non è supportato |
<width> | sì |