web-dev-qa-db-fra.com

Google Map V3, comment obtenir la liste des meilleurs itinéraires de conduite pour plusieurs destinations?

je voudrais utiliser l'API Gmap pour calculer le meilleur itinéraire en voiture pour de nombreuses destinations. J'ai lu cette page:

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

C'est presque la même chose que je veux. Cependant, je veux seulement récupérer une liste de destinations, qui est triée et dire quelle destination aller en premier.

Par exemple: j'envoie la position de trois destinations A, B, C à Gmap. J'ai besoin de recevoir un tableau comme $ bestroute [] = {B, C, A}.

Je vais coder avec PHP et javascript. Si vous pouvez m'aider ou connaître un tutoriel, aidez-moi.

Merci beaucoup.

21
4everY

Le lien auquel vous faites référence explique comment procéder: certes, vous récupérez également des informations sur les directions qui ne vous intéressent pas, mais vous pouvez simplement les ignorer.

Pour être clair, il vous suffit de faire une demande d'itinéraire avec certains waypoints (par exemple B, C et D) en plus de votre origine et destination (A et E).

Si vous utilisez le service Web , assurez-vous de définir optimiser: vrai avant de répertorier vos waypoints, et vérifiez le tableau waypoint_order (près du bas du résultat pour cette URL) pour obtenir les informations que vous souhaitez:

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

Si vous utilisez l'API JS, définissez OptimizeWaypoints: true dans votre demande.

Comme toujours, assurez-vous de respecter les conditions d'utilisation (par exemple, les résultats de votre demande de service Web doivent être affichés sur une carte Google).

42
jlivni

Vous voudrez peut-être consulter le service Distance Matrix: https://developers.google.com/maps/documentation/javascript/distancematrix

Il vous donne des distances entre un ensemble d'origines et de destinations et peut vous aider à réduire les options.

6
Mano Marks

après hous de recherche, j'ai utilisé ce package https://github.com/alexpechkarev/google-maps avec les paramètres ci-dessous:

$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_);

en réponse:

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