簡體   English   中英

如何使用速度和時間來計算下一次的緯度和經度

[英]how to use of speed and time to calculate next time's latitude and longitude

我正在嘗試根據速度獲取經度和經度,並嘗試使用此JAVA代碼來開始基本points.am。

我的目標是基本開始緯度,經度點A的速度為0,然后找到定位點B,即30秒后以32速度,下一個定位點是18.473993,79.14167,然后是點c..etc。

這是我的代碼:

      public class DemoCallLatLng {
        public static void main(String s[]){        
        double speed = 32.5;//random speed
        double time = 0.5;//30seconds
        double lat1 = 18.4742516;//start latitude point
        double lon1 = 79.14007;//start longitude point
        double distance = speed * time;//distance calculation
        double lon2;
        double lat2;
        lat2 =asin(Math.sin(lat1)*Math.cos('K')+Math.cos(lat1)*Math.sin('K')*Math.cos('K'))
        double dlon=atan2(Math.sin(tc)*Math.sin('K')*Math.cos(lat1),Math.cos('K')-Math.sin(lat1)*Math.sin(lat2))
        lon2=mod( lon1-dlon +Math.PI,2*Math.PI )-Math.PI;
        System.out.println(lat2+" : "+dlon+" : "+lon2);
    }
}

如果您不知道前進的方向,則只能通過知道距離和速度才能找到新的位置。 (速度是一個標量)。

您將需要穩定地保持速度(將x和y分量分開)。

如果您知道方向(也許是方向角θ),甚至可以將速度分解為x和y分量。

速度X =速度* cos(θ)

速度Y =速度* sin(θ)


當您知道速度的兩個分量時,可以使用以下公式。

newPositionX = oldPositionX + velocityX *時間

newPositionY = oldPositionY + velocityY *時間

速度分量應具有適當的單位(按拉長比例縮放)


只要確保θ是您要前往的方向與北方方向之間的角度

希望這可以幫助。
祝好運。

您的代碼和所有其他答案都產生相同的基本錯誤。

sin()和cos()需要以弧度為單位的角度,而不是度數。

因此,在使用前將緯度和經度轉換為弧度

double latRad = Math.toRadians(latitude);

還有很多其他錯誤:

  • 速度以米/秒為單位。 因此,請始終在公式中使用該單位,如果輸入的單位是英里或公里/小時,請先進行轉換。
  • time:時間單位是1秒,而不是1分鍾:請在代碼中更正。

  • 如果您的變量不是以SI單位(國際標准單位制:米,秒等),則應使用包含單位名稱的名稱進行命名:例如speedKmh或numMinutes

  • 要從給定位置計算位置,您需要一個以度數(0-360)為單位的方向。 因此這是附加輸入。 在您的代碼中,這是變量tc:tc就是方向。 它可以源自“真正的路線”一詞。 這也應該以弧度為單位。 但是可能是一個數學角(東= 0,逆時針),而地理角是北= 0°,順時針升高。

  • 您想用sin('K')實現什么??。 您應該從學校記住,sin()需要一個角度作為參數,而不是字母。

  • -

最后,您應該為該代碼找到一個更好的來源,即從中獲取代碼的來源,還有另外兩個更好的答案,隨時可以使用。 看那里,扔掉當前的方法。

您的代碼有幾個語法錯誤

以下是正確的代碼,僅剩1個問題, tc是什么,我使用constant = 11只是為了運行代碼

public class DemoCallLatLng {
    public static void main(String s[]){        
    double speed = 32.5;//random speed
    double time = 0.5;//30seconds
    double lat1 = 18.4742516;//start latitude point
    double lon1 = 79.14007;//start longitude point
    double distance = speed * time;//distance calculation
    double lon2;
    double lat2;

        lat2 =Math.asin(Math.sin(lat1)*Math.cos('K')+Math.cos(lat1)*Math.sin('K')*Math.cos('K'));
        double dlon=Math.atan2(Math.sin(11)*Math.sin('K')*Math.cos(lat1),Math.cos('K')-Math.sin(lat1)*Math.sin(lat2));
        lon2=( lon1-dlon +Math.PI % 2*Math.PI )-Math.PI;
        System.out.println(lat2+" : "+dlon+" : "+lon2);
    }
}

您的錯誤是:

1- asin ==> Math.asin()

2- atan2 ==> Math.atan2()

3-沒有這種方法mod() ,如果u是平均模量,在Java中是% so mod( lon1-dlon +Math.PI,2*Math.PI ) ==> lon1-dlon +Math.PI % 2*Math.PI

我不確定是否錯過了其他語法錯誤,但主要是他們缺少了Math. mod()函數,最后正如我在第1行告訴您的tc變量

double dlon=atan2(Math.sin(tc)*...

這段代碼現在生成輸出,但是我認為由於使用11而不是tc而導致不正確

輸出:

-0.7347912647318792 : 0.4902491126709713 : 79.094647327649

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM