2012-01-10 5 views
16

मैं अपने आवेदन में समारोह स्थल स्थान को बचाने के लिए कुछ ajax उपयोग करने के लिए कोशिश कर रहे हैं और ढेर अतिप्रवाह पर निम्न कोड भर में ठोकर खाईस्थान के अक्षांश/देशांतर पुन: प्राप्त करने का उपयोग कर google.maps.geocoder

function getLatLong(address) 
{ 
    var geocoder = new google.maps.Geocoder(); 
    var result = ""; 
    geocoder.geocode({ 'address': address, 'region': 'uk' }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      result[lat] = results[0].geometry.location.Pa; 
      result[lng] = results[0].geometry.location.Qa; 
     } else { 
      result = "Unable to find address: " + status; 
     } 
    }); 
    return result; 
} 

मेरी समस्या जब है मैं फ़ंक्शन को कॉल करता हूं, यह कुछ भी नहीं देता है और जब मैं डीबग करता हूं और क्रोम में ब्रेकपॉइंट्स सेट करता हूं तो यह परिणाम पर टूटने से पहले रिटर्न परिणाम पर टूट जाता है [lat] = results [0] .geometry.location.Pa;

मैं जानता हूँ कि सरणी प्रकार सरणी के रूप में घोषित किया जाना चाहिए, लेकिन यहां तक ​​कि जब मैं सिर्फ परिणाम लौट रहा था [0] .geometry.location कुछ भी नहीं आपत्ति

लौटे किया जा रहा था मैं क्या अक्षांश/देशांतर के वापस जाने के लिए क्या कर सकते हैं स्थान मैं अपने डीबी में स्टोर कर सकते हैं?

+0

[Google स्थल एपीआई का संभावित डुप्लिकेट क्यों हर बार एक अलग चर के तहत लैट और लॉन लौटाता है?] (Http://stackoverflow.com/questions/13505928/google-places-api-why-does -it-return-lat-and-lon-under-a-different-variable-eac) – Gajus

उत्तर

16

आपको जिस समस्या का सामना करना पड़ रहा है वह यह है कि आप geocoder.geocode फ़ंक्शन का इलाज कर रहे हैं क्योंकि आप तुरंत परिणाम देने से पहले पूरा कर रहे हैं। वास्तव में क्या हो रहा है कि geocoder.geocode ट्रिगर किया गया है, तो आपको परिणाम की तत्काल वापसी मिलती है। चूंकि एसिंक्रोनस परिणाम अधिकतर वापस नहीं लौटा है, इसलिए आपका परिणाम खाली है। एक पुश के रूप में geocoding परिणाम के बारे में सोचो, एक पुल नहीं। StoreResult फ़ंक्शन, दिखाया नहीं गया है, जानकारी को सहेजने के लिए आपको जो भी कोड करना है, वह है। चूंकि आप एक त्रुटि स्ट्रिंग के साथ परिणाम जोड़ रहे हैं, तो आपको इसे अपने स्टोर रीसेट फ़ंक्शन में संभालना होगा। एक विकल्प के रूप में, आप परिणाम में एक स्थिति हो सकती है जो सफलता या विफलता को इंगित करती है।

function getLatLong(address) { 
var geocoder = new google.maps.Geocoder(); 
var result = ""; 
geocoder.geocode({ 'address': address, 'region': 'uk' }, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     result[lat] = results[0].geometry.location.Pa; 
     result[lng] = results[0].geometry.location.Qa; 
    } else { 
     result = "Unable to find address: " + status; 
    } 
    storeResult(result); 
    }); 
} 
+0

इसके लिए धन्यवाद- मैंने जावास्क्रिप्ट का उपयोग शुरू करने के लिए पते को सत्यापित करने के लिए किया था और उसके बाद सर्वर पर पोस्ट किया था और इसे पकड़ने के लिए http अनुरोध का उपयोग किया था भू कोड जानकारी। शायद –

+0

सड़क के नीचे फिर से प्रतिक्रिया देगी क्योंकि ली स्मिथ कहते हैं, परिणामों के आंतरिक क्षेत्रों का उपयोग न करें। मैंने अभी उन लोगों का उपयोग किया क्योंकि ओपी ने ऐसा किया था। Google अक्सर आंतरिक चर नाम बदलता है, इसलिए आप उन पर भरोसा नहीं कर सकते हैं। एपीआई का प्रयोग करें। –

+4

ली स्मिथ का जवाब देखें ... इसके बजाय geometry.location.lat() और geometry.location.lng() फ़ंक्शंस का उपयोग करें। – NexusRex

20

यह जवाब नहीं है, लेकिन उपयोग नहीं करते Pa और QA हमेशा) एलएनजी() और अक्षां का उपयोग करें (कार्य:

place.geometry.location 
{...} 
    Pa: 56.240477 
    Qa: -0.902655999999979 
    toString: function(){return"("+this.lat()+", "+this.lng()+")"} 
    equals: function(a){return!a?k:Cd(this.lat(),a.lat())&&Cd(this.lng(),a.lng())} 
    lat: function(){return this[a]} 
    lng: function(){return this[a]} 
    toUrlValue: function(a){a=Hd(a)?a:6;return $d(this.lat(),a)+","+$d(this.lng(),a)} 
+14

इस उत्तर में अधिक स्पष्टता जोड़ने के लिए: Google मानचित्र का जियोकोडर कभी-कभी ला और क्यूए के रूप में लैट और एलएनजी मान देता है, दूसरी बार यह सा और ता ... ज्यामिति.लोकेशन.लाट() और ज्यामिति का उपयोग करने का एकमात्र गारंटीकृत तरीका है। location.lng() – NexusRex

2

मैं इस के साथ कड़ी मेहनत के लिए संघर्ष किया है और पाया है काम करने के लिए निम्न ।

  1. लूप वस्तु के माध्यम से और एक नई सरणी में धक्का:

    var lat = latLng[newArray[0]]; 
    
    var lng = latLng[newArray[1]]; 
    
:

var newArray = []; 

for (var key in latLng) { 

    newArray.push(key); 

} 
  • डॉट नोटेशन टूटता वर्ग कोष्ठक वाक्य रचना के साथ चर मान, के साथ अपने वस्तु कॉल

  • 0

    मेरे मामले में स्थान वस्तु से अक्षांश और देशांतर प्राप्त करने के लिए सबसे सरल समाधान था:

    var latitude=place.geometry.location['k']; 
        var longitude=place.geometry.location['A']; 
    
    संबंधित मुद्दे