只允许用户在谷歌地图上放置 1 个标记
Posted
技术标签:
【中文标题】只允许用户在谷歌地图上放置 1 个标记【英文标题】:Allowing user to place 1 marker on google map only 【发布时间】:2021-01-23 04:25:49 【问题描述】:我一直在限制用户可以在 Google 地图的地图上点按的标记数量
问题:每当用户点击谷歌地图时,标记会不断创建新的标记,而旧的标记不会清除。
更新:我认为它不属于 else if 语句。因为每次调用该函数时,它都会重新启动该过程。从而允许不断创建标记。
override fun onMapClick(point: LatLng)
val tappedLocation = LatLng(latitude,longitude)
var mapMarkerCount: Int =0
if(mapMarkerCount == 0)
map.addMarker(
MarkerOptions()
.position(tappedLocation)
.title("You have Clicked")
)
mapMarkerCount++
//check Marker Count
else if(mapMarkerCount == 1)
map.clear()
mapMarkerCount--
我尝试分配一个变量来检查标记是否已创建。 如果标记存在,则在下次点击地图时,它应该清除地图,并且新标记位于用户点击的新位置。
【问题讨论】:
【参考方案1】:我提前为我糟糕的英语道歉
我认为你的问题来自你的变量声明。
您应该尝试:
删除 mapMarkerCount=0
并将其设为布尔值
我认为每次添加标记时程序都会执行mapMarkerCount=0
,所以我认为它解释了为什么你不能删除旧标记
if (markerExist == false)
addOne();
markerExist=true;
elsif (markerExist == true)
map.clear();
add one();
使用此代码, 第一次你只会添加一个新的标记。 然后每次触摸屏幕时清除旧标记并放置新标记
【讨论】:
【参考方案2】:自从
override fun onMapClick(point: LatLng)
,
意思是每当函数被调用时,它总是会逐行执行fun onMapClick
。
您可以做的是,您可以在放置maps.addMarker()
之前使用map.clear()
,因此每当调用该函数时,它会在添加之前先清除地图。
override fun onMapClick(point: LatLng)
map.clear() //above the adding of marker
val tappedLocation = LatLng(latitude,longitude)
map.addMarker(
MarkerOptions()
.position(tappedLocation)
.title("You have Clicked")
)
基本上你不需要做一个标记来检查。如果您想保留多个标记或其他东西,则不建议这样做,因为它会清除谷歌地图上的任何东西。到用户第一次看到时的默认地图。
【讨论】:
请注意,您还可以使用保存的标记并调用.position
来更新标记的位置。
嗨@Andy,你会在哪一行拨打.position
?我试过你提到的那种方法,但它一直给我多个标记。我相信您的方法可能是更好的方法。
在这段代码中——去掉清除,将一个类变量设置为addMarker
的结果(当类变量== null);在 else (class variable != null) 中使用 class variable 并调用 .position(tappedLocation)。【参考方案3】:
您的代码在每次点击地图时分配mapMarkerCount = 0
,即使地图上可能已经有一个标记。正因为如此,它总是会落入 if 语句块中,因为单击地图时 mapMarkerCount 永远不会等于 1。在 onCreate 一开始就做这个分配会是一个更好的选择。
或者正如这里有人建议的那样,考虑到您只希望在地图上有一个标记,布尔变量应该适合您的目的。一种实现:
var mapMarkerExists: Boolean = false
override fun onMapClick(point: LatLng)
val tappedLocation = LatLng(latitude,longitude)
if(mapMarkerExists)
map.clear()
map.addMarker(
MarkerOptions()
.position(tappedLocation)
.title("You have Clicked"))
//check Marker Count
else
map.addMarker(
MarkerOptions()
.position(tappedLocation)
.title("You have Clicked"))
mapMarkerExists = true
【讨论】:
以上是关于只允许用户在谷歌地图上放置 1 个标记的主要内容,如果未能解决你的问题,请参考以下文章