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

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

Wstęp

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

Dodawanie warstwy KML do mapy

Aby dodać do mapy warstwę danych, najpierw utwórz instancję klasy KmlLayer. Wystąpienie KmlLayer można utworzyć na 2 sposoby.

Aby zaimportować i wyrenderować zbiór danych KML z zasobu lokalnego, potrzebne są:

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

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, musisz mieć:

  • Obiekt GoogleMap, w którym ma zostać wyrenderowana 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 obiektu KmlLayer wywołaj addLayerToMap()(), aby dodać zaimportowane dane na mapę.

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

Czyszczenie warstwy KML

Załóżmy, że utworzyłeś(-aś) 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);

      

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

Kotlin



layer.removeLayerFromMap()

      

Java


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ć getContainers() w utworzonej warstwie. Aby sprawdzić, czy w którymś z kontenerów są zagnieżdżone kontenery, możesz wywołać hasContainers(). Aby uzyskać dostęp do tych zagnieżdżonych kontenerów, podobnie jak w warstwie, możesz wywołać getContainers()

Aby uzyskać dostęp do kontenerów, które nie są zagnieżdżone w KmlLayer ani 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, które zagnieżdżone w 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 KML i nakładek na powierzchni KML

Aby uzyskać dostęp do dowolnego oznaczenia miejsca lub warstwy ziemi, które zostały dodane 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 z poziomu:

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 jej klucz właściwości. Możesz też wywołać hasProperty(), aby sprawdzić, czy istnieje. Ten przykład pokazuje, jak pobrać z kontenera wartość właściwości „name” (jeśli 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ą funkcji KmlLayer.OnFeatureClickListener() możesz wykrywać zdarzenia kliknięcia dotyczące obiektów geometrycznych na mapie. Ten przykład rejestruje identyfikator funkcji po kliknięciu jej przez użytkownika:

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ę demonstracyjną

Przykład importowania pliku KML i utworzenia warstwy za jego pomocą znajdziesz w pliku KmlDemoActivity w wersji demonstracyjnej, która zawiera bibliotekę narzędziową. Z przewodnika po konfiguracji dowiesz się, jak uruchomić aplikację w wersji demonstracyjnej.

Funkcje obsługiwane w formacie KML

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