使用Google Maps API v3重新加载地图上的点

Reload points on a Map in using the Google Maps API v3

本文关键字:加载 地图 Maps Google API v3 新加载 使用      更新时间:2023-09-26

我试图重新加载点在地图上基于当有人点击一个按钮。

我有一对json对象保存在内存中,"数据"answers"data2"。下面的代码获取"data2"JSON文件,并将其设置为与"data"JSON文件相等,然后触发映射重新加载事件。

   dataholder = data
    function myFunction() {
      data = dataholder
      window.data = data2;
      google.maps.event.trigger(map, 'resize');
    }

当前,映射不会用新数据集重新加载。但是,我没有得到任何错误消息。

没有地图重载事件。当来自窗口大小调整时,resize事件最多将重新计算地图边界并重新投影现有特征(标记,折线,多边形)。对于这种情况,我认为手动触发resize事件不会有任何影响。

其次,你说你有两个json文件,但你的代码建议你有两个json对象已经在内存中(这意味着你不需要执行额外的请求来检索data2的值)。答案的其余部分将假设。

如果您的原始标记集合来自"data",它是LatLng对的集合,并且您想要替换"data2"内容的标记,该过程将是:

1。-将标记推入对象中,您可以稍后在

上找到它们
var markers=[];
for(onemarker in data) {
    var newmarker=new google.maps.Marker({map: map, position: new google.maps.LatLng({onemarker.lat, onemarker.lng}) });
    markers.push(newmarker);
}

2。-当您想要替换标记时,首先清除标记数组

while(markers.length) {
     var oldmarker=markers.pop();
     oldmarker.setMap(null);
};

3。-用data2对象

中的数据填充标记数组
for(onemarker in data2) {
    var newmarker=new google.maps.Marker({map: map, position: new google.maps.LatLng({onemarker.lat, onemarker.lng}) });
    markers.push(newmarker);
}

对于这类标记,对于常规特征,对象和底层数据之间没有即时绑定。对于新的google.maps.Data()层,这略有不同,您可以跳过迭代,只向其提供一个geoJSON数组。您仍然需要一个对象来存储当前的标记,否则当您想要删除它们时,您将无法访问它们。