2011-03-01 21 views
8

से बाहर खींच लिया गया मार्ग डेटा प्राप्त करना मैं एक परियोजना पर काम कर रहा हूं और उस बिंदु पर हूं जहां मैं आगे जाने में असमर्थ हूं और कुछ गंभीर सहायता की आवश्यकता है। मुझे आपको कुछ पृष्ठभूमि देने दो।Google मानचित्र

मैं ऐसी सेवा पर काम कर रहा हूं जो उपयोगकर्ताओं को पर बाइक की सवारी करने के लिए कई शुरुआती बिंदुओं से उनकी यात्रा को समन्वयित करने देगी। हमारे द्वारा डिज़ाइन किए गए वर्कफ़्लो का हिस्सा उपयोगकर्ताओं को Google मानचित्र सेवा का उपयोग करके मानचित्र बनाना है; वे एक प्रारंभिक गंतव्य दर्ज करते हैं, Google बनाता है जो एक ऐसा मार्ग है जो सोचता है कि काम करेगा, और फिर उपयोगकर्ता अपनी विशेष आवश्यकताओं को पूरा करने के लिए अंक खींचकर उस मार्ग को तैयार कर सकते हैं। हम इस इंटरफेस विकसित किया है और अच्छी तरह से काम कर रहा पर है

http://ridestreaming.com/google_maps/

मैं एक अगम्य दीवार कहाँ तक पहुंचते हैं कैसे Google नक्शे से प्रस्थान उपयोगकर्ता के संपादित मार्ग प्राप्त करने के लिए है और भविष्य के लिए डेटाबेस में बचाया संदर्भ। ऐसा लगता है कि हम अपने जावास्क्रिप्ट में कर रही है कि (लाइनों 344-352) इस फ़ाइल में, के लिए एक विधि है:

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

हम मार्ग डेटा प्राप्त कर सकते हैं बाहर एक JSON फ़ाइल, stringify के रूप में इसे, और को AJAX के माध्यम से एक PHP फ़ाइल में भेजें जहां हम इसे संसाधित करना चाहते हैं और इसे MySQL में स्टोर करें। हालांकि, Google मानचित्र से जेएसओएन वापस लौटाया जा रहा है विकृत होने के लिए; जब PHP इसे डीकोड करने का प्रयास करता है तो PHP फ्रीक हो जाता है, और मैं चलाता हूं जो इसे एक वैधकर्ता ऑनलाइन के माध्यम से चलाता है जिसने इसकी विकृति की पुष्टि की। इस बिंदु पर है कि हम पूरी तरह से परेशान हैं और उन्हें पता नहीं है कि आगे बढ़ें।

क्या कोई मौका है कि कोई इस से सहायता कर सके? मैं दीवार के खिलाफ अपने सिर को झुकाव के बिंदु पर हूं। किसी भी प्रतिक्रिया पर बहुत सराहना की है। आपके समय के लिए धन्यवाद! एक

+1

आपकी टिप्पणी कहते हैं, "! // महत्वपूर्ण यह दिशा-निर्देश JSON ऑब्जेक्ट है", लेकिन DirectionsResults के लिए गूगल मैप्स एपीआई कहा गया है "ध्यान दें कि यह परिणाम यह है कि" JSON की तरह , "यह सख्ती से JSON नहीं है, क्योंकि यह अप्रत्यक्ष रूप से LatLng ऑब्जेक्ट्स शामिल है।" क्या यह कारण हो सकता है कि आप विकृत JSON क्यों प्राप्त कर रहे हैं? – Crag

+0

यह पूरी तरह से संभव है। मुझे दिशा-निर्देश वस्तु के बारे में यह नहीं पता था। क्या इस विकृत JSON को पार्स करने का कोई तरीका है? – mcleodm3

+0

आप http://www.devshed.com/c/a/PHP/Parsing-Google-Maps-API-using-PHP-and-JSON-2348127/ पर देख सकते हैं I मैंने कभी जावास्क्रिप्ट में दिशा-निर्देशों के साथ काम किया है और जेएसओएन का कभी भी उपयोग नहीं किया, इससे परे कि मैं थोड़ी सी मदद कर रहा हूं। – Crag

उत्तर

2

मैं इसी तरह की बात कर दिया गया है और यह वास्तव में मुश्किल है लेकिन कड़ी मेहनत के कई घंटे के बाद पाया, मैं उपयोगकर्ता के खींचे गए मार्ग से सभी वेपोइंट हो और यह डेटाबेस में बचाने में कामयाब ..

तो, मेरे पास है वह क्षेत्र जो ";" से अलग सभी मार्ग बिंदुओं को रखता है।

आप इस करना होगा:

यह मेरी जे एस का हिस्सा है अपने initialisation समारोह में

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

:

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

मैं जल्दी से इस बंद मेरी जे एस खींच लिया, इसलिए यदि यह समझ में नहीं आता है, मैं अपने सभी जेएस पोस्ट करूंगा और इसे थोड़ा सा समझाऊंगा ..

धन्यवाद

1

क्या आप के बजाय क्या करना चाहिए मैं एक ही मुद्दा है और मैं में भाग विकृत JSON

0

की समस्या आप जे एस में एक नया JSON बनाने जो विकृत नहीं है और फिर इस AJAX के माध्यम से PHP के लिए गुजरती हैं, यही कारण है कि समाधान होगा है बस इसे हल किया है।

संपूर्ण दिशाओं को संग्रहीत करना रेस्पॉन्स पूरी तरह से अनैच्छिक है। दिशानिर्देश सेवा। मार्ग एक हैश पर आधारित एक मार्ग देता है जो इसे पारित किया जाता है। तो यह संग्रह करना कि हैश मार्ग को स्टोर करने के लिए पर्याप्त होना चाहिए।
उस समय तक, यह एक बेहतर मार्ग हो सकता है जब एक बेहतर/तेज़ तरीका उपलब्ध हो।

के अनुरोध हैश पर एक नज़र डालें:

request = { 
    origin: "Hamburg" 
    destination: "Berlin" 
    waypoints: [{location: new google.maps.LatLng(53.88,11.51), stopover: false}], 
    travelMode: google.maps.DirectionsTravelMode.DRIVING 
} 

पहले Crag से उल्लेख किया है, डेटा कि लौटा दिया जाता है JSON की तरह है और नहीं JSON। इसलिए, जब हम इस डेटा को स्टोर करते हैं, तो हमें JSON स्ट्रिंग को JSON-like हैश में फिर से कनवर्ट करने की आवश्यकता होती है। वेपोइंट कि JSON.stringify() का उपयोग करके डेटाबेस में संग्रहीत करने के लिए जा रहे हैं कि तरह लग रहा है:

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

जब भी आप पारित करने के लिए डेटा DirectionsService.route करने के लिए कि आप बस एक समारोह कॉल कर सकते हैं चाहते हैं जो कि पहले एक LatLng ऑब्जेक्ट वाले स्थान के ऊपर लिख:

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