Utilità di importazione KML di Google Maps

Seleziona la piattaforma: Android iOS JavaScript
  1. Introduzione
  2. Aggiungere un livello KML
  3. Cancellare un livello KML
  4. Accedere ai contenitori KML
  5. Accedere a segnaposto KML e overlay al suolo KML
  6. Accedere alle proprietà KML
  7. 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à
&lt;AddressDetails&gt; no
&lt;Alias&gt; no
&lt;altitude&gt; no
<altitudeMode> no
&lt;atom:author&gt; no
&lt;atom:link&gt; no
&lt;atom:name&gt; no
&lt;BalloonStyle&gt; parzialmente solo <text> è supportato
&lt;begin&gt; N/D &lt;TimeSpan&gt; non è supportato
&lt;bgColor&gt; no
&lt;bottomFov&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;Camera&gt; no
&lt;Change&gt; parzialmente sono supportate solo le modifiche di stile
&lt;color&gt; parzialmente include #AABBGGRR e #BBGGRR; non supportato in <ScreenOverlay> e <GroundOverlay>
&lt;colorMode&gt;
&lt;cookie&gt; no &lt;NetworkLinkControl&gt; non supportato
&lt;coordinates&gt;
&lt;Create&gt; no
&lt;Data&gt; no
&lt;Delete&gt; no
&lt;description&gt; Solo testo normale, nessun contenuto HTML supportato
&lt;displayMode&gt; no
&lt;displayName&gt; no
&lt;Document&gt;
&lt;drawOrder&gt;
&lt;east&gt;
&lt;end&gt; N/D &lt;TimeSpan&gt; non è supportato
&lt;expires&gt; no &lt;NetworkLinkControl&gt; non supportato
&lt;ExtendedData&gt; parzialmente <Data> non digitato solo e nessun <SimpleData> o <Schema> e le sostituzioni di entità nel formato$[dataName] non sono supportate.
&lt;extrude&gt; no
&lt;fill&gt;
&lt;flyToView&gt; no &lt;NetworkLinkControl&gt; non supportato
&lt;Folder&gt;
&lt;gridOrigin&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;GroundOverlay&gt;
&lt;heading&gt;
&lt;hotSpot&gt;
&lt;href&gt;
&lt;httpQuery&gt; no
&lt;Icon&gt;
&lt;IconStyle&gt;
&lt;ImagePyramid&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;innerBoundaryIs&gt; implicitamente da <LinearRing> ordine
&lt;ItemIcon&gt; N/D &lt;ListStyle&gt; non è supportato
&lt;key&gt;
&lt;kml&gt;
&lt;LabelStyle&gt; no
<latitudine>
&lt;LatLonAltBox&gt; no
&lt;LatLonBox&gt;
&lt;leftFov&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;LinearRing&gt;
&lt;LineString&gt;
&lt;LineStyle&gt;
<Link> no
&lt;linkDescription&gt; N/D &lt;NetworkLinkControl&gt; non supportato
&lt;linkName&gt; N/D &lt;NetworkLinkControl&gt; non supportato
&lt;linkSnippet&gt; N/D &lt;NetworkLinkControl&gt; non supportato
&lt;listItemType&gt; N/D &lt;ListStyle&gt; non è supportato
&lt;ListStyle&gt; no
&lt;Location&gt; N/D &lt;Model&gt; non è supportato
&lt;Lod&gt;
<longitude>
&lt;LookAt&gt; no
&lt;maxAltitude&gt; no
&lt;maxFadeExtent&gt; no
&lt;maxHeight&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;maxLodPixels&gt; no
&lt;maxSessionLength&gt; no
&lt;maxWidth&gt; N/D &lt;PhotoOverlay&gt; non è supportato
<message> no
&lt;minAltitude&gt; no
&lt;minFadeExtent&gt; no
&lt;minLodPixels&gt; no
&lt;minRefreshPeriod&gt; no &lt;NetworkLink&gt;
&lt;Model&gt; no
&lt;MultiGeometry&gt;
&lt;name&gt;
&lt;near&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;NetworkLink&gt; no
&lt;NetworkLinkControl&gt; no
&lt;north&gt;
&lt;open&gt; Archiviati come valore di proprietà
<Orientamento> N/D &lt;Model&gt; non è supportato
&lt;outerBoundaryIs&gt; implicitamente da <LinearRing> ordine
&lt;outline&gt;
&lt;overlayXY&gt; no
&lt;Pair&gt;
&lt;phoneNumber&gt; parzialmente Archiviati come valore di proprietà
&lt;PhotoOverlay&gt; no
<Segnaposto>
&lt;Point&gt;
&lt;Polygon&gt;
&lt;PolyStyle&gt;
&lt;range&gt;
&lt;refreshInterval&gt; no
&lt;refreshMode&gt; no
&lt;refreshVisibility&gt; no
&lt;Region&gt;
&lt;ResourceMap&gt; N/D &lt;Model&gt; non è supportato
&lt;rightFov&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;roll&gt; N/D &lt;Camera&gt; e <Model> non sono supportati
&lt;rotation&gt;
&lt;rotationXY&gt; no
&lt;Scale&gt; N/D &lt;Model&gt; non è supportato
&lt;scale&gt;
&lt;Schema&gt; no
&lt;SchemaData&gt; no
&lt;ScreenOverlay&gt; no
&lt;screenXY&gt; N/D &lt;ScreenOverlay&gt; non è supportato
&lt;shape&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;SimpleData&gt; N/D &lt;SchemaData&gt; non sono supportati
&lt;SimpleField&gt; N/D &lt;Schema&gt; non sono supportati
&lt;size&gt;
&lt;Snippet&gt; no
&lt;south&gt;
&lt;state&gt; N/D &lt;ListStyle&gt; non è supportato
&lt;Style&gt;
&lt;StyleMap&gt; parzialmente Stile evidenziato non fornito. StyleMaps in linea non supportati
&lt;styleUrl&gt;
&lt;targetHref&gt; no &lt;Alias&gt; non è supportato
&lt;tessellate&gt; no
&lt;text&gt;
&lt;textColor&gt; no
&lt;tileSize&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;tilt&gt; no
&lt;TimeSpan&gt; no
&lt;TimeStamp&gt; no
&lt;topFov&gt; N/D &lt;PhotoOverlay&gt; non è supportato
<Aggiorna> N/D &lt;NetworkLinkControl&lt; non supportato
&lt;value&gt;
&lt;viewBoundScale&gt; no
&lt;viewFormat&gt; no
&lt;viewRefreshMode&gt; no
&lt;viewRefreshTime&gt; no
&lt;ViewVolume&gt; N/D &lt;PhotoOverlay&gt; non è supportato
&lt;visibility&gt;
&lt;west&gt;
&lt;when&gt; N/D &lt;TimeStamp&gt; non è supportato
&lt;width&gt;