2012-11-28 19 views
6

ठीक है, मेरा कोड नीचे है इसलिए मैं समझाऊंगा कि मैं क्या कर रहा हूं और परिणाम के लिए मुझे क्या मिल रहा है।navigator.geolocation.watchPosition बस काम नहीं कर रहा

मैं navigator.geolocation.watchPosition का उपयोग कर उपयोगकर्ता स्थान को पकड़ने की कोशिश कर रहा हूं। मैंने सफलता और त्रुटि कॉलबैक दोनों निर्दिष्ट किए हैं। पहली बार जब मुझे स्थान मिलता है तो यह आमतौर पर बहुत गलत होता है, इसलिए मैं स्थान प्राप्त करने के लिए घड़ीपोत का उपयोग करता हूं जब तक कि इसे 4 बार कोशिश नहीं की जाती या 500 मीटर के भीतर सटीक स्थान प्राप्त नहीं होता है।

समस्याएं मैं कर रहा हूँ:

  • यह कभी एंड्रॉयड के लिए त्रुटि कॉलबैक में प्रवेश करती है (HTC पर परीक्षण सनसनीखेज और सैमसंग गैलेक्सी S3)। हालांकि, आईफोन पर, यह लगता है कि 50% से अधिक त्रुटि कॉलबैक दर्ज करें।

  • यह कभी भी समय-समय पर नहीं होता है। यह तब तक खोज करता रहता है जब तक कि उसे स्थान प्राप्त न हो जाए।

  • किसी स्थान को पुनर्प्राप्त करने के लिए 0-60 सेकंड के बीच कहीं भी लगता है। कभी-कभी पेज लोड होने से पहले यह होता है, दूसरी बार यह एक मिनट का बेहतर हिस्सा लेता है। इसमें कोई समझदार पैटर्न भी नहीं है कि यह कभी-कभी इसे क्यों तेज करता है और क्यों नहीं।

मैंने कई फ़ोरम पोस्ट और कई स्टैक ओवरफ्लो प्रश्नों के साथ-साथ भौगोलिक स्थान और किसी अन्य दस्तावेज़ के लिए विशिष्ट खोज की है। इस पर बहुत अधिक जानकारी नहीं है, इन समस्याओं को अकेले छोड़ दें। क्या कोई गलत है? या यह सिर्फ स्थान के साथ काम करने की प्रकृति है?

if (typeof navigator.geolocation === 'object' && typeof navigator.geolocation.watchPosition === 'function') { 
    ... 
} 

"Geolocation.watchPosition() प्रणाली हैंडलर समारोह है कि हर बार जब डिवाइस के स्थिति में परिवर्तन बुलाया जाएगा रजिस्टर करने के लिए प्रयोग किया जाता है:

if(navigator.geolocation){ 
     var geo_count = 0; 

     var wpid = navigator.geolocation.watchPosition(success, error, { 
      enableHighAccuracy: true, 
      maximumAge: 0, 
      timeout: 10000 
     }); 

     function success(position){ 
      alert(position.coords.accuracy) 

      geo_count = geo_count + 1; 

      if(position.coords.latitude && position.coords.longitude && position.coords.accuracy < 500){ 
       navigator.geolocation.clearWatch(wpid); 

       alert('position obtained!');  
      } 
      else if(geo_count > 4){ 
       navigator.geolocation.clearWatch(wpid); 

       alert('inaccurate position obtained'); 
      } 
     } 

     function error(error){ 
      switch(error.code){ 
       case 1: 
        alert('permission denied'); 
        break; 
       case 2: 
        alert('position unavailable'); 
        break; 
       case 3: 
        alert('timeout'); 
        break; 
       default: 
        alert('unknown error'); 
        break; 
      } 
     } 
    } 

उत्तर

2

मैं का उपयोग कर जाँच करने के लिए सलाह देते हैं आप वैकल्पिक रूप से कॉलबैक फ़ंक्शन को प्रबंधित करने में त्रुटि निर्दिष्ट कर सकते हैं। "

मैबी यह ट्रिगर नहीं करता है क्योंकि स्थिति अभी भी वही है? https://developer.mozilla.org/en-US/docs/Web/API/Geolocation

गुड लक

: ^^

कोशिश यह एक अंतराल या WebWorker साथ Geolocation.getCurrentPosition() का उपयोग कर डिबग करने के लिए

संबंधित मुद्दे