У меня есть метод, называемый маркером create, который принимает LatLng и цвет для создания маркера с определенной координатой.Android: проверьте, существует ли маркер карты Google на основе цвета
public void createMarker(LatLng latLong, float thisNewColor){
MarkerOptions options = new MarkerOptions().position(latLong).draggable(false).icon(BitmapDescriptorFactory.defaultMarker(thisNewColor));
if(mMap != null) {
mMap.addMarker(options).showInfoWindow();
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLong, 17);
mMap.animateCamera(cameraUpdate);
mMap.setMyLocationEnabled(true);
}
}
Основываясь на пользователя, отправляющего новое место, которое будет зеленый маркер, карта должна обновлять каждый раз он посылает новое место. Как я могу проверить, существует или нет зеленый маркер, и удалить и создать новый, если он существует?
EDIT
Эта нить выполняется в фоновом режиме и, когда новое место LatLng найден, он выполняет метод createMarker с зеленым цветом. Поэтому мне нужно, чтобы проверить, что существует, и заменить его, если новый LatLng получает нить:
@SuppressWarnings("unused")
public void onEventMainThread(DisplayNewLocation displayNewLocation){
newLatLngToDisplay = displayNewLocation.getNewLatLng();
this.createMarker(newLatLngToDisplay, BitmapDescriptorFactory.HUE_GREEN);
}
EDIT 2
Вот моя попытка проверить, что добавленный маркер существует , а затем установить его невидимым и попытаться перезаписать его, используя глобальный логический флаг. При построении и тестировании он не переопределяет маркер, он просто создает новый. Следовательно, почему я думаю, что было бы проще сделать это с помощью цвета маркера.
@SuppressWarnings("unused")
public void onEventMainThread(DisplayNewLocation displayNewLocation){
if(isPeerLocation){
this.peerLocation.visible(false);
}
newLatLngToDisplay = displayNewLocation.getNewLatLng();
this.createMarker(newLatLngToDisplay, BitmapDescriptorFactory.HUE_GREEN);
Log.e("NEwLatLng Success!- ", newLatLngToDisplay.toString());
}
public void createMarker(LatLng latLong, float thisNewColor){
if(thisNewColor == BitmapDescriptorFactory.HUE_GREEN){
peerLocation = new MarkerOptions().position(latLong).draggable(false).icon(BitmapDescriptorFactory.defaultMarker(thisNewColor));
this.isPeerLocation = true;
}else{
options = new MarkerOptions().position(latLong).draggable(false).icon(BitmapDescriptorFactory.defaultMarker(thisNewColor));
this.isPeerLocation = false;
}
//MarkerOptions options = new MarkerOptions().position(latLong).draggable(false).icon(BitmapDescriptorFactory.defaultMarker(thisNewColor));
if(mMap != null) {
if(isPeerLocation) {
mMap.addMarker(peerLocation).showInfoWindow();
}else{
mMap.addMarker(options).showInfoWindow();
}
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLong, 17);
mMap.animateCamera(cameraUpdate);
mMap.setMyLocationEnabled(true);
}
}
Благодаря
По цвету это невозможно. Но вы можете сделать это, используя «MarkerId» –
. Проблема заключается в том, что маркер создается динамически без идентификатора маркера. Поскольку создание основано на том, когда пользователь решает отправить свое местоположение клиенту. – TejjD
, но вы можете setId() и getId(). –