2010-06-06 68 views
3

我正在構建基於地理位置的應用程序,我試圖找出一種方法來讓我的應用程序在用戶面對指定位置的方向時實現(特定長/ 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米的三角形?

感謝,

回答

0

問題是,無論我在java中輸入什麼,都會在Radians中輸出,Trick將所有內容都改爲Radians,然後輸出以弧度表示,轉換爲度數。

1

長途:http://www.dtcenter.org/met/users/docs/write_ups/gc_simple.pdf 但對於短距離你可以試試簡單的2D使用的數學模擬「經典」指南針:http://en.wikipedia.org/wiki/Compass#Using_a_compass。例如,您可以從A點和B點獲取像素座標,並找出連接這些點和垂直線的線之間的角度。

還你或許應該考慮磁偏角:http://www.ngdc.noaa.gov/geomagmodels/Declination.jsp

//編輯:

我欲給直觀的解決方案。然而,計算來自long/lat的屏幕座標並不容易,所以你可能應該使用鏈接中提供的公式。

+0

我並不是真的想繪製一個指南針,所以我更想做一個檢查,看看我面對的方向是否與該位置的方向相同。getbearing()不會工作,因爲它贏得了'當我不移動時更新。假定用戶是靜止的。 – Skizit 2010-06-06 20:07:43

+0

剛好在這種情況下沒有用處,請改用getOrientation()。 z軸上的旋轉是方位角。但是讀取設備方向可能是這個問題最容易的部分。 – 2010-06-06 21:36:49

+0

是的,Android知道我在哪裏,另一個位置,它知道我的方位,但我希望它能夠識別我的方位與位置相同的方向。我會怎麼做呢? – Skizit 2010-06-06 21:58:18

0

也許它,因爲我不知道的JavaScript,但不要你必須做一些像

currlat = Math.toRadians(currlat);

真正改變currlat值爲弧度。

+0

這是java。不是JAvascript。另外我已經說過我已經嘗試過Radians + Degree轉換。 – Skizit 2010-06-10 15:20:30

+0

好的。在Math.toRadians上面粘貼的代碼(currlat)實際上並不會改變currlat的價值。只是爲我清理它,對不起。 – 2010-06-10 16:06:39