2012-02-20 22 views
35

tôi cần để có được một phép đo chính xác về độ cao chỉ sử dụng GPS.Android: Làm thế nào để có được độ cao chính xác?

tôi đã cố gắng Location.getAltitude(), nhưng đó là khủng khiếp không chính xác. Bạn có lời khuyên nào không?

+0

Bản sao có thể có của [Nhận độ cao theo kinh độ và vĩ độ trong Android] (http://stackoverflow.com/questions/1995998/get-altitude-by-longitude-and-latitude-in-android) –

Trả lời

44

Có hai vấn đề với việc sử dụng độ cao của một GPS điện thoại thông minh/máy tính bảng:

  1. có chiều cao là độ cao trên mặt ellipsoid tham khảo WGS84. Nó không phải là độ cao trên mặt đất hoặc mực nước biển. Dưới đây là thông tin chi tiết hơn về điều đó: http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=10915. Lỗi này có thể được sửa chữa; đây là một mô tả làm thế nào để làm điều đó bằng tay: http://www.unavco.org/edu_outreach/tutorial/geoidcorr.html. Bài báo trên web liên kết với một máy tính để có được chiều cao Geoid để sửa; Tôi không biết liệu có một dịch vụ web có sẵn cho tính toán này hay không.
  2. GPS độ cao là terribly không chính xác cho máy thu GPS tương đối rẻ. Dưới đây là một bài viết về rằng: http://gpsinformation.net/main/altitude.htm. Một phương pháp để đối phó với loại không chính xác này là lọc dữ liệu độ cao. Tôi đã sử dụng một cấu trúc dữ liệu mảng hình tròn để nhớ số cuối cùng (tôi đã sử dụng 4) độ cao và tính mức trung bình. Điều này sufficed để có được một đọc tương đối chính xác của tốc độ thẳng đứng cho ứng dụng của tôi.
+0

Cảm ơn. Vì vậy, tôi đoán tôi không thể có được độ cao chính xác trừ khi tôi có truy cập internet trong ứng dụng của tôi để sửa cho chiều cao Geoid. – ask

+0

Bạn có thể làm điều đó ngoại tuyến. Bạn chỉ cần tính toán sự khác biệt giữa ellipsoid và mực nước biển. Đó là không tầm thường. Xem câu trả lời này: https://stackoverflow.com/a/12811478/1561404 –

1

Có nhiều cách khác để có được độ cao hơn bằng GPS. Bạn có thể sử dụng thước đo nhưng không có nhiều thiết bị có cảm biến khí áp (chỉ có cảm biến mới). Tôi sẽ khuyên bạn nên sử dụng một dịch vụ web để có được dữ liệu mong muốn.

Đây là một câu hỏi mà sẽ giúp bạn qua: Get altitude by longitude and latitude in Android

2

Một cách khác sẽ được phân tích chuỗi NMEA. $GPGGA sentence đã chứa dữ liệu độ cao đã sửa ở trên mực nước biển.

Vì vậy, chỉ cần tạo một người biết lắng nghe để NMEA-strings cho LocationManager của bạn và phân tích các thông điệp:

private GpsStatus.NmeaListener mNmeaListener = new GpsStatus.NmeaListener() { 
    @Override 
    public void onNmeaReceived(long timestamp, String nmea) { 
     parseNmeaString(nmea); 
    } 
}; 

public void registerLocationManager(Context context) { 
     mLocationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); 
     mLocationManager.addNmeaListener(mNmeaListener); 
} 

private void parseNmeaString(String line) { 
     if (line.startsWith("$")) { 
      String[] tokens = line.split(","); 
      String type = tokens[0]; 

      // Parse altitude above sea level, Detailed description of NMEA string here http://aprs.gids.nl/nmea/#gga 
      if (type.startsWith("$GPGGA")) { 
       if (!tokens[9].isEmpty()) { 
        mLastMslAltitude = Double.parseDouble(tokens[9]); 
       } 
      } 
     } 
    } 

Bạn có thể thay thế các độ cao của đối tượng Location cuối cùng nhận được thông qua một người biết lắng nghe vị trí, hoặc phân tích toàn bộ vị trí mới thông qua NMEA.

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