我正在開發一個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. 角度麥加從當前位置與iPhone指南針
- 9. 如何獲取黑莓當前位置的經度和緯度?
- 10. 如何獲取Android中當前位置的緯度和經度?
- 11. 從我的當前位置計算特定位置的給定距離和角度的緯度長度
- 12. 如何定期獲取當前位置的經緯度。
- 13. 如何使用JAVA獲取我當前位置的經度和緯度
- 14. 如何查找特定位置的經度和緯度?
- 15. 根據當前在servlet中的位置獲取附近的經度和緯度
- 16. 從用戶指定位置獲取緯度和經度
- 17. Android - 如何獲取當前位置(經度和緯度)?
- 18. 如何根據位置緯度經度限制用戶登錄
- 19. 如何讓Google地圖根據緯度/經度顯示位置
- 20. 獲取當前位置的經度和緯度
- 21. Mapkit當前位置的緯度和經度
- 22. 開放層當前位置的經度和緯度
- 23. 轉換「當前位置」的語言或通過經度/緯度
- 24. 計算當前位置的經度和緯度
- 25. 如何獲取當前位置的經緯度?
- 26. 如何檢查指南針標題是否指向特定位置?
- 27. 如何根據Android中給定的經度和緯度導航到位置
- 28. 位置的經度和緯度
- 29. JSON經度緯度最近的位置
- 30. 獲取當前位置經度和緯度在android
似乎並沒有這些例子回答這個問題。這些只創建一個指向北方的指南針,而不是自定義位置,不是? – rodi