【问题标题】:Reference marker by ID按 ID 参考标记
【发布时间】:2012-07-15 09:16:10
【问题描述】:

我的地图上有一组标记,我正在尝试通过 ajax 调用更新它们的位置... ajax 调用工作正常,我可以遍历新值;但是我找不到引用标记的方法(例如通过 ID),因此我可以更新它们的 latLng。

基本上最后我需要.. 1.) 通过唯一 id 获取对标记的引用 2.) 可能循环遍历所有标记

提前谢谢 - 我是新手,需要一点帮助才能开始 - 希望我能在可能的时候传递善意:)

下面的 ajax 代码 - 关于修改标记位置的部分是我不知道该怎么做的部分 - 所以在下面的代码中我只是添加一个新标记,我真的需要更新位置

var json = $.getJSON("json/tracking.php",function(data){

        console.log("updated");

        $.each(data,function(key,value){
        //console.log(value.unit + " " + value.lat + " " + value.lng);

        new google.maps.Marker({
        map:map,
        position: new google.maps.LatLng(value.lat,value.lng),
        });


        });
    })
    .success(function(){
        //console.log("success");
        })
    .error(function(){
        //console.log("error");
        })
    .complete(function(){
        //console.log("complete");
    });
},2000);

【问题讨论】:

  • 显示你的代码,对我来说帮助的工作会更少:)
  • 编辑了我的帖子 - 也许这会解释它:) 提前感谢 -
  • 这些标记是如何创建的?它们是在您发布的getJSON 中创建的吗? JSON 是否包含每个标记的 ID?是的,您需要对每个标记进行单独引用,然后调用 markerRef.setPosition(new google.maps.LatLng(value.lat,value.lng)); 之类的东西。如果这还不够有用,请向我展示更多代码和部分 JSON。
  • 我在想我会遍历 - 检查标记是否存在 - 如果存在则更新位置 - 如果不存在则创建它。接下来将摆脱任何不在 json 中的标记。我只是不确定如何在您的示例中获取对标记 (markerRef) 的引用。我在想也许有类似 GetMarkerbyID(id) 之类的东西。

标签: google-maps-api-3


【解决方案1】:

我倾向于在创建对象时将它们存储在对象数组中,并将任何其他信息(例如 id)存储为对象的属性。所以在适当的范围内创建一个标记数组(可能在 json 回调的范围之外):

var markers = [];

var json = ...

  markers.push({
    id: //.. your unique id, or index
    obj: new google.maps.Marker(...
  });

【讨论】:

  • 我会试试看……如果没有办法只将地图映射到“findmarkerbyid”(或类似的东西),那看起来就像我必须走的路。
【解决方案2】:

试试这个方法:我假设你的 JSON 在标记的排序上是一致的。 newData 伪装成新的 JSON 数据,当点击地图时(标记外),获取“新数据”。

这是demo

function initialize() {
  map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);


  var data = [{unit:1, lat:0, lng:0},
              {unit:2, lat:10, lng:0},
              {unit:3, lat:20, lng:0}
             ];

  var newData = [{unit:1, lat:0, lng:10},
                 {unit:2, lat:10, lng:20},
                 {unit:3, lat:20, lng:30}
                ];


  var markers = {};

  $.each(data,function(key,value){
    //console.log(value.unit + " " + value.lat + " " + value.lng);

    markers[key] = markers[key] || new google.maps.Marker({ map: map });
    markers[key].setPosition(new google.maps.LatLng(value.lat,value.lng));
    markers[key].setTitle(value.unit.toString());
  });

  google.maps.event.addListener(map, 'click', function() {
    $.each(newData,function(key,value){
      //console.log(value.unit + " " + value.lat + " " + value.lng);

      markers[key] = markers[key] || new google.maps.Marker({ map: map });
      markers[key].setPosition(new google.maps.LatLng(value.lat,value.lng));
      markers[key].setTitle(value.unit.toString());
    });

  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2020-12-16
    • 2017-07-21
    相关资源
    最近更新 更多