How to get click event for multiple GeoJsonLayers on Google maps

Viewed 27

I am trying to add multiple GeoJsonLayer. When user click on 1 polygon I would like to display data of clicked polygon. Those are some of my polygons:

![enter image description here

This is my function in which I get data from API and draw geojson layers on google maps.

override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap
        var geojson = ArrayList<GeojsonResponse>()

        val userGerkId: String? = SharedPrefManager.getInstance(applicationContext).user.gerkMID

        RetrofitClientLands.instance.getLand(userGerkId).enqueue(object : Callback<GeojsonResponse> {
            override fun onResponse(
                call: Call<GeojsonResponse>,
                response: Response<GeojsonResponse>
            ) {
                if (response.code() == 200) {
                    val body = response.body()

                    if (body != null) {
                        for (i in 0 until body.lands.size) {
                            val geo = body.lands[i]

                            val geos = geo.get("geometry")
                            val properties = geo.get("properties")

                            //Log.i("Properties", properties.toString())
                            val geometryJson: JSONObject = JSONObject(geos.toString())
                            val geoJsonData: JSONObject = geometryJson

                            val layer = GeoJsonLayer(mMap, geoJsonData)
                            val style: GeoJsonPolygonStyle = layer.defaultPolygonStyle
                            style.fillColor = resources.getColor(R.color.darkGray)
                            style.strokeColor = resources.getColor(R.color.darkerGray)
                            style.strokeWidth = 2f
                            layer.addLayerToMap()

                            layer.setOnFeatureClickListener(
                                GeoJsonOnFeatureClickListener { feature: Feature ->
                                    Toast.makeText(
                                        applicationContext,
                                        "GeoJSON polygon clicked: $properties",
                                        Toast.LENGTH_SHORT
                                    ).show()
                                })
                        }

                    } else {
                        Log.i("Map-error", response.errorBody().toString())
                    }
                }
            }

            override fun onFailure(call: Call<GeojsonResponse>, t: Throwable) {
                Log.i("Map response", t.message.toString())
                Toast.makeText(
                    applicationContext,
                    "Prišlo je do napake, na novo zaženite aplikacijo",
                    Toast.LENGTH_LONG
                ).show()
            }
        })

        // adding marker
        mMap.moveCamera(CameraUpdateFactory.newLatLng(LatLng(45.92757404830929, 15.595209429220395)))
        mMap.uiSettings.isZoomControlsEnabled = true
        mMap.animateCamera( CameraUpdateFactory.zoomTo( 12.5f ) );

    }

I tried to set style.isClickable = false and then add code below, but every time i clicked on layer, it returns the same data (because whole map is clickable ig).

mMap.setOnMapClickListener {
    Log.i("Map_clicked", "polygon: $properties")
}

So is there any other way of doing this? This thread has the same problem described. How to add multiple GeoJsonLayer runtime and get click event in android

0 Answers
Related