【问题标题】:Google Maps API drops markers individuallyGoogle Maps API 单独删除标记
【发布时间】:2014-08-04 02:02:52
【问题描述】:

从 XML 文件加载标记时,我试图单独删除标记(有延迟),但我似乎无法让它工作。我究竟做错了什么?

一次性删除它们是有效的。

这是我目前所拥有的:

var map = null;
  function initialize(){
    var mapOptions = {
      center: new google.maps.LatLng(41.899084, 12.486559),
      zoom: 2,
      mapTypeId: google.maps.MapTypeId.HYBRID,
      mapTypeControl: false,
      streetViewControl: false
    };

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    loadXMLFile();
  }

  function loadXMLFile(){
    var filename = 'concerts.xml';
    $.ajax({
      type: "GET",
      url: filename ,
      dataType: "xml",
      success: parseXML,
      error : onXMLLoadFailed
    });

    function onXMLLoadFailed(){
      alert("An Error has occurred.");
    }

    function parseXML(xml){
      var bounds = new google.maps.LatLngBounds();
      var counter = 0;
        $(xml).find("resultsPage results event").each(function(){
          //Read the latitude and longitude for each Marker
          var lat = $(this).find('venue').attr('lat');
          var lng = $(this).find('venue').attr('lng');
          if (lat == "") {
            var locLat = $(this).find('location').attr('lat');
            var locLng = $(this).find('location').attr('lng');

            var markerCoords = new google.maps.LatLng(parseFloat(locLat), parseFloat(locLng));
          }else{
            var markerCoords = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
          }
          bounds.extend(markerCoords);

          setTimeOut(function () {
            addMarker(markerCoords);
          }, counter * 200);

          //increment counter
          counter++;

        });
        map.fitBounds(bounds);
    }
  }

  function addMarker(markerCoords){
    var marker = new google.maps.Marker({
      map: map,
      position: markerCoords,
      animation: google.maps.Animation.DROP
    });
  }

  google.maps.event.addDomListener(window, 'load', initialize);

【问题讨论】:

  • setTimeOut -> setTimeout

标签: javascript xml google-maps google-maps-api-3 google-maps-markers


【解决方案1】:

您的问题是您在设置的超时时间内关闭了markerCoords,因此当函数运行时它会发生变化,并且会在同一位置添加多个标记。

setTimeout(function () {
        addMarker(markerCoords); // markerCoords will change before addMarker called!
}, counter * 200);

您的修复比较简单,只需传递markerCoords 的副本:

setTimeout(
    (function(c) { 
        return function() { 
            addMarker(c); 
        } 
    }(markerCoords)), counter++);

【讨论】:

  • 我在哪里使用代码的最后一部分?我用它来代替我原来的零件吗?
  • @user2814540 - 是的,抱歉回复晚了!
猜你喜欢
  • 2012-07-20
  • 2012-05-24
  • 2013-05-02
  • 1970-01-01
  • 2011-12-19
  • 2011-10-07
  • 2015-07-16
  • 1970-01-01
  • 2014-07-15
相关资源
最近更新 更多