【问题标题】:how to add delay for distance request in google map api如何在谷歌地图api中为距离请求添加延迟
【发布时间】:2015-07-28 16:13:18
【问题描述】:

在获得这些距离后,我正在使用 google map api 来获取城市之间的距离,我想将它们存储在数组中。但是google api不允许立即请求。我怎样才能增加延迟。或者有没有其他方法可以获得行驶距离。 这是代码

<?php 
$origin="London";
$destination= array("Manchester","Bristol","glasgow","liverpool");
/* print_r($destination);
$size=sizeof($destination);
echo $size; */
$distance = array("abc");
for($i=0; $i<4;$i++){   
    $url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=$origin&destinations=$destination[i]&mode=driving&language=en&sensor=false";
    $data = file_get_contents($url);
    $data = utf8_decode($data);
    $obj = json_decode($data);

    //echo($obj->rows[0]->elements[0]->distance->text); //km
    //echo($obj->rows[0]->elements[0]->distance->value); // meters  
    array_push($distance,"$obj->rows[0]->elements[0]->distance->text");
}
print_r($distance);
?>

上面的代码可以在没有循环的情况下正常工作。

【问题讨论】:

    标签: php google-maps google-maps-api-3


    【解决方案1】:

    DirectionsMatrix 在单个请求中计算并返回多个结果。您可以发出一个请求来返回所有这四个结果:

    http://maps.googleapis.com/maps/api/distancematrix/json?origins=London&destinations=Manchester|Bristol|glasgow|liverpool&mode=driving&language=en&sensor=false

    结果:

    {
       "destination_addresses" : [
          "Manchester, UK",
          "Bristol, City of Bristol, UK",
          "Glasgow, Glasgow City, UK",
          "Liverpool, Merseyside, UK"
       ],
       "origin_addresses" : [ "London, UK" ],
       "rows" : [
          {
             "elements" : [
                {
                   "distance" : {
                      "text" : "336 km",
                      "value" : 335756
                   },
                   "duration" : {
                      "text" : "3 hours 48 mins",
                      "value" : 13655
                   },
                   "status" : "OK"
                },
                {
                   "distance" : {
                      "text" : "190 km",
                      "value" : 190196
                   },
                   "duration" : {
                      "text" : "2 hours 15 mins",
                      "value" : 8094
                   },
                   "status" : "OK"
                },
                {
                   "distance" : {
                      "text" : "663 km",
                      "value" : 662591
                   },
                   "duration" : {
                      "text" : "6 hours 34 mins",
                      "value" : 23621
                   },
                   "status" : "OK"
                },
                {
                   "distance" : {
                      "text" : "354 km",
                      "value" : 354422
                   },
                   "duration" : {
                      "text" : "3 hours 54 mins",
                      "value" : 14027
                   },
                   "status" : "OK"
                }
             ]
          }
       ],
       "status" : "OK"
    }
    

    【讨论】:

    • 我知道这种方法。但问题是在那之后我必须对所有距离进行排序并获得最短的距离。并重复相同的序列,直到我得到最后一个.. 例如 A->B A->C 例如最短的是 C A->D A->E 然后又一次但是这次起点会改变,最短的不会在目的地 C- >B C->D 例如最短的是 E C->E
    • 你这样做有什么问题?
    • 我只想创建一个路线图。我有超过 25 个目的地。和一个起源。我要做的是让最短的目的地到起点,然后到下一个目的地,然后是下一个最近的目的地。喜欢贪婪的方法。
    【解决方案2】:

    您需要使用算法中的代码来查找或选择一个点和一组点(多个节点)之间的最短路径,就像在这种情况下一样。您可以按照Dijkstra's algorithm 中描述的策略进行操作。您可以通过使用可比较的界面并比较可能的一组目的地来找出最短的目的地来做到这一点。当您使用外观选择最短的时,请执行相同的操作。

    这个SO post 可以帮助你理解我想说的话。

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2017-04-11
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多