繁体   English   中英

Google Maps API分别删除标记

[英]Google Maps API drops markers individually

从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);

您的问题是您要在设置的超时时间内关闭markerCoords ,因此到函数运行时,它已经更改,它将在同一位置添加多个标记。

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

您的修复相对简单,只需传递markerCoords的副本markerCoords

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM