Google Maps Android GeoJSON Utility

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

Kotlin



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

      

Java


JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new 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

Kotlin



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

      

Java


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

      

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

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

Menghapus GeoJsonLayer

Anggaplah Anda telah menambahkan lapisan ini

Kotlin



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

      

Java


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

      

Untuk menghapus GeoJsonLayer, panggil removeLayerFromMap()

Kotlin



layer.removeLayerFromMap()

      

Java


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.

Kotlin



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

      

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

      

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

Kotlin



layer.addFeature(pointFeature)

      

Java


layer.addFeature(pointFeature);

      

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

Kotlin



layer.removeFeature(pointFeature)

      

Java


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. Tindakan ini akan menampilkan iterable GeoJsonFeatures yang dapat Anda akses menggunakan loop for-each seperti yang ditampilkan di bawah.

Kotlin



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

      

Java


for (GeoJsonFeature feature : layer.getFeatures()) {
    // 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.

Kotlin



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

      

Java


if (feature.hasProperty("Ocean")) {
    String 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:

Kotlin



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

      

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

      

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 tersebut dapat ditarik bersama judul dan cuplikan.

Kotlin



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

      

Java


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

      

Gaya yang khusus untuk 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 dapat berupa GeoJsonPointStyle, GeoJsonLineStringStyle, atau GeoJsonPolygonStyle.
  2. Terapkan opsi yang Anda inginkan pada gaya tersebut.
  3. Teruskan objek gaya ke metode yang relevan pada GeoJsonFeature yang dapat berupa setPointStyle(), setLineStringStyle(), atau setPolygonStyle().

Misalnya, berikut cara menyesuaikan gaya LineString untuk GeoJsonFeature agar warnanya menjadi merah.

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

      

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

      

Melihat aplikasi demo

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