2012-06-23 31 views
5

Tôi đang thử nghiệm một ứng dụng Android ghi lại vị trí (lat/long/alt). Tôi đang chạy ứng dụng trên điện thoại Samsung GTS5830 chạy Android 2.2.1Độ cao GPS của Android có chính xác không do không bao gồm chiều cao địa lý không?

Tôi đọc ở đây và ở đó độ cao GPS thường không chính xác do trái đất không hoàn toàn hình cầu. Tại vị trí của tôi, ví dụ: the geoid's height là 52 mét.

Sự hiểu biết của tôi là chiều cao này sẽ được trừ khỏi độ cao GPS "thuần túy". Điều này sẽ có ý nghĩa cho vị trí của tôi là:

- altitude from GPS phone: 535 m 
- geoid altitude: 52 m 
- altitude from phone's GPS minus geoid height: 482m 

- correct atlitude: 478 m 

482 là đủ gần để thật cho tôi để theo dõi độ cao khi đi bộ đường dài

  1. là công thức trên của chiều cao GPS trừ chiều cao của geoid đúng ?
  2. Tôi có đúng không cho rằng android không được bao thanh toán ở độ cao của geoid khi trả về độ cao GPS?
  3. Nếu điều trên là đúng, nó có giữ cho tất cả các phiên bản của Android không?

Đây là mã tôi sử dụng để có được các tọa độ GPS:

public class HelloAndroid extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d("main", "onCreate"); 
     setupGps(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    LocationListener locationListener; 
    LocationManager lm; 

    void setupGps() { 
     Log.d("gps", "Setting up GPS..."); 
     locationListener = new MyLocationListener(); 
     lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 5, 
       locationListener); 

     Log.d("gps", 
       "GPS supports altitude: " 
         + lm.getProvider(LocationManager.GPS_PROVIDER) 
           .supportsAltitude()); 
     Log.d("gps", "Finished setting up GPS."); 
    } 

    static class MyLocationListener implements LocationListener { 

     public void onLocationChanged(Location location) { 
      Log.d("gps", "long: " + location.getLongitude() + ", lat: " 
        + location.getLatitude() + ", alt: " 
        + location.getAltitude()); 
     } 
    } 
} 

Trả lời

6

Câu trả lời cho cả ba câu hỏi của bạn là có.

Độ cao bạn nhận được từ GPS là chiều cao phía trên elliptos WGS84 tính bằng mét, gần bằng bề mặt trái đất. Tôi biết rằng vì tôi đã phát triển phần mềm Android để sử dụng nó.

Chỉnh sửa phải được áp dụng để chuyển đổi hình thành chiều cao trên mực nước biển trung bình hoặc độ cao như thường được biết. Lưu ý rằng điều này có thể khác với độ cao được báo cáo bởi thang đo được đặt ở áp suất hiện tại ở mực nước biển trung bình bởi vì máy đo thực sự đo áp suất không khí, nhưng áp suất không khí không chỉ là một hàm chiều cao; nó cũng là một chức năng của mật độ không khí và nhiệt độ, vì vậy một altimeter cho thấy một xấp xỉ. Hiệu ứng này không được nhìn thấy bằng GPS.

Mô hình hấp dẫn trái đất 2008 (EGM2008) ánh xạ sự khác biệt về mực nước biển trung bình với ellipsoid như một hàm kinh độ và vĩ độ. Thông tin chi tiết đang ở đây:

http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/egm08_wgs84.html

Một mô hình kém chính xác hơn mà sử dụng ít dữ liệu được gọi EGM96 cũng có sẵn. Google cả hai đều hiểu những điều này tốt hơn.

+0

Ngoài ra, câu trả lời cho cả ba câu hỏi của bạn là có. – davtom

+0

đặt nhận xét đó vào câu trả lời của bạn và tôi sẽ đánh dấu câu trả lời được chấp nhận này. –

+0

Tôi đã làm điều đó, cảm ơn. – davtom

4

Sai sót trong độ cao có thể cũng không được xuống GPS và tách độ cao geoid.

Giá trị độ cao được trả lại bởi bất kỳ bộ nhận GPS nào luôn là giá trị chính xác nhất. Tôi thường thấy báo cáo tòa nhà văn phòng của tôi rằng nó đang di chuyển ở độ cao giữa -200 và +750 mét. Một lý do cơ bản là không thể có được sự lan truyền thậm chí của các vệ tinh theo hướng cao độ; chúng sẽ luôn ở trên bạn, và nếu có bất kỳ sự che khuất nào của bầu trời ở độ cao thấp, chúng sẽ nằm trong hình nón phía trên bạn. Trong các hướng X và Y sẽ luôn có, giả sử một chế độ xem bầu trời tốt, các vệ tinh sẽ lan truyền trái và phải; ở phía trước và phía sau người nhận. Sự lan truyền này làm tăng độ chính xác của giải pháp vị trí.

+0

"-200 đến +750 mét": Tôi không tin một giây rằng máy thu GPS không chính xác với độ cao trừ khi các biến thể đó phù hợp với độ chính xác của phép đo, nhưng ngay cả âm thanh cũng không hợp lý. –

+0

Đối với ăng-ten treo tường (che khuất hơn 50% bầu trời), vào những thời điểm nhất định trong ngày khi chòm sao có thể nhìn thấy có hình dạng không thuận lợi và thực hiện khởi động lạnh (nghĩa là điều kiện hoạt động thù địch). đã thấy. Những giá trị này đã được nhìn thấy với SiRFStar-2, SiRFStar-3, Ublox 5 và Ublox 6. Nói chung độ cao sẽ kéo dài đến +/- 75 mét sau một vài phút hoạt động liên tục. –

5

Không hoàn toàn đơn giản - Android API đã thay đổi hoặc có lỗi. Tôi có hai thiết bị Android - điện thoại 'chung' (Android 2.3.6) và Nexus 7 (Android 4.x).

Trên điện thoại, getAltitude() đưa ra câu trả lời phù hợp với độ cao thực tế AMSL của tôi (ví dụ: được sửa cho geoid). Trên Nexus 7, độ cao được trả về là không được sửa chữa. Tài liệu cho số API không chỉ định tài liệu nào được trả về - vì vậy theo một nghĩa nào đó, cả hai đều là 'đúng'.

Cả hai thiết bị dường như có phong nha GPS modules - thông báo $GPGGA NMEA hiển thị cả độ cao chính xác và chỉnh sửa địa lý. Vì vậy, có vẻ như người ta phải phân tích các thông điệp để có được độ cao chính xác và phương pháp getAltitude() là không đáng tin cậy.

Các vấn đề liên quan