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

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Wybierz platformę: Android iOS JavaScript
  1. Wprowadzenie
  2. Dodawanie warstwy KML
  3. Czyszczenie warstwy pliku KML
  4. Dostęp do kontenerów KML
  5. Dostęp do oznaczeń miejsc w formacie KML i nakładek na poziomie KML
  6. Dostęp do właściwości KML
  7. Funkcje obsługiwane przez KML

Wstęp

KML to rozszerzenie formatu danych XML, który reprezentuje dane geograficzne na mapie. Za pomocą tego narzędzia możesz przekonwertować obiekty KML na kształty geograficzne i wyrenderować je jako warstwę na mapie. Aby dodać do mapy dane KML lub je z niej usunąć, wywołaj odpowiednio właściwości addLayerToMap() i removeLayerFromMap(). Aby uzyskać dostęp do właściwości w obiekcie KML, wywołaj właściwość getProperties() w dowolnym punkcie oznaczenia miejsca, naziemnym, dokumencie lub folderze.

Dodaj do mapy warstwę KML

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

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

  • Obiekt GoogleMap, na którym ma być renderowana warstwa.
  • Lokalny plik zasobów zawierający dane KML.
  • Obiekt Context, który jest wymagany do otwierania pliku zasobów lokalnych.

Java


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

      

Kotlin


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

      

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

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

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)

      

Po utworzeniu obiektu KmlLayer wywołaj właściwość addLayerToMap()(), aby dodać zaimportowane dane do mapy.

Java


layer.addLayerToMap();

      

Kotlin


layer.addLayerToMap()

      

Wyczyść warstwę KML

Załóżmy, że masz utworzony ten element 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)

      

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

Java


layer.removeLayerFromMap();

      

Kotlin


layer.removeLayerFromMap()

      

Dostęp do kontenerów KML

Aby uzyskać dostęp do kontenerów, które zostały dodane do warstwy, możesz wywołać metodę getContainers() w utworzonej przez siebie warstwie. Aby sprawdzić, czy któryś z kontenerów ma zagnieżdżone kontenery, możesz wywołać hasContainers(). Aby uzyskać dostęp do tych zagnieżdżonych kontenerów, podobnie jak można to robić w warstwie, możesz wywołać getContainers()

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

Java


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

      

Kotlin


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

      

Aby uzyskać dostęp do kontenerów, które zagnieżdżone w elementach KmlLayer lub 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)
        }
    }

      

Dostęp do oznaczeń miejsc KML i nakładek na poziomie KML

Aby uzyskać dostęp do nakładki oznaczenia lub powierzchni, która została dodana do warstwy, możesz wywołać metodę getPlacemarks() lub getGroundOverlays() w warstwie lub kontenerze. Wywołanie spowoduje zwrócenie iteracji odpowiednio KmlPlacemarks lub KmlGroundOverlays.

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

Java


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

      

Kotlin


for (placemark in layer.placemarks) {
    // 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 oznaczenia miejsca, wywołaj element getProperty() i przyznaj mu klucz właściwości. Możesz też wywołać funkcję hasProperty(), aby sprawdzić, czy istnieje. Ten przykład pokazuje, jak pobrać wartość właściwości "name" z kontenera, jeśli istnieje.

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

      

Zdarzenia kliknięcia w geometrii KML

Za pomocą właściwości KmlLayer.OnFeatureClickListener() możesz nasłuchiwać zdarzeń kliknięcia w funkcjach geometrycznych na mapie. Poniższy przykład rejestruje identyfikator funkcji, gdy użytkownik ją kliknie:

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

      

Zobacz aplikację demonstracyjną

Importujemy plik KML i tworzymy w nim warstwę, korzystając z KmlDemoActivity w aplikacji demonstracyjnej, która zawiera bibliotekę narzędzi. Z przewodnika po konfiguracji dowiesz się, jak uruchomić aplikację w wersji demonstracyjnej.

Obsługiwane funkcje formatu KML

Element KML Obsługiwane? Komentarz
<address> częściowo Zapisane jako wartość właściwości
<AddressDetails> nie
<Alias> nie
<height> nie
<altitudeMode> nie
<atom:author> nie
<atom:link> nie
<atom:name> nie
<BalloonStyle> częściowo tylko <text> jest obsługiwany
<begin> Nie dotyczy <TimeSpan> nie jest obsługiwany
<bgColor> nie
<bottomFov> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<Kamera> nie
<Zmień> częściowo obsługiwane są tylko zmiany stylu
<color> częściowo obejmuje elementy #AABBGGRR i #BBGGRR; nie są obsługiwane w parametrach <ScreenNakładka> ani <GroundNakładka>
<colorMode> tak
<cookie> nie <NetworkLinkControl> nieobsługiwany
<współrzędne> tak
<Create> nie
<Dane; nie
<Delete> nie
<description> tak Tylko zwykły tekst – nie jest obsługiwana żadna treść HTML
<displayMode> nie
<displayName> nie
<Dokument> tak
<drawOrder> tak
<wschód> tak
<end> Nie dotyczy <TimeSpan> nie jest obsługiwany
<exp> nie <NetworkLinkControl> nieobsługiwany
<ExtendedData> częściowo Elementy typu <Data> only, nie <SimpleData> lub <Schema> oraz zamienniki elementu form$[dataName] nie są obsługiwane.
<wyodrębnianie> nie
<fill> tak
<flyToView> nie <NetworkLinkControl> nieobsługiwany
<Folder> tak
<gridOrigin> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<Nakładka%> tak
<headline> tak
<hotSpot> tak
<href> tak
<httpQuery> nie
<k&; tak
<IconStyle> tak
<ImagePyramid> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<innerBoundaryIs> tak domyślnie z zamówienia <LinearRing>
<ItemIcon> Nie dotyczy <ListStyle> nie jest obsługiwany
<key> tak
<audio> tak
<LabelStyle> nie
<width> tak
<LatLonAltBox> nie
<LatLonBox> tak
<leftFov> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<Ring> tak
<LineString> tak
<LineStyle> tak
<Link> nie
<linkDescription> Nie dotyczy <NetworkLinkControl> nieobsługiwany
<linkName> Nie dotyczy <NetworkLinkControl> nieobsługiwany
<linkSnippet> Nie dotyczy <NetworkLinkControl> nieobsługiwany
<listItemType> Nie dotyczy <ListStyle> nie jest obsługiwany
<ListStyle> nie
<Lokalizacja> Nie dotyczy &Model; > nie jest obsługiwany
<Lod> tak
<length> tak
<Look> nie
<maxAlheight> nie
<maxFadeExtent> nie
<maxHeight> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<maxLodPixels> nie
<maxSessionLength> nie
<maxWidth> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<message> nie
<minAheight> nie
<minFadeExtent> nie
<minLodPixels> nie
<minRefreshPeriod> nie <NetworkLink>
<Model> nie
<Multigeometria> tak
<name> tak
<w pobliżu> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<NetworkLink> nie
<NetworkLinkControl> nie
<północ> tak
<open> tak Zapisane jako wartość właściwości
<Orientacja> Nie dotyczy &Model; > nie jest obsługiwany
<externalerBoundaryIs> tak domyślnie z zamówienia <LinearRing>
<outline> tak
<overlayXY> nie
<Par; tak
<phoneNumber> częściowo Zapisane jako wartość właściwości
<NakładkaNakładka> nie
<oznaczenie miejsca> tak
<Point> tak
<Wielokąt> tak
<PolyStyle> tak
<zakres> tak
<RefreshINTERVAL> nie
<RefreshMode> nie
<RefreshWidoczność> nie
<Region; tak
<ResourceMap> Nie dotyczy &Model; > nie jest obsługiwany
<rightFov> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<roll> Nie dotyczy <Aparat> <Model> nie jest obsługiwany
<obrót> tak
<rotacjaXY> nie
<Skala> Nie dotyczy &Model; > nie jest obsługiwany
<scale> tak
<Schemat> nie
<SchemaData> nie
<ScreenNakładka> nie
<screenXY> Nie dotyczy <ScreenNakładka> nie jest obsługiwany
<kształt> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<SimpleData> Nie dotyczy <SchemaData> nie są obsługiwane
<SimpleField> Nie dotyczy <Schemat> nie jest obsługiwany
<size> tak
<Snippet> nie
<south> tak
<state> Nie dotyczy <ListStyle> nie jest obsługiwany
<Styl> tak
<StyleMap> częściowo Nie podano wyróżnionego stylu. Wbudowane mapy stylu nie są obsługiwane
<styleUrl> tak
<targetHref> nie Element <Alias> nie jest obsługiwany
<tessellate> nie
<text> tak
<textColor> nie
<tilSize> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<przechylanie> nie
<TimeSpan> nie
<TimeStamp> nie
<topFov> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<Update> Nie dotyczy <NetworkLinkControl< nieobsługiwany
<value> tak
<viewBoundScale> nie
<viewFormat> nie
<viewRefreshMode> nie
<viewRefreshTime> nie
<Wyświetl głośność> Nie dotyczy <NakładkaNakładka> nie jest obsługiwana
<widoczność> tak
<west> tak
<when> Nie dotyczy <TimeStamp> nie jest obsługiwany
<width> tak