没有地图重新加载事件。调整大小事件,当它来自窗口调整大小时,最多会重新计算地图边界并重新投影现有特征(标记、折线、多边形)。特别是对于这种情况,我认为手动触发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 数组。您仍然需要有一个对象来存储当前标记,否则当您想要删除它们时,您将无法访问它们。