Google Maps API (Android SDK). Каждый раз, когда местоположение обновляется через location listener, на картах отображается новый маркер

#android #kotlin #google-maps-android-api-3

#Android #kotlin #google-maps-android-api-3

Вопрос:

Каждый раз, когда местоположение обновляется через location listener, на моей карте появляется новый маркер, который выглядит так странно. Я просто хочу, чтобы был обновлен только один маркер.

  override fun onMapReady(googleMap: GoogleMap?) {
    val locationListener = LocationListener {
        val latLng = LatLng(it.latitude,it.longitude)
        
        googleMap!!.addMarker(
            MarkerOptions()
                .position(latLng)
                .title("My Location")
        )

        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,16f))
    }
    
    try {
        locationManager!!.requestLocationUpdates(
            LocationManager.GPS_PROVIDER,
            1000, 0f, locationListener
        )
    } catch (ex: SecurityException) {
        ex.printStackTrace()
    }
}
  

Ответ №1:

Создайте поле в классе для маркера.

 private lateinit var locationMarker: Marker
  

Добавляйте маркер на карту только в том случае, если ваше поле не было инициализировано, иначе обновите предыдущий маркер. Вот так:

 val locationListener = LocationListener {
    val latLng = LatLng(it.latitude,it.longitude)

    if(::locationMarker.isInitialized) {
        locationMarker.position = latLng
    } else {
        locationMarker = googleMap!!.addMarker(
            MarkerOptions()
                .position(latLng)
                .title("My Location")
        )
    }

    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,16f))
}