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