拉伸和长期更改时添加标记并更新标记

时间:2016-03-05 15:59:51

标签: javascript google-maps firebase marker

这部分代码使用firebase,它从数据库中检索一个uniquie id,以及它的lat和long。如果uuid是myuuid,它会从函数中退出。但如果没有,它会进入下一个函数addpoint。

    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,这样如果该标记改变位置,那么标记就会移动。解决这个问题的最佳方法是什么?我正在使用谷歌地图和firebase。

1 个答案:

答案 0 :(得分:0)

一种选择是将标记保存在数组中,遍历该数组,查找具有该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);
}