简体   繁体   English

Google地图上没有位置具有海拔高度(根据location.hasAltitude())

[英]No location on Google Maps has altitude (according to location.hasAltitude())

I am creating a basic Hiker's Watch ap p that provides the user his/her location info like (longitude, latitude, altitude, etc). 我正在创建一个基本的远足者手表ap p,向用户提供他/她的位置信息,例如(经度,纬度,高度等)。

However, the altitude displayed in the logs is always 0.0 (in spite of assigning some non zero value for altitude in the Extended Controls). 但是,日志中显示的海拔高度始终为0.0 (尽管在扩展控件中为海拔高度分配了一些非零值)。

According to, 根据,

locationProvider.supportsAltitude()
location.hasAltitude()

the device supports altitude but no location has any altitude. 设备支持高度,但是没有位置具有任何高度。

Even Mount Everest (according to co-ordinates) "does not have" altitude. 甚至珠穆朗玛峰(根据坐标)也没有“海拔”高度。

I am getting other location details like Latitude, Longitude . 我正在获取其他位置详细信息,例如纬度,经度

What can I do? 我能做什么?

GPS altitude can have much error rates for cheaper devices. 对于更便宜的设备,GPS高度的误码率可能很高。

You can also alternatively try the SensorManager to approximate altitude using the pressure sensors which could have some inaccuracies. 您还可以选择使用压力传感器来尝试SensorManager来估计高度,这可能会有一些误差。

SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE,pressure)

Something like this: 像这样:

public class MainActivity extends AppCompatActivity {

  private SensorManager sensorManager;
  private Sensor pressureSensor;
  private SensorEventListener sensorEventListener = new SensorEventListener() {

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
      float[] values = sensorEvent.values;
      flat altitude = SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, values[0]);

    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {
    }
  };

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    pressureSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
  }

  @Override
  protected void onResume() {
    super.onResume();
    sensorManager.registerListener(sensorEventListener, pressureSensor, SensorManager.SENSOR_DELAY_UI);
  }

  @Override
  protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(sensorEventListener);
  }
}

Source: Android Docs 资料来源: Android文件

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM