21

我想使用 Gmap API 来计算许多目的地的最佳行车路线。我已阅读此页面:

http://googlegeodevelopers.blogspot.de/2010/03/good-day-for-salesmen-that-travel-on.html

这几乎是我想要的东西。但是,我只想获取目的地列表,该列表已排序并告诉首先去哪个目的地。

例如:我将三个目的地 A、B、C 的位置发送到 Gmap。我需要接收一个像 $bestroute[] = {B,C,A} 这样的数组。

我将使用 PHP 和 javascript 进行编码。如果您可以帮助我或知道任何教程,请提供帮助。

非常感谢。

4

3 回答 3

47

您引用的链接解释了如何执行此操作:诚然,您还可以返回一些您不关心的方向信息,但您可以简单地忽略它。

需要明确的是,除了您的起点和目的地(A 和 E)之外,您只需使用一些航路点(例如 B、C 和 D)提出路线请求。

如果使用网络服务,请确保在列出您的航点之前设置 optimize:true,并检查 waypoint_order 数组(靠近此 url 结果的底部)以获得您想要的信息:

http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA&sensor=false

如果使用 JS API,请在您的请求中设置 optimizeWaypoints:true。

与往常一样,请确保您遵守服务条款(例如,您的网络服务请求的结果必须显示在 Google 地图上)

于 2012-08-03T23:01:12.607 回答
6

您可能想查看距离矩阵服务:https ://developers.google.com/maps/documentation/javascript/distancematrix

它为您提供一组起点和终点之间的距离,并可能帮助您缩小选项范围。

于 2012-08-04T12:52:15.770 回答
0

经过一番搜索后,我使用了这个包https://github.com/alexpechkarev/google-maps 和下面的参数:

$origin = ['lat' => 35.762288, 'lng' => -5.866525, 'ville' => 'tanger'];
    $destination = ['lat' => 33.565567, 'lng' => -7.552402, 'ville' => 'casablanca'];
    $points = [
        ['lat' => 33.951825, 'lng' => -6.839634, 'ville' => 'rabat'],
        ['lat' => 35.475028, 'lng' => -6.015167, 'ville' => 'assilah'],
        ['lat' => 35.178713, 'lng' => -6.132972, 'ville' => 'laarach'],
        ['lat' => 34.868921, 'lng' => -6.247939, 'ville' => 'moulay Bouslham'],
        ['lat' => 33.834129, 'lng' => -6.054144, 'ville' => 'khmissat'],
        ['lat' => 35.574788, 'lng' => -5.360490, 'ville' => 'Tetouan'],

    ];

    $wayPointsString = collect($points)->transform(function ($point) {
        return $point['lat'] . ',' . $point['lng'];
    })->implode('|');

    $data = \GoogleMaps::load('directions')
        ->setEndpoint('json')
        ->setParam([
            'origin' => collect($origin)->take(2)->implode(','),//tanger
            'destination' => collect($destination)->take(2)->implode(','), // casablanca
            'waypoints' => ['optimize:true|' . $wayPointsString
            ],
            'mode' => 'driving',
            'alternatives' => true,
            'departure_time' => 'now',
        ])
        ->get();

    $data = json_decode($data, true);
    $points_ = [];
    $points_[] = $origin;

    foreach ($data['routes'][0]['waypoint_order'] as $key => $value) {
        $points_[] = $points[$value];
    }
    $points_[] = $destination;
    dd($points_);

作为回应:

array:8 [
  0 => array:3 [
    "lat" => 35.762288
    "lng" => -5.866525
    "ville" => "tanger"
  ]
  1 => array:3 [
    "lat" => 35.574788
    "lng" => -5.36049
    "ville" => "Tetouan"
  ]
  2 => array:3 [
    "lat" => 35.475028
    "lng" => -6.015167
    "ville" => "assilah"
  ]
  3 => array:3 [
    "lat" => 35.178713
    "lng" => -6.132972
    "ville" => "laarach"
  ]
  4 => array:3 [
    "lat" => 34.868921
    "lng" => -6.247939
    "ville" => "moulay Bouslham"
  ]
  5 => array:3 [
    "lat" => 33.834129
    "lng" => -6.054144
    "ville" => "khmissat"
  ]
  6 => array:3 [
    "lat" => 33.951825
    "lng" => -6.839634
    "ville" => "rabat"
  ]
  7 => array:3 [
    "lat" => 33.565567
    "lng" => -7.552402
    "ville" => "casablanca"
  ]
]
于 2019-09-12T16:07:53.850 回答