【问题标题】:How to move marker smoothly without blinking in map如何平滑移动标记而不在地图中闪烁
【发布时间】:2014-10-21 11:26:26
【问题描述】:

每次我向服务器请求获取我的设备的新位置并更新我的标记在地图上的位置时,我的标记都有问题,当我的车辆设备移动时,标记将跳转到新位置和它的闪烁。 我怎样才能避免这种情况不闪烁,或者我的标记可以顺利移动。

提前谢谢你。

var map;
var marker;
var markerarray =[];

setInterval(function(){

    $.ajax({
        type: "post",
        url: "vehiclecordinates.php",
        success: function(data){

            coordinates = data.latlng;
            vehiclename = data.vehiclename;

            for (var i = 0; i < coordinates.length; i++) {

                newcoordinate = new google.maps.LatLng(coordinates[i].split(",")[0],coordinates[i].split(",")[1]);
                marker =  new MarkerWithLabel({
                     map:map,
                     labelClass: "mylabels",
                     labelStyle: {opacity: 1.0},
                     labelContent: '<div>'+ vehiclename[i]+'</div>',
                     icon:{
                         //some options here
                     },
                });

                marker.setPosition(newcoordinate);
                markerarray.push(marker);
            }
        }
    });

    setTimeout(function () {
        removeMarkers();
        delete marker;
    }, 1000);
},5000);

function removeMarkers() {
    for(var i = 0; i < markerarray.length; i++) {
        markerarray[i].setMap(null);
    }
}

【问题讨论】:

  • 如果您不希望它们闪烁,请不要将它们从地图中“移除”,更新它们的位置。
  • 但如果我不删除标记,我的浏览器就会挂起。

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


【解决方案1】:

如果您不希望它们闪烁,请不要将它们从地图中“移除”,更新它们的位置。

var map;
var marker;
var markerarray =[];

setInterval(function(){
  $.ajax({
    type: "post",
    url: "vehiclecordinates.php",
    success: function(data){
      coordinates = data.latlng;
      vehiclename = data.vehiclename;
      for (var i = 0; i < coordinates.length; i++) {
        newcoordinate = new google.maps.LatLng(coordinates[i].split(",")[0],coordinates[i].split(",")[1]);
        if (markerarray[vehiclename[i]] && markerarray[vehiclename[i]].setPosition){
          markerarray[vehiclename[i]].setPosition(newcoordinate);
        else {
          marker =  new MarkerWithLabel({
            map:map,
            labelClass: "mylabels",
            labelStyle: {opacity: 1.0},
            labelContent: '<div>'+ vehiclename[i]+'</div>',
            icon:{
              //some options here
            }
          });
          marker.setPosition(newcoordinate);
          markerarray[vehiclename[i]] = marker;
        }
      }
    }
  });
},5000);

根据this similar question 中的示例查看example

【讨论】:

  • 我明白了,好的,我会试试这个解决方案,我会告诉你的。我会回来的。谢谢你的快速回复。
  • 请注意,此代码未经测试(您没有提供足够的信息来提供Minimal, Complete, Tested and Readable example),可能需要调试。
  • 好的,我会尝试,如果可以的话,我会尝试调试。顺便说一下,是否有可能让我的标记像这个例子econym.org.uk/gmap/example_cartrip.htm 那样移动,即使我有可以发送坐标的设备.?
  • 你可能需要选择你想要的。该示例具有整个路径,并沿着它以小增量移动标记。您有“真实”数据,我假设您想显示当前位置。如果您愿意,您可以编写代码以更快的速度将每个标记移动到其新位置的一小部分距离;但是如果你有很多标记,这将需要更多的处理能力。
猜你喜欢
  • 1970-01-01
  • 2015-05-30
  • 2020-05-21
  • 1970-01-01
  • 2018-07-03
  • 2022-08-03
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多