- Pengantar
- Menambahkan lapisan KML
- Menghapus lapisan KML
- Mengakses penampung KML
- Mengakses penanda letak KML dan overlay bumi KML
- Mengakses properti KML
- Fitur-fitur yang didukung KML
Pengantar
KML adalah ekstensi format data XML dan mewakili data geografis pada peta. Dengan utilitas ini, Anda dapat mengonversi objek KML menjadi bentuk geografis dan merendernya sebagai lapisan di atas peta. Untuk menambahkan dan menghapus data KML Anda ke dan dari peta, panggil addLayerToMap()
dan removeLayerFromMap()
masing-masing. Untuk mengakses properti dalam objek KML, panggil getProperties()
pada Penanda Letak, GroundOverlay, Dokumen, atau Folder.
Menambahkan lapisan KML pada peta
Untuk menambahkan lapisan data pada peta, pertama-tama buat instance class KmlLayer
. Ada dua cara untuk membuat instance KmlLayer
.
Untuk mengimpor dan merender set data KML dari resource lokal, Anda membutuhkan:
- Objek
GoogleMap
tempat lapisan akan dirender. - File resource lokal yang berisi data KML.
- Objek
Context
, yang diperlukan untuk membuka file resource lokal.
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Untuk mengimpor dan merender set data KML dari aliran data lokal, Anda membutuhkan:
- Objek
GoogleMap
tempat lapisan akan dirender. InputStream
yang berisi data KML.- Objek
Context
, yang diperlukan untuk membuka resource lokal.
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);
Setelah Anda membuat KmlLayer
, panggil
addLayerToMap()()
untuk menambahkan data yang diimpor ke peta.
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
Menghapus lapisan KML
Anggaplah Anda telah membuat KmlLayer
ini:
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);
Untuk menghapus lapisan dari peta, panggil removeLayerFromMap()
:
Kotlin
layer.removeLayerFromMap()
Java
layer.removeLayerFromMap();
Mengakses penampung KML
Untuk mengakses penampung yang telah ditambahkan ke lapisan, Anda dapat memanggil getContainers()
pada lapisan yang sudah Anda buat.
Untuk memeriksa apakah ada penampung yang memiliki penampung bertingkat, Anda dapat memanggil hasContainers()
. Untuk mengakses penampung bertingkat ini, seperti tindakan yang dapat Anda lakukan di lapisan, Anda dapat memanggil getContainers()
Untuk mengakses penampung yang tidak tersusun bertingkat dalam KmlLayer
atau KmlContainer:
Kotlin
for (containers in layer.containers) { // Do something to container }
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Untuk mengakses penampung yang tersusun bertingkat dalam KmlLayer
atau 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()); } } }
Mengakses penanda letak KML dan overlay bumi KML
Untuk mengakses penanda letak atau overlay bumi yang telah ditambahkan ke lapisan, Anda dapat memanggil getPlacemarks()
atau getGroundOverlays()
di lapisan atau penampung. Memanggil salah satunya akan menampilkan iterable KmlPlacemarks
atau KmlGroundOverlays
masing-masing.
Misalnya, untuk mengakses objek KmlPlacemark
dari lapisan:
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Mengakses properti KML
Untuk mengakses properti di penampung atau penanda letak, panggil getProperty()
dan berikan kunci properti. Anda juga dapat memanggil hasProperty()
untuk memeriksa keberadaannya. Contoh ini menunjukkan cara
mengambil "nama" nilai properti dari penampung, jika ada.
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")); } }
Peristiwa Klik Geometri KML
Anda dapat menggunakan KmlLayer.OnFeatureClickListener()
untuk memantau peristiwa klik pada fitur geometri di peta. Contoh berikut mencatat ID fitur saat pengguna
mengklik fitur:
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()); } });
Melihat aplikasi demo
Untuk contoh pengimporan file KML dan pembuatan lapisan
dengannya, lihat KmlDemoActivity
dalam aplikasi demo
yang disertakan bersama library utilitas. Panduan penyiapan menunjukkan cara menjalankan aplikasi demo.
Fitur-fitur yang didukung KML
Elemen KML | Didukung? | Komentar |
---|---|---|
<address> | sebagian | Disimpan sebagai nilai properti |
<AddressDetails> | tidak | |
<Alias> | tidak | |
<altitude> | tidak | |
<altitudeMode> | tidak | |
<atom:author> | tidak | |
<atom:link> | tidak | |
<atom:name> | tidak | |
<BalloonStyle> | sebagian | hanya <text> yang didukung |
<begin> | T/A | <TimeSpan> tidak didukung |
<bgColor> | tidak | |
<bottomFov> | T/A | {PhotoOverlay} tidak didukung |
<Camera> | tidak | |
<Change> | sebagian | hanya perubahan gaya yang didukung |
<color> | sebagian | menyertakan #AABBGGRR dan #BBGGRR; tidak didukung di <ScreenOverlay>, dan <GroundOverlay> |
<colorMode> | ya | |
<cookie> | tidak | <NetworkLinkControl> tidak didukung |
<coordinates> | ya | |
<Create> | tidak | |
<Data> | tidak | |
<Delete> | tidak | |
<description> | ya | Hanya teks biasa, konten HTML tidak didukung |
<displayMode> | tidak | |
<displayName> | tidak | |
<Document> | ya | |
<drawOrder> | ya | |
<east> | ya | |
<end> | T/A | <TimeSpan> tidak didukung |
<expires> | tidak | <NetworkLinkControl> tidak didukung |
<ExtendedData> | sebagian | <Data> tidak bertipe saja, bukan <SimpleData> atau <Schema>, dan penggantian entitas form$[dataName] tidak didukung. |
<extrude> | tidak | |
<fill> | ya | |
<flyToView> | tidak | <NetworkLinkControl> tidak didukung |
<Folder> | ya | |
<gridOrigin> | T/A | {PhotoOverlay} tidak didukung |
<GroundOverlay> | ya | |
<heading> | ya | |
<hotSpot> | ya | |
<href> | ya | |
<httpQuery> | tidak | |
<Icon> | ya | |
<IconStyle> | ya | |
<ImagePyramid> | T/A | {PhotoOverlay} tidak didukung |
<innerBoundaryIs> | ya | secara implisit dari urutan <LinearRing> |
<ItemIcon> | T/A | <ListStyle> tidak didukung |
<key> | ya | |
<kml> | ya | |
<LabelStyle> | tidak | |
<latitude> | ya | |
<LatLonAltBox> | tidak | |
<LatLonBox> | ya | |
<leftFov> | T/A | {PhotoOverlay} tidak didukung |
<LinearRing> | ya | |
<LineString> | ya | |
<LineStyle> | ya | |
<Link> | tidak | |
<linkDescription> | T/A | <NetworkLinkControl> tidak didukung |
<linkName> | T/A | <NetworkLinkControl> tidak didukung |
{linkSnippet} | T/A | <NetworkLinkControl> tidak didukung |
{listItemType} | T/A | <ListStyle> tidak didukung |
<ListStyle> | tidak | |
<Location> | T/A | <Model> tidak didukung |
<Lod> | ya | |
<longitude> | ya | |
<LookAt> | tidak | |
<maxAltitude> | tidak | |
<maxFadeExtent> | tidak | |
<maxHeight> | T/A | {PhotoOverlay} tidak didukung |
<maxLodPixels> | tidak | |
<maxSessionLength> | tidak | |
<maxWidth> | T/A | {PhotoOverlay} tidak didukung |
<message> | tidak | |
<minAltitude> | tidak | |
<minFadeExtent> | tidak | |
<minLodPixels> | tidak | |
<minRefreshPeriod> | tidak | <NetworkLink> |
<Model> | tidak | |
<MultiGeometry> | ya | |
<name> | ya | |
<near> | T/A | {PhotoOverlay} tidak didukung |
<NetworkLink> | tidak | |
{NetworkLinkControl} | tidak | |
<north> | ya | |
<open> | ya | Disimpan sebagai nilai properti |
<Orientation> | T/A | <Model> tidak didukung |
<outerBoundaryIs> | ya | secara implisit dari urutan <LinearRing> |
<outline> | ya | |
<overlayXY> | tidak | |
<Pair> | ya | |
<phoneNumber> | sebagian | Disimpan sebagai nilai properti |
<PhotoOverlay> | tidak | |
<Placemark> | ya | |
<Point> | ya | |
<Polygon> | ya | |
<PolyStyle> | ya | |
<range> | ya | |
<refreshInterval> | tidak | |
{refreshMode} | tidak | |
<refreshVisibility> | tidak | |
<Region> | ya | |
<ResourceMap> | T/A | <Model> tidak didukung |
<rightFov> | T/A | {PhotoOverlay} tidak didukung |
<roll> | T/A | <Camera> dan <Model> tidak didukung |
<rotation> | ya | |
<rotationXY> | tidak | |
<Scale> | T/A | <Model> tidak didukung |
<scale> | ya | |
<Schema> | tidak | |
<SchemaData> | tidak | |
<ScreenOverlay> | tidak | |
<screenXY> | T/A | <ScreenOverlay> tidak didukung |
<shape> | T/A | {PhotoOverlay} tidak didukung |
<SimpleData> | T/A | <SchemaData> tidak didukung |
<SimpleField> | T/A | <Schema> tidak didukung |
<size> | ya | |
<Snippet> | tidak | |
<south> | ya | |
<state> | T/A | <ListStyle> tidak didukung |
<Style> | ya | |
<StyleMap> | sebagian | Gaya yang disorot tidak diberikan. StyleMaps sebaris tidak didukung |
<styleUrl> | ya | |
<targetHref> | tidak | <Alias> tidak didukung |
<tessellate> | tidak | |
<text> | ya | |
<textColor> | tidak | |
<tileSize> | T/A | {PhotoOverlay} tidak didukung |
<tilt> | tidak | |
<TimeSpan> | tidak | |
<TimeStamp> | tidak | |
<topFov> | T/A | {PhotoOverlay} tidak didukung |
<Update> | T/A | <NetworkLinkControl< tidak didukung |
<value> | ya | |
<viewBoundScale> | tidak | |
<viewFormat> | tidak | |
<viewRefreshMode> | tidak | |
<viewRefreshTime> | tidak | |
<ViewVolume> | T/A | {PhotoOverlay} tidak didukung |
<visibility> | ya | |
<west> | ya | |
<when> | T/A | <TimeStamp> tidak didukung |
<width> | ya |