Utilità di importazione KML di Google Maps

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.
Seleziona 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 e overlay di Earth KML
  6. Accedere alle proprietà KML
  7. 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>
<cookie> no <NetworkLinkControl> non supportato
<coordinate>
<Crea&GT; no
<Dati> no
<Elimina&GT; no
<description> Solo testo normale; non sono supportati contenuti HTML
<displayMode> no
<NomeDisplay> no
<Documento&GT;
<drawOrder&GT;
<east>
<end&GT; 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&GT;
<flyToView> no <NetworkLinkControl> non supportato
<Cartella>
<gridOrigin> N/D <FotoOverlay> non è supportato
<Overlay a terra>
<intestazione>
<hotSpot>
<href>
<httpQuery> no
<Icon>
<IconStyle>
<ImagePyramid&GT; N/D <FotoOverlay> non è supportato
<innerBoundaryè> implicitamente da <LinearRing> ordine
<ItemIcon> N/D <ListStyle> non è supportato
<chiave>
<="#>
<LabelStyle> no
< latitudine>
<LatLonAltBox> no
<LatLonBox>
<leftFov> N/D <FotoOverlay> non è supportato
<RingLinear>
<LineString>
<LineStyle&GT;
<Link&GT; 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&GT;
<longitudine>
<LookAt> no
<maxAltitude> no
<maxFadeExtent&GT; no
<maxHeight> N/D <FotoOverlay> non è supportato
<maxLodPixels> no
<maxSessionLength> no
<maxWidth> N/D <FotoOverlay> non è supportato
<message> no
<minAltitude> no
<minFadeExtent&GT; no
<minLodPixels> no
<minRefreshPeriod> no <NetworkLink>
<Modello> no
<MultiGeometry>
<nome>
<vicino> N/D <FotoOverlay> non è supportato
<NetworkLink> no
<NetworkLinkControl> no
<north&GT;
<open> Archiviato come valore della proprietà
<Orientamento&GT; N/D <Modello> non è supportato
<outerBoundaryIs> implicitamente da <LinearRing> ordine
<outline>
<overlayXY&GT; no
<Accoppia>
<telefonoNumero> parzialmente Archiviato come valore della proprietà
<FotoOverlay> no
<Segnaposto>
<punta>
<Poligono>
<PolyStyle>
<intervallo>
<updateInterval> no
<updateMode> no
<aggiornaVisibilità> no
<Regione>
<ResourceMap> N/D <Modello> non è supportato
<rightFov&GT; N/D <FotoOverlay> non è supportato
<roll> N/D <Fotocamera> e <Modello> non sono supportati
<rotazione>
<rotationXY> no
<Scalabilità> N/D <Modello> non è supportato
<scala>
<Schema> no
<SchemaData> no
<Overlay schermo> no
<screenXY&GT; N/D <ScreenOverlay> non è supportato
<shape> N/D <FotoOverlay> non è supportato
<SimpleData&GT; N/D <SchemaData> non sono supportati
<SimpleField> N/D <Schema> non sono supportati
<dimensioni>
<Snippet> no
<sud>
<stato> N/D <ListStyle> non è supportato
<Stile>
<StyleMap> parzialmente Stile evidenziato non fornito. StyleMap in linea non supportati
<styleUrl&GT;
<targetHref> no <Alias> non è supportato
<tessellate&GT; no
<testo>
<textColor> no
<tileSize> N/D <FotoOverlay> non è supportato
<tilt&GT; no
<TimeSpan> no
<TimeStamp&GT; no
<topFov> N/D <FotoOverlay> non è supportato
<Aggiorna> N/D <NetworkLinkControl< non supportato
<valore>
<viewBoundScale> no
<viewFormat> no
<viewRefreshMode> no
<viewRefreshTime> no
<ViewVolume> N/D <FotoOverlay> non è supportato
<visibilità>
<west>
<quando> N/D <TimeStamp> non è supportato
<larghezza>