2012-01-03 4 views
8

तोड़ता है मैं Google मानचित्र के साथ एक वेब ऐप पर काम कर रहा हूं और उपयोगकर्ता की स्थिति प्राप्त करने के लिए getCurrentPosition() का उपयोग कर रहा हूं। यह ठीक काम करता है लेकिन मुझे समय के साथ उपयोगकर्ता की स्थिति को ट्रैक करने की आवश्यकता है।geolocation.watchPosition geolocation.getCurrentPosition

इसके लिए मैं watchPosition() का उपयोग करना चाहता था। एपीआई संदर्भ API reference के अनुसार इसे तुरंत डेटा अधिग्रहण निष्पादित करना होगा और कॉलबैक निष्पादित करना होगा, लेकिन ऐसा नहीं है। इसके बजाय यह जम जाता है, और अब मैं getCurrentPosition() का उपयोग नहीं कर सकता। मैं इसके लिए एक कारण खोज रहा हूं और मैं समझ नहीं पा रहा हूं कि इस तरह से व्यवहार क्यों कर रहा है। मैं लिनक्स मिंट "लिसा" के लिए नवीनतम क्रोम का उपयोग कर रहा हूं।

उत्तर

14

मोबाइल डिवाइस पर, .getCurrentPosition() बहुत गलत है। .watchPosition() का उपयोग करना अधिक सटीक है, लेकिन सर्वोत्तम पढ़ने के लिए इसमें लगभग पांच सेकंड लगते हैं। उसके बाद, यह सक्रिय रखने के लिए बैटरी को बर्बाद कर देता है।

यह .watchPosition() का उपयोग करके हर 15 सेकंड में स्थिति की जांच करता है और .clearWatch() का उपयोग करके पांच सेकंड के बाद जांच बंद कर देता है।

डेमो: https://jsfiddle.net/ThinkingStiff/phabq6r3/

स्क्रिप्ट:

var latitude, longitude, accuracy; 

function setGeolocation() { 
    var geolocation = window.navigator.geolocation.watchPosition( 
     function (position) { 
      latitude = position.coords.latitude; 
      longitude = position.coords.longitude; 
      accuracy = position.coords.accuracy; 
      document.getElementById('result').innerHTML += 
        'lat: ' + latitude + ', ' 
       + 'lng: ' + longitude + ', ' 
       + 'accuracy: ' + accuracy + '<br />'; 
     }, 
     function() { /*error*/ }, { 
      maximumAge: 250, 
      enableHighAccuracy: true 
     } 
    ); 

    window.setTimeout(function() { 
      window.navigator.geolocation.clearWatch(geolocation) 
     }, 
     5000 //stop checking after 5 seconds 
    ); 
}; 

setGeolocation(); 

window.setInterval(function() { 
     setGeolocation(); 
    }, 
    15000 //check every 15 seconds 
); 

HTML:

<div id="result"></div> 
+0

मैं इसे धन्यवाद दोस्त –

+5

कोशिश करेंगे यह स्क्रिप्ट पूरी तरह से बेतुका है। स्क्रिप्ट लोड होने पर घड़ीपोत को बुलाया जाता है, और किसी भी कारण से 15 सेकंड के बाद दूसरी बार। बेशक सेटटाइमआउट प्रत्येक 15 सेकंड में सेट जीओलोकेशन को कॉल नहीं करता है, और आपको यह नहीं करना है। यदि उपयोगकर्ता की स्थिति वास्तव में बदलती है तो watchPosition को दिया गया पहला फ़ंक्शन कॉलबैक प्राप्त करेगा। 5 सेकंड के बाद clearWatch को कॉल करना भी व्यर्थ है। – user414873

+1

@ user414873 'getPosition() 'अपने आप से मोबाइल डिवाइस पर बहुत गलत है। यदि आप इसे हर 15 सेकंड कहते हैं, तो आपको जो भी परिणाम मिलेगा वह गलत होगा। 'watchPosition()' लगभग तीन प्रयासों (लगभग 5 सेकंड) तक अधिक सटीक हो जाता है। उसके बाद यह सिर्फ बैटरी बर्बाद कर रहा है। 'clearWatch()' इसे तब तक बंद कर देता है जब तक कि आप फिर से ट्रैक करने के लिए तैयार न हों। मोबाइल डिवाइस पर ट्रैकिंग के लिए यह सबसे अच्छा तरीका है। – ThinkingStiff