我正在構建基於地理位置的應用程序,我試圖找出一種方法來讓我的應用程序在用戶面對指定位置的方向時實現(特定長/ lat co-ord)。我有數學計算,我只有三角構造。在地圖上構建基於座標的三角形
// UPDATE
所以我想通了一個很好的有點...
下面是發生在一個經度/緯度值,並試圖計算三角形找到一個點的方法700米外,一個向左+右。然後它會使用這些來構造三角形。它計算正確的經度,但是緯度在東非海岸的某個地方結束。 (我在愛爾蘭!)。
public void drawtri(double currlng,double currlat, double bearing){
bearing = (bearing < 0 ? -bearing : bearing);
System.out.println("RUNNING THE DRAW TRIANGLE METHOD!!!!!");
System.out.println("CURRENT LNG" + currlng);
System.out.println("CURRENT LAT" + currlat);
System.out.println("CURRENT BEARING" + bearing);
//Find point X(x,y)
double distance = 0.7; //700 meters.
double R = 6371.0; //The radius of the earth.
//Finding X's y value.
Math.toRadians(currlng);
Math.toRadians(currlat);
Math.toRadians(bearing);
distance = distance/R;
Global.Alat = Math.asin(Math.sin(currlat)*Math.cos(distance)+
Math.cos(currlat)*Math.sin(distance)*Math.cos(bearing));
System.out.println("CURRENT ALAT!!: " + Global.Alat);
//Finding X's x value.
Global.Alng = currlng + Math.atan2(Math.sin(bearing)*Math.sin(distance)
*Math.cos(currlat), Math.cos(distance)-Math.sin(currlat)*Math.sin(Global.Alat));
Math.toDegrees(Global.Alat);
Math.toDegrees(Global.Alng);
//Co-ord of Point B(x,y)
// Note: Lng = X axis, Lat = Y axis.
Global.Blat = Global.Alat+ 00.007931;
Global.Blng = Global.Alng;
//Co-ord of Point C(x,y)
Global.Clat = Global.Alat - 00.007931;
Global.Clng = Global.Alng;
}
從調試我已經確定問題出在這裏完成緯度的計算..
Global.Alat = Math.asin(Math.sin(currlat)*Math.cos(distance)+
Math.cos(currlat)*Math.sin(distance)*Math.cos(bearing));
我不知道爲什麼,雖然不知道如何解決它。我是從這個網站的公式..
http://www.movable-type.co.uk/scripts/latlong.html
看來正確的,我測試過多次的東西......
我已經試過轉換爲弧度,然後計算後回到度等等
任何人都有任何想法如何解決這個方法,以便它將映射在我目前的方向,從我目前的位置只有700米的三角形?
感謝,
我並不是真的想繪製一個指南針,所以我更想做一個檢查,看看我面對的方向是否與該位置的方向相同。getbearing()不會工作,因爲它贏得了'當我不移動時更新。假定用戶是靜止的。 – Skizit 2010-06-06 20:07:43
剛好在這種情況下沒有用處,請改用getOrientation()。 z軸上的旋轉是方位角。但是讀取設備方向可能是這個問題最容易的部分。 – 2010-06-06 21:36:49
是的,Android知道我在哪裏,另一個位置,它知道我的方位,但我希望它能夠識別我的方位與位置相同的方向。我會怎麼做呢? – Skizit 2010-06-06 21:58:18