2014-03-19 67 views
0

我正在嘗試製作一個應用程序,指向您的位置。你按一個按鈕,它存儲GPS座標,然後計算距離和角度你需要面對的東西。然後,通過使用屏幕上的指南針圖形「指向」該位置,它將引導您回到該記住的位置。Android,使用gps和指南針指向座標

至少,它應該是。在編寫了幾個小時的代碼之後,我得出結論,由於我在過去幾年中缺乏觸發實踐,所以在某處存在邏輯錯誤。

指南針和GPS位置相當頻繁地更新。這是我的主要更新調用中的代碼,用於旋轉指南針並顯示距離的用戶界面。

public void updateUI(){ 
    double deltaX = targetLongitude - currentLongitude; 
    double deltaY = targetLatitude - currentLatitude; 
    double distance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); 
    double rotation = Math.toDegrees(Math.atan2(deltaX,deltaY)); 
    distanceTextView.setText(Double.toString(distance)); 
    rotateCompass(rotation - degreesClockwiseFromNorth); 
} 

和rotateCompass代碼:

public void rotateCompass(double degrees){ 
    degrees -= currentRotation; //calculates necessary rotation across updates 
    currentRotation += degrees; 

    matrix.postRotate(
     (float) degrees, 
     compass.getDrawable().getBounds().width()/2, 
     compass.getDrawable().getBounds().height()/2); 

    compass.setImageMatrix(matrix); 
} 

我幾乎可以肯定我的旋轉代碼工作,因爲當我更換

rotateCompass(rotation - degreesClockwiseFromNorth); 

rotateCompass(0 - degreesClockwiseFromNorth); 

它指向北方右邊還有一個真正的指南針r不管我面對的方向如何。但是當我使用前者時,它指向了一致點,但是這一點似乎遠不及目標點。 所以我得出結論,我的錯誤是要麼計算正確的角度,要麼期待gps太精確。我還沒有在我的後院進行遠距離測試,但我認爲如果這是一個GPS準確度問題,我會看到我的指南針在各處跳躍,而不是堅定地指向錯誤的方向。

感謝您的閱讀,任何建議或更正將不勝感激。

回答

1

你的數學全都搞砸了,因爲經度2度之間的距離與緯度2度不一樣。事實上,它甚至不是一個恆定的經度長度 - 它被兩極和赤道最長。改用Location.distanceTo函數。

+0

哇,你是認真的嗎?我甚至沒有考慮過像這樣的事情。在做這件事之前,我應該多做一點研究(或者更加邏輯地考慮一下)。我會試試看。 – user2816570

+0

再次查看Location對象,我看到distanceBetween函數也會返回方位。這應該解決你所有的計算問題。 –

+0

你說得對。我覺得這樣的失敗者不會先閱讀文檔。哈哈,再次感謝。 – user2816570