web-dev-qa-db-ja.com

Google Map V3、複数の目的地の最適な運転ルートのリストを取得する方法は?

gmap APIを使用して、多くの目的地の最適な運転ルートを計算したいと思います。私はこのページを読みました:

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

それは私が望むものとほぼ同じです。ただし、目的地のリストを取得したいだけです。それはソートされており、どの目的地から先に行くかを示しています。

例:3つの宛先A、B、Cの場所をGmapに送信します。 $ bestroute [] = {B、C、A}のような配列を受け取る必要があります。

PHPとjavascriptを使用してコーディングします。手伝ってくれたり、チュートリアルを知っているなら、助けてください。

どうもありがとうございました。

21
4everY

あなたが参照するリンクはこれを行う方法を説明しています:確かにあなたはあなたが気にしないいくつかの道順情報も返しますが、あなたはそれを単に無視することができます。

明確にするために、出発地と目的地(AとE)に加えて、いくつかのウェイポイント(B、C、Dなど)でルートリクエストを行うだけです。

web service を使用する場合、ウェイポイントをリストする前に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マップに表示する必要があります)

42
jlivni

Distance Matrixサービスをご覧ください: https://developers.google.com/maps/documentation/javascript/distancematrix

出発地と目的地のセット間の距離を示し、オプションを絞り込むのに役立ちます。

6
Mano Marks

検索の後に私はこのパッケージを使用しました 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"
  ]
]
0
MedElmaachi