只允许用户在谷歌地图上放置 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 个标记的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌地图上放置图标标记,图标数量是不是有配额?

允许用户在谷歌地图上创建和编辑标记的活动

允许用户在谷歌地图中向后移动标记位置并关闭窗口

按钮单击dialogFragment后如何在谷歌地图上添加标记?

用户如何在谷歌地图颤振上添加多个标记

谷歌地图上的自定义标记如下图