Rof*_*ion 7 wgs84 gps android locationmanager
您好
我试图实现一个简单的GPS跟踪器.因此被使用
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
Run Code Online (Sandbox Code Playgroud)
然后我用了
public void onLocationChanged(Location location) {
Run Code Online (Sandbox Code Playgroud)
读取当前位置高度的方法.
但我真的不知道Location.getAltitude()返回什么.该文件说它返回了海拔高度.但这是米吗?还是脚?如果我把手机放在我旁边的桌子上,这个值会在500到-500之间变化吗?
这真的有用吗???
Jon*_*nas 24
您获得的海拔高度值是以gps(WGS84) 参考椭球为单位,而不是大地水准面.
根据我自己的经验,GPS在高度值方面非常糟糕.
我在GPS状态常见问题解答中看到了这个:
GPS不会报告高于平均海平面的高度,而是GPS系统将高度与WGS84参考椭球进行比较,该椭圆可能高于或低于实际海平面.在地球的不同地区,它可以超过200米(取决于地球的质量分布).例如,佛罗里达州大地水准面的表面高出平均海平面30-40米,这意味着站在岸边将显示-30米的高度.这是正常的,而不是错误,并且由高度相对于人造参考表面而不是海平面的事实引起.如果您对此主题感兴趣,我建议您阅读平均海平面,GPS和大地水准面.
老帖子,我rekon,但有人可能仍然感兴趣.在听GPS时,您可以解析NMEA GPGGA句子(http://aprs.gids.nl/nmea/#gga),其中有大地水准面高度(WGS84椭圆体上方的大地水准面高度).只需从getAltitude返回的值中减去这个高度,即可获得更准确的高程值.
使用几个月后进行编辑,并从我的应用用户收到反馈
更好的解决方案是直接获取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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20352 次 |
| 最近记录: |