我正在开发一个android应用程序,我希望指南针指向特定的纬度经度位置,而不是通常的北部位置。任何人都可以建议如何实现这一点。我开发了一个指向北方的应用程序。
在此先感谢如何实现此目的。任何这样做的演示应用程序都会有很大的帮助。如何根据我的当前位置将指南针指向我特定的纬度经度位置?
2
A
回答
1
查看本教程。它应该让你在正确的方向Compass Tutorial 也开始在这里是个不错的选择Second Compass tutorial
1
您可以从here实现简单的指南针。 它明显指向北方,但为了将指南针指向某个位置或坐标,您可以做一些这样的事情。
在您的活动中添加此方法,它找到两个坐标之间的方位。
protected double bearing(double startLat, double startLng, double endLat, double endLng){
double longitude1 = startLng;
double longitude2 = endLng;
double latitude1 = Math.toRadians(startLat);
double latitude2 = Math.toRadians(endLat);
double longDiff= Math.toRadians(longitude2-longitude1);
double y= Math.sin(longDiff)*Math.cos(latitude2);
double x=Math.cos(latitude1)*Math.sin(latitude2)-Math.sin(latitude1)*Math.cos(latitude2)*Math.cos(longDiff);
return (Math.toDegrees(Math.atan2(y, x))+360)%360;
}
在北斗类onSensorChanged方法,做到这一点
azimuth -= bearing(yourlatitude, yourlongitude, latWhereToPoint, lngWhereToPoint);
纬度,经度 - >您当前的纬度,经度 latWhereToPoint,lngWheretoPoint - >在那里你想要点位置。
在最后你的onSensorChanged会是这样的。
@Override
public void onSensorChanged(SensorEvent event) {
final float alpha = 0.97f;
synchronized (this) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
mGravity[0] = alpha * mGravity[0] + (1 - alpha)
* event.values[0];
mGravity[1] = alpha * mGravity[1] + (1 - alpha)
* event.values[1];
mGravity[2] = alpha * mGravity[2] + (1 - alpha)
* event.values[2];
// mGravity = event.values;
// Log.e(TAG, Float.toString(mGravity[0]));
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
// mGeomagnetic = event.values;
mGeomagnetic[0] = alpha * mGeomagnetic[0] + (1 - alpha)
* event.values[0];
mGeomagnetic[1] = alpha * mGeomagnetic[1] + (1 - alpha)
* event.values[1];
mGeomagnetic[2] = alpha * mGeomagnetic[2] + (1 - alpha)
* event.values[2];
// Log.e(TAG, Float.toString(event.values[0]));
}
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity,
mGeomagnetic);
if (success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
// Log.d(TAG, "azimuth (rad): " + azimuth);
azimuth = (float) Math.toDegrees(orientation[0]); // orientation
azimuth = (azimuth + 360) % 360;
azimuth -= bearing(yourlatitude, yourlongitude, latWhereToPoint, lngWhereToPoint);
// Log.d(TAG, "azimuth (deg): " + azimuth);
adjustArrow();
}
}
}
相关问题
- 1. 如何确定我的当前位置(经度和纬度)?
- 2. 如何从当前位置指定纬度和长度值?
- 3. 当前位置,经度和纬度
- 4. 如何确定我的当前位置(经度,纬度和高度)?
- 5. 找到当前位置的经纬度
- 6. 获取当前位置的经纬度
- 7. 获取当前位置经度和纬度而不改变我的位置
- 8. 指向使用指南针的位置
- 9. 将MyLocationOverlay指南针指向特定位置
- 10. 角度麦加从当前位置与iPhone指南针
- 11. 如何获取Android中当前位置的纬度和经度?
- 12. 如何获取黑莓当前位置的经度和纬度?
- 13. 从我的当前位置计算特定位置的给定距离和角度的纬度长度
- 14. Android指南针指向我的位置而不是北部
- 15. 如何定期获取当前位置的经纬度。
- 16. 如何使用JAVA获取我当前位置的经度和纬度
- 17. 如何查找特定位置的经度和纬度?
- 18. 根据当前在servlet中的位置获取附近的经度和纬度
- 19. 如何根据当前位置设置正确的纬度和长度
- 20. 从用户指定位置获取纬度和经度
- 21. 如何找到当前位置'纬度经度
- 22. Android - 如何获取当前位置(经度和纬度)?
- 23. 如何获取当前位置(经度和纬度)
- 24. 如何让Google地图根据纬度/经度显示位置
- 25. 如何根据位置纬度经度限制用户登录
- 26. 获取当前位置的纬度和经度的问题
- 27. 指南针指针位置错误
- 28. 无法获得Android当前位置的纬度和经度
- 29. 查找当前位置的经度和纬度
- 30. 当前位置的精确纬度和经度android
似乎并没有这些例子回答这个问题。这些只创建一个指向北方的指南针,而不是自定义位置,不是? – rodi