Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当平移带有大量标记和多段线的地图时,如何限制google maps api延迟?_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

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;
    };
};