3

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

当我尝试使用http://findthebestroute.com/RouteFinder.html找到优化的轨道时,下面的响应是显而易见的答案并且是正确的。在此处输入图像描述

但现在我想使用谷歌提供的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 带到 Hounslow 和 harlingston。我不知道我提出的要求有什么问题。任何帮助都是非常可观的。 在此处输入图像描述

4

5 回答 5

5

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

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

在我解释这个简单的逻辑之前,我们先弄清楚你需要设置的必需参数

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

现在问题是您首先需要设置起点并找到最佳最终目的地以获得优化的轨道。

例如。如果您有多个航点,请说 A、B、C、D。确实,在我们找到优化的轨道后,这个顺序可能不会保持不变。所以首先我们需要确定我们想要从哪里开始路线让我们假设 B,然后我们需要计算三个优化的轨道,假设再挖掘一个点是最终目的地。意义

  1. 出发地:B 目的地:A 航路点:C,D => 结果 [d1 公里,t1 分钟]
  2. 始发地:B 目的地:C 航路点:A,D => 结果 [d2 公里,t2 分钟]
  3. 始发地:B 目的地:D 航路点:C,A => 结果 [d3 公里,t3 分钟]

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

于 2013-08-07T09:52:06.053 回答
3

使用optimize:true允许方向服务通过以更有效的顺序重新排列航点来优化提供的路线。 文档

编辑

查看您的代码,您没有提供我尝试过的目的地(添加 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 个航点。

于 2013-08-06T17:56:56.967 回答
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
};
于 2014-12-25T20:20:33.107 回答
0

方向 路线

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

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

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

于 2014-03-24T07:56:05.453 回答
0

我在过去 2 小时内遇到了同样的问题。我找到了可以帮助任何其他程序员的主要原因,如果他们有同样的问题。谷歌方向 Api 没有显示优化路线的原因是因为我们没有提供它们的确切位置。您只插入只有一个城市地址的路点字符串。您必须提供完整的地址,以便谷歌知道该路点的确切纬度和经度以及起点和目的地,并将解决这个问题问题。示例:原产地 = 法国蒂永维尔火车站。

来自 google direction api 文档的参考。“location 以 LatLng、google.maps.Place 对象或将被地理编码的字符串指定航点的位置。”

于 2018-09-08T18:46:12.233 回答