无法从Google Direction Service api获得优化路线

时间:2013-08-06 12:25:28

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

我试图通过提供航点,使用谷歌方向api找到优化路线。下面是我使用过的航路点 statring point:LHR 第一个航点:豪恩斯洛 第二航点:哈灵顿

当我尝试使用以下http://findthebestroute.com/RouteFinder.html找到优化曲目时,响应是明显的答案并且正确。enter image description here

但是现在我想在我自己的应用程序中使用google提供的directionservice api执行相同的操作。我已按以下方式准备了上述请求

Request Url: http://maps.googleapis.com/maps/api/directions/json
Request Method: GET
Status Code: 200
Params: {
    "origin": "LHR",
    "mode": "driving",
    "sensor": "false",
    "departure_time": "1375789483",
    "units": "metric",
    "waypoints": "optimize:true|hounslowl|harlington"
}

我得到的错误回答如下,这表明我对豪恩斯洛和哈灵顿的LHR。我不知道我提出的要求有什么问题。任何帮助都非常明显。 enter image description here

5 个答案:

答案 0 :(得分:4)

很抱歉回答我自己的问题。但由于我对上述情况有很大的疑问,我希望其他情况也会发生。这适用于那些遇到同样问题并浪费时间寻找所需答案的人。

我正在寻找这个问题的答案差不多2天。最后发现没有直接的一步法计算结果并按排序顺序得到路径点。但是有办法向谷歌发送多个优化路线请求。

在我解释这个简单的逻辑之前,让我们首先找出你需要设置的必需参数

  1. Origin - 从您想要开始路线的地方
  2. 目的地 - 路线的最后一点
  3. 航路点=原点和目的地之间的点,优化设置为真
  4. 现在首先需要设置原点并找到最佳的最终目的地以获得优化的轨道。

    例如。如果你有多个航路点说A,B,C,D。确实,在找到优化航迹后,这个订单可能不会保持不变。所以首先我们需要决定从我们想要开始路线的位置让我们假设B,然后我们需要计算三个优化的轨道,假设提醒其中一个点是最终目的地。含义

    1. 原点:B目的地:航路点:C,D =>结果[d1 km,t1 minute]
    2. 原点:B目的地:C路点:A,D =>结果[d2 km,t2 minute]
    3. 原点:B目的地:D航路点:C,A =>结果[d3 km,t3 minute]
    4. 看到结果,我们有三个可能的轨道,具有不同的距离值和时间。 现在,您只需根据时间优化或距离优化选择优化的轨道。

答案 1 :(得分:3)

使用optimize:true允许路线服务通过以更有效的顺序重新排列路标来优化提供的路线。 Documentation

修改

查看您的代码,您不提供目的地 我尝试过(添加twickenham作为航点)

http://maps.googleapis.com/maps/api/directions/json?origin=LHR,uk&destination=hounslow,uk&waypoints=optimize:true|twickenham,uk|harlington,uk&sensor=false

这提供了所需的优化路线。

要使用optimize:true,您需要原点,目的地和至少2个航路点。

答案 2 :(得分:1)

官方文件可在以下网址找到: https://developers.google.com/maps/documentation/javascript/directions#DirectionsRequests

基本上您只需要在您的请求中添加optimizeWaypoints:true即可。请参阅以下示例:

var start_location = "LHR";
var finish_location = "LHR";
var way_points = [
    {
      location:"hounslowl",
      stopover:false
    },{
      location:"harlington",
      stopover:false
    }
  ]

// Let's create the Google Maps request object
var request = {
  origin: start_location, 
  destination: finish_location, 
  optimizeWaypoints:true,
  waypoints[]: way_points,
  travelMode: google.maps.TravelMode.DRIVING
};

答案 3 :(得分:0)

路线路线

旧版DirectionsTrip对象已重命名为DirectionsRoute。请注意,路线现在指的是整个开始到结束的旅程,而不仅仅是父母旅行的一段。

DirectionsRoute包含来自指定起点和终点的单个结果。该路线可能包含一条或多条腿(DirectionLeg类型),具体取决于是否指定了任何航路点。同样,该路由还包含版权和警告信息,除路由信息外,还必须向用户显示这些信息。

DirectionsRoute是一个对象文字,包含以下字段:

legs []包含一个DirectionsLeg对象数组,每个对象包含有关路径一段的信息,来自给定路径中的两个位置。对于指定的每个航点或目的地,将存在单独的航段。 (没有航路点的航线将只包含一个DirectionsLeg。)每条航线都包含一系列DirectionSteps。

  

waypoint_order包含一个数组,指示计算路线中任何航点的顺序。此数组可能包含更改   如果DirectionsRequest已通过optimizeWaypoints,则订购:true。

overview_path包含一个LatLng数组,表示结果方向的近似(平滑)路径。 bounds包含一个LatLngBounds,指示沿给定路径的折线边界。 copyrights包含要为此路线显示的版权文本。 如果您不使用提供的DirectionsRenderer对象,则必须自己处理并显示此信息。 warnings []包含显示这些方向时要显示的警告数组。如果您不使用提供的DirectionsRenderer对象,则必须自己处理并显示这些警告。

参考:https://developers.google.com/maps/documentation/javascript/directions#Legs

答案 4 :(得分:0)

最近2个小时我都遇到了同样的问题。我发现了可以帮助任何其他程序员解决相同问题的主要原因。Google方向Api没有显示优化的溃败原因是因为我们没有提供确切的位置。您只插入一串只有一个城市地址的航点。您必须提供完整的地址,以便Google知道该航点的确切纬度和经度,以及出发地和目的地,将解决此问题。 例如:原点=法国Thionville的Gare de Thionville。

来自Google Direction API文档的参考。 “位置将航点的位置指定为LatLng,google.maps.Place对象或将进行地理编码的字符串。”