2010-05-07 13 views
7

HIकैसे getAltitude (के एंड्रॉयड जीपीएस स्थान) काम करता है

मैं एक सरल जीपीएस ट्रैकर को लागू करने की कोशिश की। इसलिए

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this); 

प्रयोग किया जाता है तो फिर मैं

public void onLocationChanged(Location location) { 

विधि का इस्तेमाल किया मेरे वर्तमान स्थान की ऊंचाई को पढ़ने के लिए।

लेकिन मुझे वास्तव में पता नहीं है कि location.getAltitude() लौटाता है। दस्तावेज़ कहता है कि यह ऊंचाई देता है। लेकिन यह मीटर में है? या फीट? अगर मैं फोन के बगल में डेस्क रखता हूं, तो यह मूल्य 500 से 500 के बीच बदल जाता है ??

यह वास्तव में कैसे काम करता है ???

+8

फिर भी, यह मानने के लिए कुछ भी अच्छा नहीं है (हम सभी जानते हैं कि हमें कहां प्रोग्रामिंग में मिलता है)। विशेष रूप से जिस देश के बारे में आप बात करते हैं वह है जहां Google का मुख्यालय है। आइए बस सहमत हैं कि दस्तावेज़ीकरण में सुधार किया जा सकता है। – snapfractalpop

उत्तर

23

आपके द्वारा प्राप्त ऊंचाई मान the gps (WGS84)reference ellipsoid से मीटर में है और geoid से नहीं है।

अपने अनुभव से जीपीएस ऊंचाई मानों पर वास्तव में खराब है।

मैं GPS Status पूछे जाने वाले प्रश्न पर इस पढ़ें:

जीपीएस, मतलब समुद्र तल से ऊंचाई रिपोर्ट नहीं करता बल्कि जीपीएस प्रणाली WGS84 संदर्भ दीर्घवृत्ताभ जो ऊपर या वास्तविक से कम हो सकती करने के लिए ऊंचाई तुलना समुद्र स्तर। पृथ्वी के विभिन्न हिस्सों में यह 200 मीटर से अधिक (पृथ्वी के बड़े पैमाने पर वितरण के आधार पर) बंद हो सकता है। उदाहरण के लिए फ्लोरिडा के आसपास भूगर्भ की सतह औसत समुद्र स्तर से 30-40 मीटर तक है, जिसका मतलब है कि किनारे पर खड़े होने से आपको ऊंचाई के रूप में -30 मीटर दिखाई देगा। यह सामान्य है, और कोई त्रुटि नहीं है, और इस तथ्य के कारण कि ऊंचाई एक कृत्रिम संदर्भ सतह से संबंधित है, न कि समुद्री स्तर पर। यदि आप इस विषय में रूचि रखते हैं, तो मैं Mean Sea Level, GPS, and the Geoid पढ़ने की अनुशंसा करता हूं।

+0

के लिए धन्यवाद क्या यह कहना उचित है कि माप एक स्थानीय स्थान पर सेटिंग में "सटीक लेकिन सटीक नहीं" है? दूसरे शब्दों में, क्या जीपीएस का उपयोग आस-पास के बिंदुओं के बीच सापेक्ष ऊंचाई को मापने के लिए किया जा सकता है? – snapfractalpop

+0

@snapfractalpop: नहीं, जीपीएस ऊंचाई के लिए अच्छा नहीं है। आपको ऊंचाई मापने के लिए बैरोमीटर का उपयोग करना चाहिए, नए एंड्रॉइड फोन में यह है, उदा। नेक्सस गैलेक्सी। – Jonas

+0

धन्यवाद, आपको जानना अच्छा है। मौसम की गड़बड़ी के कारण बैरोमीटर समस्याग्रस्त हो जाएगा? – snapfractalpop

1

मुझे लगता है कि आपकी मेज एक इमारत के अंदर स्थित है। यदि आपको किसी भवन में एक जीपीएस फिक्स मिलता है तो आपको सटीकता की अपेक्षा नहीं करनी चाहिए। getAccuracy() को कॉल करके फ़िक्स की सटीकता प्राप्त करने का प्रयास करना है?

+0

हाँ यह एक इमारत में स्थित है लेकिन मैंने इसे विंडो फ्रेम पर रखा है;) getAccuracy tip – RoflcoptrException

5

पुरानी पोस्ट, मुझे लगता है, लेकिन किसी को अभी भी रुचि हो सकती है। जीपीएस सुनने के दौरान, आप एनएमईए जीपीजीजीए वाक्य (http://aprs.gids.nl/nmea/#gga) का विश्लेषण कर सकते हैं, जिसमें भूगर्भ ऊंचाई (डब्लूजीएस 84 एलिप्सिड के ऊपर भूगर्भ की ऊंचाई) है। बस प्राप्त करें वजन से इस ऊंचाई को घटाएं, एक और आपके पास एक अधिक सटीक ऊंचाई मान होगा।

उपयोग और प्रतिक्रिया के कई महीनों के बाद संपादित करें मेरे ऐप्लिकेशन के उपयोगकर्ताओं से प्राप्त

एक बेहतर समाधान GPGGA वाक्य में सीधे ऊंचाई मूल्य प्राप्त करने के लिए है:

double GGA_ALTITUDE = 0d; 
private static final String NMEA_GGA = "$GPGGA";  
private static final int altitude_element_id = 9; 

@Override 
public void onNmeaReceived(long timestamp, String nmea) { 
    foundSats = true; 
    // check that this is an RMC string 
    if (nmea.startsWith(NMEA_GGA)) { 
     String[] tokens = nmea.split(","); 
     try { 
      // get orthometric elevation 
      String elevation = tokens[altitude_element_id];    
      if (!elevation.equals("")) { 
       Log.d("NMEA", "ortho elev: " + ortho); 
       GGA_ALTITUDE = Double.parseDouble(elevation);     
      } 
     } catch (Exception ex) { 
      Log.e("NMEA", "onNmeaReceived: " 
        + ex.getMessage()); 

      onNmeaException(ex.getMessage());    
      ex.printStackTrace(); 
     } 
    } 
} 
+0

** यदि ** फ़ील्ड भर गया है, जो इसे नहीं होना है, और ** ** ** ** वाक्य भी आउटपुट है, जो इसे या तो नहीं होना चाहिए और ** यदि ** एनएमईए आउटपुट है सब; सस्ता एंड्रॉइड डिवाइस बिल्कुल नहीं है। –

+0

हाय जान, निश्चित रूप से आप मेरे कोड में देख सकते हैं, कुछ मूल्य उस मूल्य को पढ़ने से पहले किए जाने हैं। मुझे लगता है कि सस्ता उपकरणों में, ऑननेमाइसेव इवेंट को कभी नहीं निकाल दिया जाता है;) – edestrero

+0

वास्तव में ऐसे कई डिवाइस हैं जो एनएमईए वापस नहीं लौटते हैं या केवल इसमें सीमित जानकारी लौटाते हैं। –

1

जीपीएस बस उपायों कई ज्ञात संकेतों से ज्ञात संकेत भेजा जाता है। आपके जीपीएस रिसीवर को देखते हुए अधिक उपग्रह आपकी स्थिति को उन उपग्रहों के सापेक्ष निर्धारित करेंगे।जबकि सिस्टम कुछ त्रुटि के लिए प्रवण है- पृष्ठभूमि शोर (उपग्रह संकेत अपेक्षाकृत कमजोर है और अंतरिक्ष अपेक्षाकृत शोर है), आपके रिसीवर में कम सटीक समय का टुकड़ा, जीडीओपी: परिशुद्धता का ज्यामितीय डिल्यूशन (आकाश के एक कोने में समूहीकृत सभी उपग्रह) आयनोस्फीयर बदलती ऊंचाई के कारण सिग्नल का अपवर्तन, - कुल मिलाकर यह उपग्रह से आपकी दूरी निर्धारित करने में बहुत सटीक है। ज्यामितीय रूप से आपको स्थिति प्राप्त करने के लिए कम से कम 3 उपग्रहों की आवश्यकता होती है और ऊंचाई प्राप्त करने के लिए चौथाई होता है। रिसीवर स्वायत्त अखंडता की निगरानी, ​​एक क्षेत्र और समय से पहले एक विमान भूमि IE में सटीकता की भविष्यवाणी करने प्रदान की जाती है ...

: अधिक उपग्रहों अधिक सटीकता के लिए और कुछ और अधिक जटिल रिसीवर (नहीं हमारे फोन लेकिन विशेष रूप से विमानन अनुप्रयोगों) RAIM में योगदान जीपीएस प्रणाली के लिए ऊंचाई समस्याग्रस्त है क्योंकि पृथ्वी गणितीय स्थिरता पर वक्र नहीं करती है। इसलिए जब सिस्टम जानता है कि आप उपग्रह के सापेक्ष कहां हैं, तो अब इसे पृथ्वी के गणितीय मॉडल पर ओवरले करना होगा। विमानन में अधिक सटीक जीपीएस रिसीवरों के पास बैरोमीटर के साथ पूरक होना चाहिए और कुछ रिसीवरों में एक ज्ञात सर्वेक्षण बिंदु तुलना (डब्ल्यूएएएस और एलएएएस) के कारण बढ़ी हुई स्थिति होनी चाहिए।

0

यह तब होता है जब आप स्थान प्रदाता जैसे .NETWORK_PROVIDER का उपयोग करते हैं, यह सुनिश्चित करें कि आप अपने पसंदीदा जीपीएस प्रदाता की तरह LocationManager.GPS_PROVIDER का उपयोग करें।

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