Utilitas untuk Mengimpor KML Google Maps

Pilih platform: Android iOS JavaScript
  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 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