Utilitas Pengimporan KML Google Maps

  1. Pengantar
  2. Menambahkan lapisan KML
  3. Menghapus lapisan KML
  4. Mengakses penampung KML
  5. Mengakses penanda letak KML dan overlay bumi KML
  6. Mengakses properti KML
  7. Fitur-fitur yang didukung KML

Pengantar

KML adalah ekstensi format data XML dan mewakili data geografis pada peta. Dengan menggunakan 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.

Java

KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
      

Kotlin

val layer = 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.

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)
      

Setelah Anda membuat KmlLayer, panggil addLayerToMap()() untuk menambahkan data yang diimpor ke peta.

Java

layer.addLayerToMap();
      

Kotlin

layer.addLayerToMap()
      

Menghapus lapisan KML

Anggaplah Anda telah membuat KmlLayer ini:

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)
      

Untuk menghapus lapisan dari peta, panggil removeLayerFromMap():

Java

layer.removeLayerFromMap();
      

Kotlin

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 tersarang dalam KmlLayer atau KmlContainer:

Java

for (KmlContainer containers : layer.getContainers()) {
    // Do something to container
}
      

Kotlin

for (containers in layer.containers) {
    // Do something to container
}
      

Untuk mengakses penampung yang tersarang dalam KmlLayer atau 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)
        }
    }
      

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 akan mengembalikan iterable KmlPlacemarks atau KmlGroundOverlays masing-masing.

Misalnya, untuk mengakses objek KmlPlacemark dari lapisan:

Java

for (KmlPlacemark placemark : layer.getPlacemarks()) {
    // Do something to Placemark
}
      

Kotlin

for (placemark in layer.placemarks) {
    // 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.

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"))
    }
}
      

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:

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

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