[英]Calculate the duration or expected drive time between two latitude, longitude points
[英]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.