2011-03-01 21 views
8

Bir projede çalışıyorum ve daha fazla gidemediğim ve bazı ciddi yardıma ihtiyacım olduğu bir noktadayım. Sana biraz arka plan vereyim.Google Maps'ten sürüklenen rota verisi alma

Birden fazla başlangıç ​​noktasından aynı hedefe bisiklet süren kullanıcıların bisiklet sürmelerini sağlayan bir hizmet üzerinde çalışıyorum. Tasarladığımız iş akışının bir parçası, kullanıcılara Google Maps hizmetini kullanarak harita oluşturma; Bir başlangıç ​​hedefi girerler, Google, 'u çalışacağını düşündüğü bir rota oluşturur ve kullanıcılar bu rotayı, özel ihtiyaçlarını karşılamak için sürükleme noktaları ile uyarlayabilirler. Bu arayüz geliştirdi ve en güzel çalışma var: Ben geçilmez duvara isabet ettik

http://ridestreaming.com/google_maps/

Google Maps üzerinden kullanıcı tarafından düzenlenen rotayı nasıl olduğunu ve gelecek için veritabanına kaydedilir referansı.

http://ridestreaming.com/google_maps/workflow.js

var newString = JSON.stringify(directions); 
    //set up area to place drop directionsResponse object string 
    var directions_response_panel = document.getElementById("directions_response"); 
    //dump any contents in directions_response_panel 
    directions_response_panel.innerHTML = ""; 
    //add JSON string to it 
    directions_response_panel.innerHTML = "<pre>" + newString + "</pre>"; 
    //run the ajax 
    runAjax(directions); 

Biz rota verilerini girememesi bir JSON dosyası, stringify olarak: Biz (çizgiler 344-352) bu dosyada, bizim JavaScript bunu yaparken için bir yöntem var gibi görünüyor Bunu yapmak ve 'u AJAX üzerinden bir MySQL içinde işlemek ve saklamak istediğimiz bir PHP dosyasına göndermek. Ancak, Google Haritalar'dan döndürülen JSON hatalı biçimlendirilmek üzere görünüyor; PHP, şifresini çözmeyi denediğinde korkutuyor ve ben onun malformitesini doğrulayan bir doğrulayıcı üzerinden 'u çalıştırdım. bu noktada tamamen şaşırmış ve nasıl ilerleyeceğimize dair hiçbir fikrimiz yok.

Bu konuda herhangi birinin yardımcı olabileceği ihtimali var mı? Kafamı duvara yaslamak içindeyim. Herhangi bir cevap büyük ölçüde takdir edilmektedir. Zaman ayırdığın için teşekkürler!

+1

Yorumunuz diyor "! // ÖNEMLİ Bu Yol JSON nesnesi", ancak DirectionsResults için Google Maps API JSON benzeri "Bu sonuca rağmen olduğunu unutmayın" belirtiyor , "dolaylı olarak LatLng nesnelerini içerdiği için kesinlikle JSON değildir." Yanlış biçimlendirilmiş JSON almanın nedeni bu olabilir mi? – Crag

+0

Tamamen mümkündür. DirectionsResults nesnesi hakkında bunu bilmiyordum. Bu hatalı biçimlendirilmiş JSON'u ayrıştırmanın bir yolu var mı? – mcleodm3

+0

http://www.devshed.com/c/a/PHP/Parsing-Google-Maps-API-using-PHP-and-JSON-2348127/ adresine bakabilirsiniz. Yalnızca javascript'te RouteResults ile çalıştım. ve asla JSON kullanmamış, öylesine ötesinde küçük bir yardımcım var. – Crag

cevap

2

Ben Yani

.. benzer bir şey yapıyor ve zor iş birkaç saat sonra ancak bu gerçekten zor buldum, ben Kullanıcı Sürüklenen rotadan tüm noktalarını almak ve veritabanına kaydetmek için yönetildiğini, I have a ";" ile ayrılmış tüm yol noktalarını barındıran alan.

Buna olması gerekir:

bu benim JS parçası olan başlatma işlevi

directionsDisplay = new google.maps.DirectionsRenderer({ 
    'map': map, 
    'preserveViewport': true, 
    'draggable': true 
}); 

: i hızla bu kapalı benim JS çekti

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); 
    } 

eğer öyleyse o mantıklı değil, ben tüm JS yayınlayacağım ve biraz açıklayacağım ..

Teşekkürler

1

Bunun yerine ne gerektiğini, bu çözecektir AJAX PHP bu geçmesine sonra aynı konuda ve ben koştum hatalı biçimlendirilmiş JSON

0

sorununu hatalı biçimlendirilmiş olmadığı sen JS yeni JSON oluşturmak ve olan sadece çözdüm.

Tüm yol tariflerinin saklanması tamamen gereksizdir. DirectionsService.route, kendisine iletilen Hash'a dayalı bir yol döndürür. Bu karma’yı saklamak rotayı saklamak için yeterli olmalıdır.
Bu zamana kadar, daha iyi/daha hızlı bir yolun mevcut olduğu durumlarda, bu sadece farklı bir rota olabilir.

talebi karma bir göz atalım:

önce Crag tarafından belirtildiği gibi
request = { 
    origin: "Hamburg" 
    destination: "Berlin" 
    waypoints: [{location: new google.maps.LatLng(53.88,11.51), stopover: false}], 
    travelMode: google.maps.DirectionsTravelMode.DRIVING 
} 

, döndürülen verileri JSON JSON benzeri olup. Dolayısıyla, bu verileri sakladığımız zaman, JSON dizesini tekrar JSON benzeri bir Hash'a dönüştürmemiz gerekiyor. JSON.stringify() kullanarak veritabanında saklanan olacak yol işaretleri gibi görünüyor:

waypoints: 
    [location: { 
     Ha: 53.88, 
     Ia: 11.51 
    }, 
    stopover: false 
    ] 

veri sadece bir işlev çağırabilir DirectionsService.route o geçmek istediğinizde hangi edecek önce bir EnlBoy nesne ile her bir yeri üzerine:

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; 
}; 
İlgili konular