首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给定高度和压力下密封层压力的计算

给定高度和压力下密封层压力的计算
EN

Stack Overflow用户
提问于 2015-03-01 09:45:22
回答 3查看 2.2K关注 0票数 5

我正在写一张显示海拔高度的表脸。高度用SensorManager.getAltitude(seaLevelPressure, currentPresure)计算。

但是为了初始化这一点,我需要海平面上的压力。不幸的是,没有SensorManager.getSeaLevelPressure(currentPressure,currentAltitude)

为此,我找到了以下公式(参见http://rechneronline.de/barometer/ )

代码语言:javascript
运行
复制
private float calcSeaPressure(float pressure, int altitude) {
  float temperature = 9 + 273.15f;
  float tempGradient = 0.0065f;

  float v3 = temperature + tempGradient * altitude;
  float sealevelPressure = (float) (pressure / Math.pow((1 - tempGradient * altitude / v3), .03416f / tempGradient));
  sealevelPressure = (float) Math.round(sealevelPressure * 100) / 100;
  return sealevelPressure;
}

但是,该算法与SensorManager.getAltitude中的算法似乎不太吻合。如果我这样做了:

代码语言:javascript
运行
复制
public void setCurrentAltitude(int currentAltitude) {
  sealLevelPressure = calcSealevel(currentAltitude,currentPresure);
  altitude = SensorManager.getAltitude(seaLevelPressure, currentPresure)
}

计算的高度与给定的currentAltitude不同。对于小值(<1000米),差异是可以接受的。但以4000米为例,差距是250米,这是不可接受的。

现在,我的问题是:如何计算海平面,以便setCurrentAltitude()不报告不同的值?

或者您知道其他Java类可以用于此吗?记住,这些值应该计算出来!

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-01 10:27:11

如果您是从一个高度(毕竟您有setCurrentAltitude方法)校准,那么这是一种技术:

代码语言:javascript
运行
复制
public void setCalibrationAltitudeAndPressure(float calibrationAltitude, float currentPressure) {
   this.calibrationAltitude = calibrationAltitude;
   this.calibrationPressure = currentPressure;
}

public float getCurrentAltitude(float currentPressure) {
    float altitudeDifference =
            sensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, currentPressure) -
            sensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, calibrationPresure);
    return calibrationAltitude + altitudeDifference;
}

现在你不需要关心海平面压力了。

校准

你需要一个校准高度,你可以使用全球定位系统。它的高度不太可能是准确的(见Android: How to get accurate altitude?),但您可以使用lat和lat从这项服务获得高度:https://developers.google.com/maps/documentation/elevation/,但这对在飞机上使用该应用程序的人是不好的!

但是,如果你正为此打一个发球,那么你最好从一个服务得到准确的海平面压力:http://www.worldweatheronline.com/api/marine-weather-api.aspx

票数 2
EN

Stack Overflow用户

发布于 2015-03-01 10:16:40

关于getAltitude()的文档说:

通常,大气压是从TYPE_PRESSURE传感器读取的。海平面的压力必须知道,通常可以从附近的机场数据库中检索到。如果未知,您可以使用PRESSURE_STANDARD_ATMOSPHERE作为近似值,但绝对高度并不准确。 若要计算高度差异,必须计算两点高度之间的差异。如果你不知道海平面的高度,你可以用PRESSURE_STANDARD_ATMOSPHERE代替,考虑到通常所涉及的压力范围,这会带来很好的结果。

所以您可以使用PRESSURE_STANDAR_ATMOSPERE,但是它的值不能是“正确”的值。我的建议是使用Google融合定位api,以获得更精确的值(主要来自GPS)。您可以检查您的手表是否有一个GPS内的代码,如果有,直接使用可穿戴位置API,或要求定位到您的手机否则。

票数 1
EN

Stack Overflow用户

发布于 2015-03-19 19:54:27

我现在在阿尔卑斯山的滑雪假期中,可以验证传感器的准确性和高度的计算。我使用了以下公式

代码语言:javascript
运行
复制
sensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, currentPressure) 
- sensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, calibrationPresure);

这个很好用!准确度为+/-30m。起点在1200米左右,我上升到2700米。

我现在很自豪拥有一种新的高度计:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28792094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档