添加标记并在纬度和经度变化时更新标记

adding a markers and updating the marker when lat and long change

本文关键字:变化 更新 经度 加标记 纬度 添加      更新时间:2023-09-26

这部分代码使用firebase,它从数据库中检索一个uniquie id,以及它的纬度和经度。 如果 UUID 是 myuuid,它将退出函数。 但如果不是,它会进入下一个函数添加点。

    myFirebaseRef.on('child_changed', function(childSnapshot, prevChildKey) {
          // code to handle child data changes.
          var uuid = childSnapshot.key();
          var data = childSnapshot.val();
          var username = (data.username);
          var lat = (data.coords.latitude);
          var lon = (data.coords.longitude);
          if (uuid === myUuid) return

          addPoint(uuid, username, data);
        });

我的函数添加点抓取uuid和纬度和经度并将其绘制在谷歌地图上,我唯一的问题是它不会移动它只是保留的标记添加一个标记。

    //add point
    function addPoint(uuid, username, data)
    {
    //  alert(username + data.coords.latitude + data.coords.longitude);
        var position = new google.maps.LatLng(data.coords.latitude,data.coords.longitude);
        var marker = new google.maps.Marker({
        position: position,
        });
      marker.setMap(map);
    }

我希望能够在地图上绘制标记并为标记提供唯一 ID,以便如果该标记更改位置,该标记就会移动。解决这个问题的最佳方法是什么。我正在使用谷歌地图和火力基地。

一种选择是将标记保留在数组中,遍历该数组以查找具有该uuid的现有标记,如果存在,请移动它,否则,创建一个新标记。

var gmarkers = [];
//add point
function addPoint(uuid, username, data)
{
  var i;
  var position = new google.maps.LatLng(data.coords.latitude,data.coords.longitude);
  // check for already existing marker
  for (i=0; i<gmarkers.length; i++) {
    if (gmarkers[i].uuid == uuid) { // existing marker, move it
       gmarkers[i].setPosition(position);
       return;
    }
  }
  // no existing marker, create a new one
  var marker = new google.maps.Marker({
    position: position
  });
  marker.setMap(map);
  gmarkers.push(marker);
}