【问题标题】:Google Maps Marker Can't Be Removed谷歌地图标记无法删除
【发布时间】:2014-06-16 22:17:42
【问题描述】:

我在 Google 地图网络应用程序中的标记有问题。我可以添加标记,但不能删除它们。我一直在寻找几天的解决方案,但 v3 的标准建议似乎是:

marker.setMap(null);

问题是这在我的代码中似乎完全无效。这是在启动时运行的函数示例。它以低精度快速获取当前位置。稍后需要更长时间才能完成的功能应移除标记并将新标记放置在更准确的位置。问题是,一旦放置,我就无法移除标记。

function geoLocCheckAndFastLatLng(){


    if (navigator.geolocation) {

    navigator.geolocation.getCurrentPosition(function(position) {

               //get current position
                pos = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);

                //place low accuracy marker

                placeMarker(pos,window.meIconMediumAccuracy,window.myPositionMarker);

                //and center map

                 window.map.setCenter(pos);

                 window.map.setZoom(14);

                 window.myPositionMarker.setMap(null);

                 });

    }else{

        alert("Sorry - You're Browser Doesn't Support Geolocation.\nChange To Google-Chrome Or Dolphin To Use This App");
    }

}

所以理论上上述函数获取位置,放置一个标记,然后删除相同的标记。但是标记仍然存在!有人可以帮忙吗?我只有几天的时间来完成,我不明白我哪里出错了。

这里是地点标记功能:

function placeMarker(location, iconType, marker) {

    //alert(window.markers.length);

    //if the marker is undefined it means it needs to be created form scratch
    //using the iconType and location provided in the function call
    if(marker === undefined){

    marker = new google.maps.Marker(

       {
           position: location,
           map: window.map,
           icon: iconType,
       });

    //and add a click listener
    google.maps.event.addListener(marker, 'click', function()
      {

        alert("Marker location:\n" + pos);

      });

    //add to markers array
    window.markers.push(marker);


    }else{

        marker.setPosition(location);

    }

}

【问题讨论】:

  • placeMarker 函数长什么样子?
  • 你觉得这个window.myPositionMarker.setMap(null);引用了什么?在我看来它应该是 window.markers[i].setMap(null); 其中“i”是您要隐藏的特定标记的索引(对于您的原始示例,这将是 window.markers.length-1,添加的最后一个标记)
  • 谢谢你——你说得对。虽然我真的不明白为什么当我将它称为 window.markers[0] 时我不能将标记引用为 window.myPositionMarker (它已被声明为全局),但它已按预期删除。感谢您的帮助:)

标签: javascript jquery-mobile google-maps-api-3 google-maps-markers


【解决方案1】:

我认为您的问题的根本原因是您实际上并没有通过 .setMap(null) 调用解决您认为的对象。

尝试从 placeMarker() 返回您的标记,然后将其分配给一个 var 并在其上调用 setMap(null)。

如果您在初始化 google.maps.marker() 后声明 window.myPositionMarker = marker,它将按预期工作。

【讨论】:

  • 谢谢你——你说得对。虽然我真的不明白为什么当我将它称为 window.markers[0] 时我不能将标记引用为 window.myPositionMarker (它已被声明为全局),但它已按预期删除。感谢您的帮助:)
【解决方案2】:

似乎您的答案已经解决,但对于其他在此问题上苦苦挣扎的人,请提前警告 -

设置自定义属性后,我的标记不会被删除。

例如

// can create a marker and add it to map OK
marker = new new google.maps.Marker({...})
marker.setMap(map)

// But don't set a custom property on the marker
marker.foo = "bar"
marker.setMap(null) // wont remove the marker

【讨论】:

    【解决方案3】:

    创建新标记时,无法通过其全局名称 myPositionMarker 对其进行引用。然而,在创建标记的过程中,它被放置在一个数组中。如果我将标记称为

    window.markers[0].setMap(null);
    

    它已按预期从地图中删除。非常感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 2012-10-17
      • 2021-08-05
      • 2018-10-13
      • 1970-01-01
      • 2017-02-10
      • 2014-05-01
      相关资源
      最近更新 更多