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