- Wprowadzenie
- Dodawanie warstwy KML
- Czyszczenie warstwy pliku KML
- Dostęp do kontenerów KML
- Dostęp do oznaczeń miejsc w formacie KML i nakładek na poziomie KML
- Dostęp do właściwości KML
- 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 są 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 |