8
votes

Obtenir des données d'itinéraires traînées de Google Maps

Je travaille sur un projet et je suis à un point où je suis incapable d'aller plus loin et de besoin d'une aide sérieuse. Laissez-moi vous donner des antécédents.

Je travaille sur un service qui permettra aux utilisateurs d'équiper des vélos à la La même destination de plusieurs points de départ coordonnez leurs manèges. Une partie du flux de travail que nous avons conçu a des utilisateurs de la construction de cartes à l'aide de la Service Google Maps; Ils entrent dans une destination de départ, Google crée un itinéraire qu'il pense fonctionnera, puis les utilisateurs peuvent adapter cet itinéraire par traînant des points pour répondre à leurs besoins particuliers. Nous avons cela Interface développée et fonctionnant bien à:

http://ridestreaming.com/google_maps/

où j'ai frappé un mur impraticable est de savoir comment obtenir l'utilisateur édité Route hors de Google Maps et enregistré dans la base de données pour l'avenir référence. Il semble que nous ayons une méthode pour le faire dans notre JavaScript, dans ce fichier (lignes 344-352):

http: // rudeesteaming. com / google_maps / workflow.js xxx

Nous pouvons obtenir les données d'itinéraire en tant que fichier JSON, le stringifier et envoyer via Ajax à un fichier PHP où nous avons l'intention de le traiter et de le stocker dans mysql. Cependant, le JSON étant renvoyé de Google Maps apparaît être malformé; PHP freaks sortir quand il essaie de le décoder et j'ai couru via un validateur en ligne qui a confirmé sa malformation. Il est À ce stade que nous sommes complètement déconcertés et que nous ne savons pas comment Avancer de l'avant.

Y a-t-il une chance que quelqu'un pourrait être capable d'aider cela? Je suis au point de me frapper la tête contre un mur. Toute réponse est grandement appréciée. Merci pour votre temps!


3 commentaires

Votre commentaire dit "// IMPORTANT! Ceci est l'itinéraire JSON Object", mais l'API Google Maps API pour les DirectionsSults indique que "Notez que ce résultat est" de type JSON ", ce n'est pas strictement JSON, car il inclut indirectement des objets latlng . " Pourriez-vous être la raison pour laquelle vous avez malformé JSON?


C'est tout à fait possible. Je ne le savais pas sur l'objet DirectionsRésultats. Y a-t-il un moyen d'analyser ce Json malformé?


Vous pourriez regarder devshed.com/c/a/php/... Je n'ai jamais travaillé avec les directives à JavaScript et n'a jamais utilisé Json, donc au-delà de cela, je suis de petite aide.


3 Réponses :


2
votes

J'ai fait une chose similaire et j'ai trouvé cela vraiment difficile toutefois après plusieurs heures de travail acharné, j'ai réussi à obtenir tous les points de cheminement à partir de l'itinéraire glissé par l'utilisateur et à le sauvegarder dans la base de données.

Donc, j'ai un champ qui détient tous les points de cheminement séparés par ";". P>

Vous devez avoir ceci: p> xxx pré>

dans votre fonction d'initialisation p>

Ceci est Partie de mon JS: P>

var currentDirections;
var directionsDisplay;
var waypoints = [];
    function saveWaypoints()
    {
        waypoints = [];
        var waypts_field = document.getElementById('waypoints').value.split(';');
        for(var bo = 0; bo < waypts_field.length; bo++)
        {
            if(waypts_field[bo] == ' ' || waypts_field[bo] == '')
            {
                waypts_field.splice(bo,1);
                bo -= 1;
                continue;
            }

            waypoints.push({ location: waypts_field[bo], stopover: false });
        }
    }


    function getWaypoints()
{
    currentDirections = directionsDisplay.getDirections();
    var route = currentDirections.routes[0];
    totalLegs = route.legs.length;
    for (var i = 0; i < route.legs.length; i++) {
        var routeSegment = i+1;
        if(route.legs[i].via_waypoint[0] === undefined) continue;

        document.getElementById('waypoints').value = '';
        var via_waypoint_count = route.legs[i].via_waypoint.length;
        queue = 0;
        for(var bi = 0; bi < via_waypoint_count; bi++)
        {
            var count = 0;

            var lat;
            var lng;

            for (key in route.legs[i].via_waypoint[bi]['location'])
            {
                if(count > 1) break;
                if(count == 0)
                {
                    lat = route.legs[i].via_waypoint[bi]['location'][key];
                    count++;
                    continue;
                }
                lng = route.legs[i].via_waypoint[bi]['location'][key];

                count++;
            }
            reverseGeoCode(new google.maps.LatLng(lat,lng));
        }
    }
}

        function reverseGeoCode(latlng)
    {
        queue += 60;
        setTimeout(function(){
        geocoder.geocode({ 'latLng': latlng }, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            if (results[1]) {
              document.getElementById('waypoints').value += results[1].formatted_address + '; ';
            }
          } else {
            alert("Geocoder failed due to: " + status);
          }
        });
        }, queue * 10);
    }


0 commentaires

1
votes

Ce que vous devriez faire à la place, c'est créer un nouveau JSON dans vous JS qui n'est pas mal formé, puis transmettez-le à PHP via AJAX, qui résoudra le problème du JSON malformé


0 commentaires

0
votes

J'ai couru dans le même problème et je viens de résoudre ce problème.

stocker toute la directionsResponse est totalement non spécifique. La directiveservice.Route retourne un itinéraire basé sur un hachage qui lui est transmis. Donc, stocker ce hachage devrait suffire à stocker l'itinéraire.
À l'époque, cela ne deviendra peut-être qu'un itinéraire différent quand une manière meilleure / plus rapide est disponible. P>

Regardons le hachage de la demande: p> xxx pré>

comme mentionné précédemment par Crag , les données renvoyées sont comme JSON et non JSON. Ainsi, lorsque nous stockons ces données, nous devons convertir la chaîne JSON en un hachage de type JSON. Les points de cheminement qui vont être stockés dans la base de données à l'aide de JSON.Stringify () On dirait que: P>

parse_route_request = function(request) {
  var waypoint, i, len;
  request = JSON.parse(request);
  for (i = 0, len = request.waypoints.length; i < len; i++) {
    waypoint = request.waypoints[_i];
    if (waypoint.location.Ha) {
      waypoint.location = new google.maps.LatLng(waypoint.location.Ha, waypoint.location.Ia);
    }
  }
  return request;
};


0 commentaires