Utilitas GeoJSON Android Google Maps

  1. Pengantar
  2. Menambahkan GeoJsonLayer ke peta Anda
  3. Menghapus GeoJsonLayer
  4. Menambahkan dan menghapus GeoJsonFeature
  5. Mengakses GeoJsonFeatures dan propertinya
  6. Menata gaya GeoJsonLayer dan GeoJsonFeatures
  7. Melihat aplikasi demo

Pengantar

GeoJSON adalah ekstensi format data JSON dan menampilkan data geografis. Dengan menggunakan utilitas ini, Anda dapat menyimpan fitur geografis dalam format GeoJSON dan merendernya sebagai lapisan di atas peta. Untuk menambahkan dan menghapus data GeoJSON Anda ke dan dari peta, panggil addLayerToMap() dan removeLayerFromMap() masing-masing. Anda juga dapat menambahkan dan menghapus fitur dengan memanggil addFeature() dan removeFeature() serta meneruskan objek GeoJsonFeature. Jika ingin mengakses fitur, Anda dapat memanggil getFeatures() untuk mendapatkan iterable dari semua objek GeoJsonFeature yang telah ditambahkan ke lapisan.

Anda juga dapat menetapkan gaya default yang akan diterapkan pada fitur sebelum ditambahkan ke lapisan, dengan memanggil getDefaultPointStyle(), getDefaultLineStringStyle(), atau getDefaultPolygonStyle(), dan menetapkan opsi gayanya masing-masing. Atau, Anda dapat menetapkan gaya setiap GeoJsonFeature dengan memanggil setPointStyle(), setLineStringStyle(), atau setPolygonStyle() pada fitur tersebut dan dengan meneruskan objek gaya yang relevan.

Menambahkan GeoJsonLayer ke peta Anda

Untuk menambahkan lapisan GeoJson ke peta, pertama-tama buat instance class GeoJsonLayer. Ada dua cara untuk membuat instance GeoJsonLayer.

Untuk mengimpor dari JSONObject, Anda memerlukan hal berikut:

  • Objek GoogleMap tempat lapisan akan dirender.
  • JSONObject berisi data GeoJSON yang akan ditambahkan ke lapisan

Java

JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
      

Kotlin

val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)
      

Untuk mengimpor dari file GeoJSON lokal, Anda memerlukan hal berikut:

  • Objek GoogleMap tempat lapisan akan dirender.
  • File resource lokal yang berisi data GeoJSON
  • Objek Context, yang diperlukan untuk membuka file resource lokal

Java

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

Kotlin

val layer = GeoJsonLayer(map, R.raw.geojson_file, context)
      

Setelah Anda membuat GeoJsonLayer, panggil addLayerToMap() untuk menambahkan data yang diimpor ke peta:

Java

layer.addLayerToMap();
      

Kotlin

layer.addLayerToMap()
      

Menghapus GeoJsonLayer

Anggaplah Anda telah menambahkan lapisan ini

Java

JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);
      

Kotlin

val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)
      

Untuk menghapus GeoJsonLayer, panggil removeLayerFromMap()

Java

layer.removeLayerFromMap();
      

Kotlin

layer.removeLayerFromMap()
      

Menambahkan dan menghapus GeoJsonFeature

Fitur dalam GeoJSON memiliki jenis "feature". Isinya adalah geometri, anggota properti dan secara opsional berisi kotak pembatas atau ID.

Anda dapat membuat objek GeoJsonFeature masing-masing, dan menambahkannya ke GeoJsonLayer.

Anggaplah Anda telah membuat fitur yang berisi satu titik pada 0, 0 dengan satu entri dalam propertinya dan tanpa kotak pembatas.

Java

GeoJsonPoint point = new GeoJsonPoint(new LatLng(0, 0));
HashMap<String, String> properties = new HashMap<>();
properties.put("Ocean", "South Atlantic");
GeoJsonFeature pointFeature = new GeoJsonFeature(point, "Origin", properties, null);
      

Kotlin

val point = GeoJsonPoint(LatLng(0.0, 0.0))
val properties = hashMapOf("Ocean" to "South Atlantic")
val pointFeature = GeoJsonFeature(point, "Origin", properties, null)
      

Untuk menambahkan fitur ke lapisan, panggil addFeature() dan teruskan fitur yang akan ditambahkan.

Java

layer.addFeature(pointFeature);
      

Kotlin

layer.addFeature(pointFeature)
      

Untuk menghapus fitur setelah menambahkannya ke lapisan, panggil removeFeature() dan teruskan fitur yang akan dihapus.

Java

layer.removeFeature(pointFeature);
      

Kotlin

layer.removeFeature(pointFeature)
      

Mengakses GeoJsonFeatures dan propertinya

Untuk mengakses semua GeoJsonFeatures yang telah ditambahkan ke lapisan, Anda dapat memanggil getFeatures() di GeoJsonLayer yang telah Anda buat. Ini akan mengembalikan iterable GeoJsonFeatures yang dapat Anda akses untuk setiap loop seperti yang ditampilkan di bawah ini.

Java

for (GeoJsonFeature feature : layer.getFeatures()) {
    // Do something to the feature
}
      

Kotlin

for (feature in layer.features) {
    // Do something to the feature
}
      

Gunakan metode hasProperty() dan getProperty() bersama-sama dengan metode getFeatures() untuk memeriksa apakah setiap fitur yang disimpan memiliki properti tertentu dan mengaksesnya jika ada.

Java

if (feature.hasProperty("Ocean")) {
    String oceanProperty = feature.getProperty("Ocean");
}
      

Kotlin

if (feature.hasProperty("Ocean")) {
    val oceanProperty = feature.getProperty("Ocean")
}
      

Peristiwa Klik Geometri GeoJSON

Anda dapat menggunakan GeoJsonLayer.OnFeatureClickListener() untuk memantau peristiwa klik pada fitur geometri di peta. Contoh berikut mencatat judul fitur saat pengguna mengklik fitur:

Java

// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener(new Layer.OnFeatureClickListener() {
    @Override
    public void onFeatureClick(Feature feature) {
        Log.i("GeoJsonClick", "Feature clicked: " + feature.getProperty("title"));
    }
});
      

Kotlin

// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
    Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}")
}
      

Menata gaya GeoJsonLayer dan GeoJsonFeatures

Anda dapat menetapkan gaya default untuk GeoJsonLayer, atau gaya masing-masing fitur dalam lapisan.

Gaya Default

Dalam GeoJsonLayer, Anda dapat menetapkan gaya default untuk semua titik, linestring, dan poligon yang telah ditambahkan ke lapisan. Gaya default hanya diterapkan jika fitur itu belum memiliki gaya yang ditetapkan untuk geometrinya. Semua perubahan yang Anda buat pada gaya default juga akan tercermin dalam semua fitur yang menggunakan gaya default tersebut.

Langkah-langkah untuk menerapkan gaya default adalah sebagai berikut

  1. Ambil objek gaya default yang relevan, ini bisa berupa GeoJsonPointStyle, GeoJsonLineStringStyle, atau GeoJsonPolygonStyle.
  2. Terapkan opsi yang Anda inginkan pada gaya tersebut.

Misalnya, contoh kode berikut menampilkan cara memodifikasi gaya titik default yang akan membuat titik dapat ditarik bersama judul dan cuplikan.

Java

GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle("Hello, World!");
pointStyle.setSnippet("I am a draggable marker");
      

Kotlin

val pointStyle = layer.defaultPointStyle
pointStyle.isDraggable = true
pointStyle.title = "Hello, World!"
pointStyle.snippet = "I am a draggable marker"
      

Gaya spesifik pada GeoJsonFeature

Atau Anda dapat menata gaya masing-masing fitur dalam lapisan. Langkah-langkah untuk menerapkan gaya pada GeoJsonFeature adalah sebagai berikut

  1. Buat objek gaya yang relevan, ini bisa berupa GeoJsonPointStyle, GeoJsonLineStringStyle, atau GeoJsonPolygonStyle
  2. Terapkan opsi yang Anda inginkan pada gaya tersebut
  3. Teruskan objek gaya ke metode yang relevan di GeoJsonFeature yang bisa berupa setPointStyle(), setLineStringStyle(), atau setPolygonStyle()

Misalnya, inilah cara menyesuaikan gaya linestring untuk GeoJsonFeature sehingga warnanya menjadi merah.

Java

// Create a new feature containing a linestring
List<LatLng> lineStringArray = new ArrayList<LatLng>();
lineStringArray.add(new LatLng(0, 0));
lineStringArray.add(new LatLng(50, 50));
GeoJsonLineString lineString = new GeoJsonLineString(lineStringArray);
GeoJsonFeature lineStringFeature = new GeoJsonFeature(lineString, null, null, null);

// Set the color of the linestring to red
GeoJsonLineStringStyle lineStringStyle = new GeoJsonLineStringStyle();
lineStringStyle.setColor(Color.RED);

// Set the style of the feature
lineStringFeature.setLineStringStyle(lineStringStyle);
      

Kotlin

// Create a new feature containing a linestring
val lineStringArray: MutableList<LatLng> = ArrayList()
lineStringArray.add(LatLng(0.0, 0.0))
lineStringArray.add(LatLng(50.0, 50.0))
val lineString = GeoJsonLineString(lineStringArray)
val lineStringFeature = GeoJsonFeature(lineString, null, null, null)

// Set the color of the linestring to red
val lineStringStyle = GeoJsonLineStringStyle()
lineStringStyle.color = Color.RED

// Set the style of the feature
lineStringFeature.lineStringStyle = lineStringStyle
      

Melihat aplikasi demo

Untuk contoh mengimpor file GeoJSON dari URL dan membuat lapisan dengannya, lihat GeoJsonDemoActivity dalam aplikasi demo yang disertakan dengan library utilitas. Panduan penyiapan menunjukkan cara menjalankan aplikasi demo.