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

问题描述 投票:3回答:5

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

当我试图使用下面的http://findthebestroute.com/RouteFinder.html找到优化的轨道是响应,这是明显的答案和正确。

但现在我想在我自己的应用程序中使用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。我不知道我提出的要求有什么问题。任何帮助都非常明显。

google-maps google-maps-api-3
5个回答
4
投票

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

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

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

  1. 起源 - 从您想要开始路线的地方
  2. 目的地 - 最后一个路线指向
  3. waypoints =原点和目的地之间的点,优化设置为true

现在你首先需要设置原点并找到最佳的最终目的地以获得优化的轨道。

例如。如果你有多个航路点说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]

看到结果,我们有三个可能的轨道,具有不同的距离值和时间。现在,您只需根据时间优化或距离优化选择优化的轨道。


3
投票

使用optimize:true允许Directions服务通过以更有效的顺序重新排列航点来优化提供的路线。 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个航路点。


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

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


0
投票

我在过去2个小时内遇到了同样的问题。我发现主要原因可以帮助任何其他程序员,如果他们会有同样的问题。谷歌方向Api没有显示优化溃败的原因是因为我们没有提供他们确切的位置。你只插入只有一个城市地址的路线点。你必须提供完整的地址,所以谷歌将知道确切的纬度和长度的那个路点以及起点和终点,并将解决这个问题问题。例如:origin = Gare de Thionville,Thionville,France。

参考谷歌方向api文档。 “location指定航点的位置,作为LatLng,作为google.maps.Place对象或作为将进行地理编码的String。”

© www.soinside.com 2019 - 2024. All rights reserved.