Javascript 谷歌地图删除标记的效率太高

Javascript 谷歌地图删除标记的效率太高,javascript,html,google-maps-api-3,Javascript,Html,Google Maps Api 3,我正试图通过refreshDiv()函数实时更新标记,并且我已经设法通过addMarker()和clearMarkers()了解了如何添加标记并删除所有标记。但是当调用clearMarkers()时,它会将它们全部清除 是否有办法设置标记的位置,然后将其移动到下一个位置 进一步解释 我正在做一个项目,需要显示每个标记的位置,为此我需要更新标记的位置,当更新之前留下的标记位置时,我使用clearMarkers(),但这会删除所有标记。我需要它删除以前的标记,但保留最近的标记 <!DOCTYP

我正试图通过refreshDiv()函数实时更新标记,并且我已经设法通过addMarker()clearMarkers()了解了如何添加标记并删除所有标记。但是当调用clearMarkers()时,它会将它们全部清除

是否有办法设置标记的位置,然后将其移动到下一个位置

进一步解释

我正在做一个项目,需要显示每个标记的位置,为此我需要更新标记的位置,当更新之前留下的标记位置时,我使用clearMarkers(),但这会删除所有标记。我需要它删除以前的标记,但保留最近的标记

<!DOCTYPE html>
    <html>
      <head>
      <title>Remove Markers</title>
        <style>

          #map {
            height: 100%;
          }

          html, body {
            height: 100%;
            margin: 0;
            padding: 0;
          }
        </style>


    </head>
    <body onload='refreshDiv()'>

    <div id="map"></div>

    <p>Click on the map to add markers.</p>
    <script>


      var map;
      var markers = [];

    **//this is were the problem lies**

        function refreshDiv()
        {
         addMarker(37.769,-122.446);
         var refresher = setTimeout('refreshDiv()', 3000);
         clearMarkers();
        }

      function initMap() {
        var haightAshbury = {lat: 37.769, lng: -122.446};

        map = new google.maps.Map(document.getElementById('map'), {
          zoom: 12,
          center: haightAshbury,
          mapTypeId: 'terrain'
        });

        // This event listener will call addMarker() when the map is clicked.


        // Adds a marker at the center of the map.
        addMarker(haightAshbury);
      }

       // Adds a marker to the map and push to the array.
      function addMarker(location) {
        var marker = new google.maps.Marker({
          position: location,
          map: map
        });
        markers.push(marker);
      }

      // Sets the map on all markers in the array.
      function setMapOnAll(map) {
        for (var i = 0; i < markers.length; i++) {
          markers[i].setMap(map);
        }
      }

      // Removes the markers from the map, but keeps them in the array.
      function clearMarkers() {
        setMapOnAll(null);
      }

      // Shows any markers currently in the array.
      function showMarkers() {
        setMapOnAll(map);
      }

      // Deletes all markers in the array by removing references to them.
      function deleteMarkers() {
        clearMarkers();
        markers = [];
      }

    </script>
      <script async defer
        src='https://maps.googleapis.com/maps/api/js?key=AIzaSyBVQaENEYHY2g-mRhD6_tj1cSK8DhQoqHI&callback=initMap'>
        </script>
    </body>
    </html>

删除标记
#地图{
身高:100%;
}
html,正文{
身高:100%;
保证金:0;
填充:0;
}
单击地图以添加标记

var映射; var标记=[]; **//这就是问题所在** 函数refreshDiv() { addMarker(37.769,-122.446); var refresher=setTimeout('refreshDiv()',3000); clearMarkers(); } 函数initMap(){ var haightAshbury={lat:37.769,液化天然气:-122.446}; map=new google.maps.map(document.getElementById('map'){ 缩放:12, 中心:haightAshbury, mapTypeId:'地形' }); //单击映射时,此事件侦听器将调用addMarker()。 //在地图的中心添加标记。 addMarker(haightAshbury); } //将标记添加到地图并推送到阵列。 功能添加标记(位置){ var marker=new google.maps.marker({ 位置:位置,, 地图:地图 }); 标记器。推(标记器); } //在阵列中的所有标记上设置贴图。 函数setMapOnAll(映射){ 对于(var i=0;i
我有点困惑,但据我所知,您需要先清除标记,然后添加新标记

    function refreshDiv()
    {
     clearMarkers();
     addMarker(new google.maps.LatLng(37.769, -122.446));
     setMapOnAll(map)
     var refresher = setTimeout('refreshDiv()', 3000);

    }

您的代码在设置最终位置后清除了标记,因此您无法看到最终标记。将
clearMarkers()
作为
refreshDiv
中的第一个调用移动,可以解决此问题。请查看下面的代码:


删除标记
#地图{
身高:100%;
}
html,正文{
身高:100%;
保证金:0;
填充:0;
}
单击地图以添加标记

var映射; var标记=[]; //这就是问题所在** 函数refreshDiv() { clearMarkers(); var position=new google.maps.LatLng(37.769,-122.446); 添加标记(位置); var refresher=setTimeout('refreshDiv()',3000); } 函数initMap(){ //var haightAshbury={lat:37.769,液化天然气:-122.446}; var haightAshbury=newgoogle.maps.LatLng(37.769,-122.446); map=new google.maps.map(document.getElementById('map'){ 缩放:12, 中心:haightAshbury, mapTypeId:'地形' }); //单击映射时,此事件侦听器将调用addMarker()。 //在地图的中心添加标记。 addMarker(haightAshbury); } //将标记添加到地图并推送到阵列。 功能添加标记(位置){ var marker=new google.maps.marker({ 位置:位置,, 地图:地图 }); 标记器。推(标记器); } //在阵列中的所有标记上设置贴图。 函数setMapOnAll(映射){ 对于(var i=0;i
被你的问题弄糊涂了。您想通过单击清除所有标记,但紧接着设置另一个位置?你能提供一个例子吗?我在一个项目上工作,需要显示每个标记的位置,要做到这一点,我需要更新标记的位置,当更新之前留下的标记的位置时,我使用clearMarkers(),但这会删除所有标记。问题在于
setmaponal()
函数。清除标记后,所有内容都将变为
NULL
,您需要通过ID跟踪最新位置,并使用IF语句在
setmaponal()
中检查该ID。理论上,这将解决问题。我会查一查的。谢谢@Cosmonot这让我发疯了。任何帮助都将不胜感激。有用吗?你应该接受下面的两个答案,这样将来它可以帮助其他人。将你的代码与我的代码进行比较,你的代码最后调用了
clearMarkers()
,因此它显然会删除所有