从 GoogleMap 中删除标记
Posted
技术标签:
【中文标题】从 GoogleMap 中删除标记【英文标题】:Remove a marker from a GoogleMap 【发布时间】:2012-11-21 11:00:38 【问题描述】:在新的 android 版 Google Maps API 中,我们可以add a marker,但没有办法(轻松)删除。
我的解决方案是将标记保留在地图中,并在我想删除标记时重新绘制地图,但这不是很有效。
private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();
private void add(String name, LatLng ll)
final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
mMarkers.put(name, marker);
runOnUiThread(new Runnable()
@Override
public void run()
mMap.addMarker(marker);
);
private void remove(String name)
mMarkers.remove(name);
runOnUiThread(new Runnable()
@Override
public void run()
mMap.clear();
for (MarkerOptions item : mMarkers.values())
mMap.addMarker(item);
);
有人有更好的主意吗?
【问题讨论】:
为什么要使用 Runnable() 来添加标记? 在 UI 线程上做 使用 mMap.clear() 清除所有标记 【参考方案1】:addMarker
的方法签名是:
public final Marker addMarker (MarkerOptions options)
因此,当您通过指定标记的选项将标记添加到GoogleMap
时,您应该保存返回的Marker
对象(而不是您用来创建它的MarkerOptions
对象)。此对象允许您稍后更改标记状态。完成标记后,您可以致电Marker.remove()
将其从地图中删除。
顺便说一句,如果您只想暂时隐藏它,您可以通过调用 Marker.setVisible(boolean)
来切换标记的可见性。
【讨论】:
这对我不起作用。 marker.setVisible(false)、marker.remove(),甚至 markerManager.remove(marker) 都不会影响地图。标记仍然存在。有什么提示吗? 请参阅下面关于持有标记的评论,虽然它在从地图中删除后几乎没有用处,如果您决定检查它的值.. Remove 方法将标记值设置为空...【参考方案2】:像这样将标记添加到地图中
Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));
然后你就可以使用 remove 方法了,它只会删除那个标记
markerName.remove();
【讨论】:
【参考方案3】:要清除地图中的所有涂鸦,请使用
map.clear()
【讨论】:
这会清除地图上的所有叠加层,而不仅仅是问题所暗示的标记。【参考方案4】:如果存在标记,则删除最后一个标记。如果标记不存在,则创建当前标记
Marker currentMarker = null;
if (currentMarker!=null)
currentMarker.remove();
currentMarker=null;
if (currentMarker==null)
currentMarker = mMap.addMarker(new MarkerOptions().position(arg0).
icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
【讨论】:
【参考方案5】:如果您使用 Kotlin 语言,您只需添加以下代码:
创建GoogleMap
和Marker
类型的全局变量。
我使用变量标记使变量标记值可以直接改变
private lateinit var map: GoogleMap
private lateinit var marker: Marker
我使用这个函数/方法在我的地图上添加标记:
private fun placeMarkerOnMap(location: LatLng)
val markerOptions = MarkerOptions().position(location)
val titleStr = getAddress(location)
markerOptions.title(titleStr)
marker = map.addMarker(markerOptions)
创建函数后,我将此代码放在onMapReady()
上以删除标记并创建一个新标记:
map.setOnMapClickListener location ->
map.clear()
marker.remove()
placeMarkerOnMap(location)
如果您想在单击标记时显示地址位置,请添加此代码以隐藏和显示标记地址,但您需要一种获取地址位置的方法。我从这篇文章中得到了代码:How to get complete address from latitude and longitude?
map.setOnMarkerClickListener marker ->
if (marker.isInfoWindowShown)
marker.hideInfoWindow()
else
marker.showInfoWindow()
true
【讨论】:
【参考方案6】:只是一个注释,我今晚浪费了几个小时追踪的东西......
如果您出于某种原因决定保留某个标记,则在您将其从地图中移除后... getTag 将返回 NULL,即使剩余的 get 值将返回您在标记时设置的值创建...
如果您删除了标记,然后尝试引用它,则将 TAG 值设置为 NULL。
对我来说似乎是一个错误......
【讨论】:
【参考方案7】:创建一个全局变量来跟踪标记
private Marker currentLocationMarker;
//删除旧标记
if (null != currentLocationMarker)
currentLocationMarker.remove();
// 添加更新的标记并移动相机
currentLocationMarker = mMap.addMarker(new MarkerOptions().position(
new LatLng(getLatitude(), getLongitude()))
.title("You are now Here").visible(true)
.icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front))
.snippet("Updated Location"));
currentLocationMarker.showInfoWindow();
【讨论】:
【参考方案8】:使用以下代码:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
@Override
public boolean onMarkerClick(Marker marker)
marker.remove();
return true;
);
点击“标记”后,即可将其移除。
【讨论】:
【参考方案9】:1.如果您想删除标记,您可以使用marker.remove();
或者,您也可以隐藏标记而不是将其删除为
marker.setVisible(false);
并在以后需要时使其可见。2. 但是,如果您想从地图上删除所有标记使用 map.clear();
注意: map.clear();
也将删除 Polylines, Circles
等。3. 如果您不想删除 Polylines, Circles
等,请使用循环到标记的长度(如果您有多个标记)删除那些 Check out the Example here 或 将它们设置为 Visible false 并且在这种情况下不要使用 map.clear();
。
【讨论】:
【参考方案10】:对于那些遵循GoogleMaps - MapWithMarker 项目示例的人,您可以通过这样做来删除标记p>
override fun onMapReady(googleMap: GoogleMap?)
googleMap?.apply
// Remove marker
clear()
val sydney = LatLng(-33.852, 151.211)
addMarker(
MarkerOptions()
.position(sydney)
.title("Marker in Sydney")
)
moveCamera(CameraUpdateFactory.newLatLng(sydney))
【讨论】:
【参考方案11】:在地图中添加所有标记创建数组。
稍后,使用:
Marker temp = markers.get(markers.size() - 1);
temp.remove();
【讨论】:
【参考方案12】:试试这个,它正在更新当前位置,它工作正常。
public void onLocationChanged(@NonNull Location location)
//here we update the location on the map
LatLng myActualLocation = new LatLng(location.getLatitude(), location.getLongitude());
if (markerName!=null) // marker name is declared as a gloval variable.
markerName.remove();
markerName = mMap.addMarker(new MarkerOptions().position(myActualLocation).title("Marker Miami").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
// mMap.addMarker(new MarkerOptions().position(myActualLocation).title("Marker Miami").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myActualLocation,18));
【讨论】:
以上是关于从 GoogleMap 中删除标记的主要内容,如果未能解决你的问题,请参考以下文章
GoogleMap,如何在单击 Market en Flutter 时删除图标
无法在不单击标记的情况下在 GoogleMap 中显示信息窗口 - GoogleMap Cluster Android