【问题标题】:Clearing Markers from Google Direction Service从 Google 方向服务清除标记
【发布时间】:2013-03-22 07:41:09
【问题描述】:

我正在使用 Google Direction Service 检索路线的 lat+lng,然后将 latlon 传递给 php 文件并通过 xml 文件返回标记。

这一切都很好,除了我在请求新路线时无法清除旧标记。下面的代码显示了我如何使用 jQuery 从 xml 文件中获取标记。下面的代码显示了我试图用来清除路线(有效)和旧标记(无效!)的函数

非常感谢您的帮助。

//RETURN DATA FOR PLACE MARKERS
jQuery.get("MYXMLFILE", function(data) {
    jQuery(data).find("marker").each(function() {
        var eachMarker = jQuery(this);
        var markerCoords = new google.maps.LatLng(
            parseFloat(eachMarker.find("Lat").text()),
            parseFloat(eachMarker.find("Lng").text())
        );
        var header  = eachMarker.find("title").text();
        var content = eachMarker.find("Content").text();
        var wxicon  = eachMarker.find("icon").text();
        //---------------------------------------------
        var marker = new google.maps.Marker({
            position: markerCoords,
            map: map,
            icon: wxicon,
            animation: google.maps.Animation.DROP,
            title: header,
        });
        gmarkers.push(marker); // store the reference
    });
});

//CLEAR OLD ROUTE + CLEAR MARKERS

function deleteOverlays() {
    directionsDisplay.setDirections({routes: []});
    gmarker.setMap(null);
    gmarkers = [];
}

【问题讨论】:

    标签: javascript google-maps google-maps-markers


    【解决方案1】:
    var markersArray = [];
    

    每次创建标记时,将其添加到markerArray

    for (i = 0; i < locations.length; i++) {
    
       marker[i] = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][1], locations[i][2]),
                icon: icoImg,
                map: map,
                shadow: flagIcon_shadow,
                title: locations[i][0]
        });
        markersArray.push(marker[i]);
    }
    

    调用 deleteOverlays() 从地图中删除所有制造商之后。

        // Deletes all markers in the array by removing references to them
       function deleteOverlays() {
           if (markersArray) {
               for (i in markersArray) {
                  markersArray[i].setMap(null);
               }
               markersArray.length = 0;
            }
        }
    

    在你的情况下使用这个

    function deleteOverlays() {
       if (gmarkers) {
               for (i in gmarkers) {
                   gmarkers[i].setMap(null);
               }
           gmarkers.length = 0;
       }
    }
    

    【讨论】:

    • 您好,谢谢,您从哪里获得用于循环的 locations.length?
    • ^如果这是您问题的答案,请标记为答案:)
    • 一旦我得到它的工作,我会的! - 我添加了你的循环,但它没有显示任何内容!
    • 我认为我遇到的麻烦是将标记添加到 markerarray
    • gmarkers 必须是全局的,请在代码顶部定义为var gmarkers = [];
    猜你喜欢
    • 2020-08-15
    • 2013-05-06
    • 1970-01-01
    • 2012-07-15
    • 2017-12-16
    • 1970-01-01
    • 2012-11-17
    • 2014-01-15
    • 2015-02-13
    相关资源
    最近更新 更多