我正在根据地图的当前边界框(或视口)将JSON数据添加到Google地图。问题是,即使是最轻微的平移或缩放也会重绘该数据。如何在加载数据后才能这样做,它不需要重绘(或重新加载)?
这是我正在使用的事件:
google.maps.event.addListener(map, 'idle', function () {
if (map.getZoom() > 12) {
bBox = getBB(); // get current bounding box
$.ajax({
url: '/getdata',
type: 'POST',
data: JSON.stringify(bBox),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (ai) {
addToMap(ai);
}
});
} else {
map.data.forEach(function(feature) {
map.data.remove(feature);
});
}
});
答案 0 :(得分:0)
我认为双重解决方案可行:修改选择要加载到地图的数据的方法,然后在地图处于非活动状态的短暂时间后加载数据。
可能会在被触发的idle
事件和重新加载数据的地图之间添加延迟。这可以通过全局setTimeout
来完成,每当地图空闲时都会更新。{/ p>
var loadDelay = setTimeout(function(){},0);
google.maps.event.addListener(map, 'idle', function(){
clearTimeout(loadDelay);
loadDelay = setTimeout(function(args){old_function(args)}, delayTime); //choose time between idle and load
});
此外,您可以将数据块化为方形区域,并检查地图边界内的哪些区域已经加载,然后不要将这些区域加入到地图中。
修改强>
跟踪数据将分为两步。首先是更改单个查询的边界。其次是保持一系列已经加载的大小均匀的区域。类似的东西:
var loaded = [];
function load(bounds){
var north = bounds.getNorthEast().lat();
var south = bounds.getSouthWest().lat();
var east = bounds.getNorthEast().lng();
var west = bounds.getSouthWest().lng();
for(var lat=parseFloat(south.toFixed(1)); lat<north; lat += 0.1){ //or some other interval
for(var lng=parseFloat(west.toFixed(1)); lng<east; lng += 0.1){
if(!(south+','+west in loaded)){
import(south, west); //function to get and display information
loaded.push(south+','+west);
}
}
}
}
这样的系统应该加载尚未加载的部分数据。