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
Javascript 多个方向的请求在多次呼叫后需要更多的时间_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 多个方向的请求在多次呼叫后需要更多的时间

Javascript 多个方向的请求在多次呼叫后需要更多的时间,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,假设您有一个地图可以在上面显示Kmlayer对象,每个Kmlayer对象都有一个切换复选框,位于面板中 var Province = new google.maps.LatLng(47.112754, -70.815223); var map = new google.maps.Map( document.getElementById('map'), {zoom:7,center:Province} ); 并且在KML文件中存储有限数量的路线,以优化地图的速度 Direction的请求是使用

假设您有一个地图可以在上面显示Kmlayer对象,每个Kmlayer对象都有一个切换复选框,位于面板中

var Province = new google.maps.LatLng(47.112754, -70.815223);
var map = new google.maps.Map( document.getElementById('map'), {zoom:7,center:Province} ); 
并且在KML文件中存储有限数量的路线,以优化地图的速度

Direction的请求是使用Google Maps API v3提出的

假设你有一个隐藏div中包含谷歌地图的页面,你通过这个API发出方向请求。 阵列“航路点”保存所需每条多段线的每个起点和终点的坐标

var geo_coords = ''; // holds the results
var y; // counter
var delay_per_request = 1000; // default delay in milliseconds between requests
var current_delay = delay_per_request; // current delay between requests

function calcRoute(start,end) {
   setTimeout(function(){
      var directionsService = new google.maps.DirectionsService();
      var request = {
         origin: start,
         destination: end,
         travelMode: google.maps.TravelMode.DRIVING
      };

      directionsService.route(request, function(response, status) {
         // Error?
         if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {

            document.getElementById('error_text').innerHTML += "<br>" + start + "/" + end
               + "("+status+") :: Interval:"+current_delay+"ms";
            window.scrollTo(0, document.body.scrollHeight);

            if (current_delay < 2600) {
               current_delay += 200;   
            }
            if (current_delay >= 1600) {
               delay_per_request = 1600;
            }

            retry++;

            if (retry < 20) {
               calcRoute(start,end);
            } else {
               document.getElementById('error_text').innerHTML += "<br>The script stopped running after "+retry+" retries"
                  + " sur " + start + "/" + end + "("+status+") :: Interval:"+current_delay+"ms";
            }

         // Positive result?
         } else if (status == google.maps.DirectionsStatus.OK) {
            var myRoute = response.routes[0].overview_path;

            for (i in myRoute) {
               if (myRoute[i] != undefined) {
                  geo_coords += myRoute[i].lat() + "," + myRoute[i].lng() + "_";
               }
            }   

            geo_coords += "!";
            document.getElementById('error_text').innerHTML += "<br><font color=\"green\">" + start + "/" + end
               + "("+status+") :: Interval:"+current_delay+"ms</font>"; 
            window.scrollTo(0, document.body.scrollHeight);

            current_delay = delay_per_request;
            retry = 0;

            Next(); 
         }
      }); 
   },current_delay);
}

function Next() {
   if (y <= waypoints.length) {
      destination = "from:" + waypoints[y] + " to:" + waypoints[y + 1];
      geo_desc += description[y] + " => " + description[y+1] + "|";
      calcRoute(waypoints[y],waypoints[y+1]);
      y = y +2;
   } else {
      document.getElementById("information").setAttribute('value',geo_coords);   
      document.getElementById("show_debug_text").setAttribute('value',geo_desc); 
      document.getElementById("error").setAttribute('value',document.getElementById('error_text').innerHTML);
      document.forms["kml"].submit();
   }
}  

Next();
var geo_coords=''保存结果
变量y;//柜台
每个请求的var延迟=1000;//请求之间的默认延迟(毫秒)
var current_delay=每个请求的延迟;//请求之间的当前延迟
函数计算(开始、结束){
setTimeout(函数(){
var directionsService=new google.maps.directionsService();
var请求={
来源:start,
目的地:完,
travelMode:google.maps.travelMode.DRIVING
};
路由(请求、功能(响应、状态){
//错误?
if(status==google.maps.GeocoderStatus.OVER\u QUERY\u LIMIT){
document.getElementById('error_text')。innerHTML+=“
”+start+“/”+end +(“+状态+”):间隔:“+当前延迟+”毫秒”; scrollTo(0,document.body.scrollHeight); 如果(当前_延迟<2600){ 电流_延迟+=200; } 如果(当前延迟>=1600){ 每个请求的延迟=1600; } 重试++; 如果(重试<20次){ calcRoute(开始、结束); }否则{ document.getElementById('error_text')。innerHTML+=“
脚本在“+重试+”重试后停止运行” +“sur”+开始+“/”+结束+”(“+状态+”)::间隔:“+当前延迟+”毫秒”; } //积极的结果? }else if(status==google.maps.directionstatus.OK){ var myRoute=response.routes[0]。概述\u路径; 对于(我在我的路线中){ if(myRoute[i]!=未定义){ 地理坐标+=myRoute[i].lat()+,“+myRoute[i].lng()+”; } } 地理坐标+=“!”; document.getElementById('error_text')。innerHTML+=“
”+start+“/”+end +(“+状态+”):间隔:“+当前延迟+”毫秒”; scrollTo(0,document.body.scrollHeight); 当前延迟=每个请求的延迟; 重试=0; Next(); } }); }电流延迟); } 函数Next(){
如果(是的,我认为你最好在GIS溢出网站上问这个问题。不管怎样,我不久前读到,谷歌会根据请求数量限制向地图服务器发出的请求数量,我认为如果请求数量达到某一点,你必须付费,但通常是上万次。谢谢你的快速回复nse。我会尝试一下,但我也会把问题保留在这里。地理编码器受到配额和速率限制的约束,以防止滥用。实际速率限制可能会随着服务器负载的变化而变化。Direction API webservice的速率限制是否与此相同?我的意思是,服务器是否在每次请求后越来越降低优先级?配额和速率限制两种服务的费率限制都是一样的。我不知道你所说的“服务器是否在每次请求后越来越降低优先级?”是什么意思。我不认为“优先级”与此有关。如果你做一些研究,一般的印象是(像地理编码器)您可以快速执行一些请求,然后在此之后服务将被限制在“配额/24小时”的速率之下,但是实现的详细信息不会发布,可能会定期更改,并且可能取决于服务器负载。