- Wprowadzenie
- Dodawanie warstwy KML
- Usuwanie warstwy KML
- Dostęp do kontenerów KML
- Dostęp do oznaczeń miejsc w formacie KML i nakładek na teren KML
- Dostęp do właściwości KML
- 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
Contextwymagany 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
InputStreamzawierający dane KML. - Obiekt
Contextwymagany 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 |
|---|---|---|
| <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 | tylko <text> jest obsługiwany |
| <begin> | Nie dotyczy | <TimeSpan> nie jest obsługiwany |
| <bgColor> | nie | |
| <bottomFov> | Nie dotyczy | <PhotoOverlay> nie jest obsługiwany |
| <Camera> | nie | |
| <Change> | częściowo | obsługiwane są tylko zmiany stylu |
| <color> | częściowo | zawiera hashtagi #AABBGGRR i #BBGGRR; nie jest obsługiwana w elementach <ScreenOverlay> i <GroundOverlay>. |
| <colorMode> | tak | |
| <cookie> | nie | <NetworkLinkControl> nieobsługiwane |
| <coordinates> | tak | |
| <Create> | nie | |
| <Data> | nie | |
| <Delete> | nie | |
| <description> | tak | Tylko zwykły tekst; treść HTML nie jest obsługiwana |
| <displayMode> | nie | |
| <displayName> | nie | |
| <Document> | tak | |
| <drawOrder> | tak | |
| <east> | tak | |
| <end> | Nie dotyczy | <TimeSpan> nie jest obsługiwany |
| <expires> | nie | <NetworkLinkControl> nieobsługiwane |
| <ExtendedData> | częściowo | bez typu <Dane> tylko, bez <SimpleData> lub <Schema>, a zamienniki elementów form$[dataName] nie są obsługiwane. |
| <extrude> | nie | |
| <fill> | tak | |
| <flyToView> | nie | <NetworkLinkControl> nieobsługiwane |
| <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 <LinearRing> zamówienie |
| <ItemIcon> | Nie dotyczy | <ListStyle> nie jest obsługiwany |
| <key> | tak | |
| <kml> | tak | |
| <LabelStyle> | nie | |
| <szerokość geograficzna> | tak | |
| <LatLonAltBox> | nie | |
| <LatLonBox> | tak | |
| <leftFov> | Nie dotyczy | <PhotoOverlay> nie jest obsługiwany |
| <LinearRing> | tak | |
| <LineString> | tak | |
| <LineStyle> | tak | |
| <Link> | nie | |
| <linkDescription> | Nie dotyczy | <NetworkLinkControl> nieobsługiwane |
| <linkName> | Nie dotyczy | <NetworkLinkControl> nieobsługiwane |
| <linkSnippet> | Nie dotyczy | <NetworkLinkControl> nieobsługiwane |
| <listItemType> | Nie dotyczy | <ListStyle> nie jest obsługiwany |
| <ListStyle> | nie | |
| <Location> | Nie dotyczy | <Model> nie jest obsługiwany |
| <Lod> | tak | |
| <długość geograficzna> | 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 | |
| <near> | Nie dotyczy | <PhotoOverlay> nie jest obsługiwany |
| <NetworkLink> | nie | |
| <NetworkLinkControl> | nie | |
| <north> | tak | |
| <open> | tak | Przechowywana jako wartość właściwości |
| <Orientacja> | Nie dotyczy | <Model> nie jest obsługiwany |
| <outerBoundaryIs> | tak | domyślnie z <LinearRing> zamówienie |
| <outline> | tak | |
| <overlayXY> | nie | |
| <Pair> | tak | |
| <phoneNumber> | częściowo | Przechowywana jako wartość właściwości |
| <PhotoOverlay> | nie | |
| <Oznaczenie miejsca> | 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 | <Camera> i <Model> nie są obsługiwane |
| <rotation> | tak | |
| <rotationXY> | nie | |
| <Scale> | Nie dotyczy | <Model> nie jest obsługiwany |
| <scale> | tak | |
| <Schema> | nie | |
| <SchemaData> | nie | |
| <ScreenOverlay> | nie | |
| <screenXY> | Nie dotyczy | <ScreenOverlay> nie jest obsługiwany |
| <shape> | Nie dotyczy | <PhotoOverlay> nie jest obsługiwany |
| <SimpleData> | Nie dotyczy | <SchemaData> nie są obsługiwane |
| <SimpleField> | Nie dotyczy | <Schema> nie są obsługiwane |
| <size> | tak | |
| <Snippet> | nie | |
| <south> | tak | |
| <state> | Nie dotyczy | <ListStyle> nie jest obsługiwany |
| <Style> | tak | |
| <StyleMap> | częściowo | Nie podano stylu wyróżnionego. Wbudowane mapy StyleMap 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 | <NetworkLinkControl< nieobsługiwane |
| <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 | <TimeStamp> nie jest obsługiwany |
| <width> | tak |