ela*_*ich 17 android orientation android-sensors compass-geolocation
我的android应用程序显示了世界上某个特定位置的方向,因此需要获得指南针度.
这是我用来计算学位的代码:
public void getDirection() {
mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if(mySensors.size() > 0){
mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_UI);
}
else{
TextView alert = (TextView)findViewById(R.id.instruct);
alert.setText(getString(R.string.direction_not_found));
myCompassView.setVisibility(myCompassView.INVISIBLE);
}
}
private SensorEventListener mySensorEventListener = new SensorEventListener(){
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
compassBearing = (float)event.values[0];
float bearing;
bearing = compassBearing - templeBearing;
if (bearing < 0)
bearing = 360 + bearing;
myCompassView.updateDirection(bearing);
}
};
Run Code Online (Sandbox Code Playgroud)
这种方法通常有效,但有时它只是错误的北方,我需要做些什么来获得更准确的位置?
Mob*_*ion 37
我有几个建议给你:
1)您的设备可能未经过校准.为了做到这一点,以8的形式移动它(见这个).如果您没有校准设备,则不要通过将设备指向某个已知的基点方向进行一些测试并比较这些值.通常,如果未校准设备,您会发现小旋转的方位角值存在很大差异.这就是我担心的.
现在,不要忘记传感器会给你磁北,而不是真北!这种差异被称为磁场的衰减,其值随着地球磁场的变化而不时地和不时变化.此应用程序可以相对准确地为您计算一些值.我不会太担心这个,因为赤纬通常很小,但你可能正在寻找良好的精度(我目前的偏差是3º,目前).
2)远离金属物体或产生强磁场的物体.例如,如果您的手机靠近计算机或任何物理键盘,请不要进行测试!这是测试罗盘地理定位的纯毒药.一些应用程序可以测量磁场的强度(如果设备支持它).当您接近金属材料时,您将体验到更高的价值和方向的强烈变化.为了好玩,还有一些" 金属探测器 ":这个应用程序识别磁场的变化,当你是接近"金属物体"或磁性干扰设备的东西时振动.
3)当您将设备倾斜到横向模式时,请记住更新轴承.(文章是必读的!)这是因为方位角值是基于垂直轴到手机平面的旋转.将设备旋转到横向时,此值会更改+/-90º!禁用应用程序横向模式无法解决此问题!您必须通过分析另外两个轴(俯仰和滚动)周围的旋转以编程方式确定它.这不是微不足道的,但网中有一些例子.
编辑:如果您对某些代码感兴趣,请查看 Mixare,它是一个用于Android的GPL3下的开源增强现实框架.看看他们的方向,指南针地理位置和方位的代码.
PS:我与上述应用程序的创建者没有任何关联.
归档时间: |
|
查看次数: |
27756 次 |
最近记录: |