Javascript 当平移带有大量标记和多段线的地图时,如何限制google maps api延迟?
我的问题:Javascript 当平移带有大量标记和多段线的地图时,如何限制google maps api延迟?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我的问题: 当地图上显示了大量标记和多段线时,如何让谷歌地图停止移动? 我正在就我开发的一个应用程序征求意见 只有在Firefox中,当使用鼠标向上、向下、向左或向右移动地图时,才会出现此问题 该应用程序在地图上显示了大约1000段多段线,以及大约700个标记 所有数据都位于7 KML文件中 所有多段线都是从A到B方向的线段,因此它们有很多点。 所以我认为大部分问题是由多段线的大小和数量引起的 类似线程: - - - 多谢各位 其他人已针对类似问题提出了一个问题,因此我认为在这种情况下,我并不孤
当地图上显示了大量标记和多段线时,如何让谷歌地图停止移动? 我正在就我开发的一个应用程序征求意见 只有在Firefox中,当使用鼠标向上、向下、向左或向右移动地图时,才会出现此问题 该应用程序在地图上显示了大约1000段多段线,以及大约700个标记 所有数据都位于7 KML文件中 所有多段线都是从A到B方向的线段,因此它们有很多点。 所以我认为大部分问题是由多段线的大小和数量引起的 类似线程:
-
-
- 多谢各位 其他人已针对类似问题提出了一个问题,因此我认为在这种情况下,我并不孤单。
我尝试了一种改进移动的解决方案,但没有完全解决问题。
var last={time:new Date(),//上次让事件通过的时间。
x:-100,//传递事件的最后一个x位置。
y:-100};//通过的事件的最后y位置。
var期间=100;//ms-不要让每100毫秒通过一个以上的事件。
变量空间=40;//px-如果最后一个和
//当前位置大于2像素。
函数init_map(){
map\u div=document.getElementById(“map”)
//地图
变量映射_选项={
中心:新google.maps.LatLng(45.836454,23.372497),
缩放:8
};
map=new google.maps.map(document.getElementById(“map”),map\u选项);
//注册将限制事件的事件处理程序。
//“true”意味着我们捕获事件,从而获得事件
//在谷歌地图得到它之前如果我们取消活动,
//谷歌地图永远不会收到它。
map_div.addEventListener(“mousemove”,throttle_事件,true);
};
功能节流阀事件(事件){
var now=新日期();
var distance=Math.sqrt(Math.pow(event.clientX-last.x,2)+Math.pow(event.clientY-last.y,2));
var time=now.getTime()-last.time.getTime();
如果(距离*时间<空间*周期){//事件来得太早或鼠标移动太少或两者兼而有之
console.log(“事件停止”);
if(event.stopPropagation){//W3C/addEventListener()
event.stopPropagation();
}否则{//e。
event.cancelBubble=true;
};
}否则{
log(“允许的事件:+now.getTime());
last.time=现在;
last.x=event.clientX;
last.y=event.clientY;
};
};
这段代码是功能性的,但正如我前面所说的,它不能完全解决问题
其他解决办法将受到欢迎
[编辑2014-03-14]
这终于是我找到的最好的解决方案,我在生产中对它进行了测试,它最终运行得非常好。我可以知道为什么要投否决票吗?不清楚,或没有用?你可以使用标记簇,但从你的问题中看不清楚。我看不出你的问题与KML的关系。当我用鼠标移动地图时,它一点也不平滑。我希望它能顺利运行。
var last = {time : new Date(), // last time we let an event pass.
x : -100, // last x position af the event that passed.
y : -100}; // last y position af the event that passed.
var period = 100; // ms - don't let pass more than one event every 100ms.
var space = 40; // px - let event pass if distance between the last and
// current position is greater than 2 px.
function init_map() {
map_div = document.getElementById("map")
// map
var map_options = {
center: new google.maps.LatLng(45.836454, 23.372497),
zoom: 8
};
map = new google.maps.Map(document.getElementById("map"), map_options);
// register event handler that will throttle the events.
// "true" means we capture the event and so we get the event
// before Google Maps gets it. So if we cancel the event,
// Google Maps will never receive it.
map_div.addEventListener("mousemove", throttle_events, true);
};
function throttle_events(event) {
var now = new Date();
var distance = Math.sqrt(Math.pow(event.clientX - last.x, 2) + Math.pow(event.clientY - last.y, 2));
var time = now.getTime() - last.time.getTime();
if (distance * time < space * period) { //event arrived too soon or mouse moved too little or both
console.log("event stopped");
if (event.stopPropagation) { // W3C/addEventListener()
event.stopPropagation();
} else { // Older IE.
event.cancelBubble = true;
};
} else {
console.log("event allowed: " + now.getTime());
last.time = now;
last.x = event.clientX;
last.y = event.clientY;
};
};