Narzędzie do importowania plików KML do Map Google

Wybierz platformę: Android iOS JavaScript
  1. Wprowadzenie
  2. Dodawanie warstwy KML
  3. Usuwanie warstwy KML
  4. Dostęp do kontenerów KML
  5. Dostęp do oznaczeń miejsc w formacie KML i nakładek na teren KML
  6. Dostęp do właściwości KML
  7. Funkcje obsługiwane w języku KML

Wprowadzenie

KML jest rozszerzeniem XML format danych i przedstawia dane geograficzne na mapie. Za pomocą tego narzędzia mogą konwertować obiekty KML na kształty geograficzne i renderować je jako warstwy na górze mapy. Aby dodać dane KML do mapy i z niej usunąć, wywołaj addLayerToMap() i removeLayerFromMap() . Aby uzyskać dostęp do właściwości w obiekcie KML, wywołaj funkcję getProperties() w dowolnym oznaczeniu miejsca, nakładki na powierzchnię ziemi, dokumencie lub Folder.

Dodawanie warstwy KML do mapy

Aby dodać do mapy warstwę danych, najpierw utwórz instancję KmlLayer zajęcia. Istnieją 2 sposoby tworzenia instancji KmlLayer

Aby zaimportować i wyrenderować zbiór danych KML z zasobu lokalnego:

  • Obiekt GoogleMap, w którym ma być renderowana warstwa.
  • Lokalny plik zasobów zawierający dane KML.
  • Obiekt Context wymagany do otwierania zasobu lokalnego .

Kotlin



val layer = KmlLayer(map, R.raw.geojson_file, context)

      

Java


KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);

      

Aby zaimportować i wyrenderować zbiór danych KML ze strumienia lokalnego:

  • Obiekt GoogleMap, w którym ma być renderowana warstwa.
  • Element InputStream zawierający dane KML.
  • Obiekt Context wymagany do otwierania zasobów lokalnych.

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);

      

Po utworzeniu KmlLayer zadzwoń addLayerToMap()(), aby dodać zaimportowane dane do mapy.

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

Usuwanie warstwy KML

Załóżmy, że ten KmlLayer został utworzony przez Ciebie:

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);

      

Aby usunąć warstwę z mapy, wywołaj removeLayerFromMap():

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

Dostęp do kontenerów KML

Aby uzyskać dostęp do kontenerów dodanych do warstwy, możesz wywołać funkcję getContainers() w utworzonej warstwie. Aby sprawdzić, czy jakikolwiek kontener ma zagnieżdżone kontenery, możesz wywołać hasContainers() Aby uzyskać dostęp do tych zagnieżdżonych kontenerów, w funkcji co można zrobić w warstwie, nazywa się getContainers()

Aby uzyskać dostęp do kontenerów, które nie są zagnieżdżone w tabeli KmlLayer lub KmlContainer:

Kotlin



for (containers in layer.containers) {
    // Do something to container
}

      

Java


for (KmlContainer containers : layer.getContainers()) {
    // Do something to container
}

      

Aby uzyskać dostęp do kontenerów znajdujących się w obiekcie KmlLayer lub 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());
        }
    }
}

      

Dostęp do oznaczeń miejsc w formacie KML i nakładek na powierzchnię KML

Aby uzyskać dostęp do oznaczenia miejsca lub nakładki na ziemi, które zostały możesz wywołać funkcję getPlacemarks() lub getGroundOverlays() w warstwie lub kontenerze. Połączenie z dowolnym z nich spowoduje zwróci iterację KmlPlacemarks lub KmlGroundOverlays.

Aby na przykład uzyskać dostęp do obiektów KmlPlacemark z poziomu warstwy:

Kotlin



for (placemark in layer.placemarks) {
    // Do something to Placemark
}

      

Java


for (KmlPlacemark placemark : layer.getPlacemarks()) {
    // Do something to Placemark
}

      

Dostęp do właściwości KML

Aby uzyskać dostęp do dowolnej właściwości w kontenerze lub oznaczeniu miejsca, wywołaj getProperty() i podaj mu klucz właściwości. Możesz też zadzwonić hasProperty(), aby sprawdzić, czy istnieje. Z tego przykładu dowiesz się, jak pobiera wartość właściwości „name” z kontenera, o ile istnieje.

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"));
    }
}

      

Zdarzenia kliknięcia geometrii KML

Za pomocą KmlLayer.OnFeatureClickListener() możesz nasłuchiwać zdarzeń kliknięcia na stronie obiektów geometrycznych na mapie. Ten przykład rejestruje identyfikator cechy, gdy użytkownik kliknie tę funkcję:

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());
    }
});

      

Zobacz aplikację w wersji demonstracyjnej

Przykład importowania pliku KML i tworzenia warstwy obejrzyj KmlDemoActivity w aplikacji w wersji demonstracyjnej z biblioteką narzędziową. Z przewodnika konfiguracji dowiesz się, aby uruchomić aplikację w wersji demonstracyjnej.

Funkcje obsługiwane w formacie KML

Element KML Obsługiwane? Komentarz
&lt;address&gt; częściowo Przechowywana jako wartość właściwości
&lt;AddressDetails&gt; nie
&lt;Alias&gt; nie
&lt;altitude&gt; nie
&lt;altitudeMode&gt; nie
&lt;atom:author&gt; nie
&lt;atom:link&gt; nie
&lt;atom:name&gt; nie
&lt;BalloonStyle&gt; częściowo tylko <text> jest obsługiwany
&lt;begin&gt; Nie dotyczy &lt;TimeSpan&gt; nie jest obsługiwany
&lt;bgColor&gt; nie
&lt;bottomFov&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;Camera&gt; nie
&lt;Change&gt; częściowo obsługiwane są tylko zmiany stylu
&lt;color&gt; częściowo zawiera hashtagi #AABBGGRR i #BBGGRR; nie jest obsługiwana w elementach <ScreenOverlay> i <GroundOverlay>.
&lt;colorMode&gt; tak
&lt;cookie&gt; nie &lt;NetworkLinkControl&gt; nieobsługiwane
&lt;coordinates&gt; tak
&lt;Create&gt; nie
&lt;Data&gt; nie
&lt;Delete&gt; nie
&lt;description&gt; tak Tylko zwykły tekst; treść HTML nie jest obsługiwana
&lt;displayMode&gt; nie
&lt;displayName&gt; nie
&lt;Document&gt; tak
&lt;drawOrder&gt; tak
&lt;east&gt; tak
&lt;end&gt; Nie dotyczy &lt;TimeSpan&gt; nie jest obsługiwany
&lt;expires&gt; nie &lt;NetworkLinkControl&gt; nieobsługiwane
&lt;ExtendedData&gt; częściowo bez typu <Dane> tylko, bez <SimpleData> lub <Schema>, a zamienniki elementów form$[dataName] nie są obsługiwane.
&lt;extrude&gt; nie
&lt;fill&gt; tak
&lt;flyToView&gt; nie &lt;NetworkLinkControl&gt; nieobsługiwane
&lt;Folder&gt; tak
&lt;gridOrigin&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;GroundOverlay&gt; tak
&lt;heading&gt; tak
&lt;hotSpot&gt; tak
&lt;href&gt; tak
&lt;httpQuery&gt; nie
&lt;Icon&gt; tak
&lt;IconStyle&gt; tak
&lt;ImagePyramid&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;innerBoundaryIs&gt; tak domyślnie z <LinearRing> zamówienie
&lt;ItemIcon&gt; Nie dotyczy &lt;ListStyle&gt; nie jest obsługiwany
&lt;key&gt; tak
&lt;kml&gt; tak
&lt;LabelStyle&gt; nie
<szerokość geograficzna> tak
&lt;LatLonAltBox&gt; nie
&lt;LatLonBox&gt; tak
&lt;leftFov&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;LinearRing&gt; tak
&lt;LineString&gt; tak
&lt;LineStyle&gt; tak
<Link> nie
&lt;linkDescription&gt; Nie dotyczy &lt;NetworkLinkControl&gt; nieobsługiwane
&lt;linkName&gt; Nie dotyczy &lt;NetworkLinkControl&gt; nieobsługiwane
&lt;linkSnippet&gt; Nie dotyczy &lt;NetworkLinkControl&gt; nieobsługiwane
&lt;listItemType&gt; Nie dotyczy &lt;ListStyle&gt; nie jest obsługiwany
&lt;ListStyle&gt; nie
&lt;Location&gt; Nie dotyczy &lt;Model&gt; nie jest obsługiwany
&lt;Lod&gt; tak
<długość geograficzna> tak
&lt;LookAt&gt; nie
&lt;maxAltitude&gt; nie
&lt;maxFadeExtent&gt; nie
&lt;maxHeight&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;maxLodPixels&gt; nie
&lt;maxSessionLength&gt; nie
&lt;maxWidth&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
<message> nie
&lt;minAltitude&gt; nie
&lt;minFadeExtent&gt; nie
&lt;minLodPixels&gt; nie
&lt;minRefreshPeriod&gt; nie &lt;NetworkLink&gt;
&lt;Model&gt; nie
&lt;MultiGeometry&gt; tak
&lt;name&gt; tak
&lt;near&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;NetworkLink&gt; nie
&lt;NetworkLinkControl&gt; nie
&lt;north&gt; tak
&lt;open&gt; tak Przechowywana jako wartość właściwości
<Orientacja> Nie dotyczy &lt;Model&gt; nie jest obsługiwany
&lt;outerBoundaryIs&gt; tak domyślnie z <LinearRing> zamówienie
&lt;outline&gt; tak
&lt;overlayXY&gt; nie
&lt;Pair&gt; tak
&lt;phoneNumber&gt; częściowo Przechowywana jako wartość właściwości
&lt;PhotoOverlay&gt; nie
<Oznaczenie miejsca> tak
&lt;Point&gt; tak
&lt;Polygon&gt; tak
&lt;PolyStyle&gt; tak
&lt;range&gt; tak
&lt;refreshInterval&gt; nie
&lt;refreshMode&gt; nie
&lt;refreshVisibility&gt; nie
&lt;Region&gt; tak
&lt;ResourceMap&gt; Nie dotyczy &lt;Model&gt; nie jest obsługiwany
&lt;rightFov&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;roll&gt; Nie dotyczy &lt;Camera&gt; i <Model> nie są obsługiwane
&lt;rotation&gt; tak
&lt;rotationXY&gt; nie
&lt;Scale&gt; Nie dotyczy &lt;Model&gt; nie jest obsługiwany
&lt;scale&gt; tak
&lt;Schema&gt; nie
&lt;SchemaData&gt; nie
&lt;ScreenOverlay&gt; nie
&lt;screenXY&gt; Nie dotyczy &lt;ScreenOverlay&gt; nie jest obsługiwany
&lt;shape&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;SimpleData&gt; Nie dotyczy &lt;SchemaData&gt; nie są obsługiwane
&lt;SimpleField&gt; Nie dotyczy &lt;Schema&gt; nie są obsługiwane
&lt;size&gt; tak
&lt;Snippet&gt; nie
&lt;south&gt; tak
&lt;state&gt; Nie dotyczy &lt;ListStyle&gt; nie jest obsługiwany
&lt;Style&gt; tak
&lt;StyleMap&gt; częściowo Nie podano stylu wyróżnionego. Wbudowane mapy StyleMap nie są obsługiwane
&lt;styleUrl&gt; tak
&lt;targetHref&gt; nie &lt;Alias&gt; nie jest obsługiwany
&lt;tessellate&gt; nie
&lt;text&gt; tak
&lt;textColor&gt; nie
&lt;tileSize&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;tilt&gt; nie
&lt;TimeSpan&gt; nie
&lt;TimeStamp&gt; nie
&lt;topFov&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
<Aktualizacja> Nie dotyczy &lt;NetworkLinkControl&lt; nieobsługiwane
&lt;value&gt; tak
&lt;viewBoundScale&gt; nie
&lt;viewFormat&gt; nie
&lt;viewRefreshMode&gt; nie
&lt;viewRefreshTime&gt; nie
&lt;ViewVolume&gt; Nie dotyczy &lt;PhotoOverlay&gt; nie jest obsługiwany
&lt;visibility&gt; tak
&lt;west&gt; tak
&lt;when&gt; Nie dotyczy &lt;TimeStamp&gt; nie jest obsługiwany
&lt;width&gt; tak