2016-07-27 68 views
0

如果我有兩個已知位置和已知速度,如何計算距離d(單位爲公里)內的當前位置?在給定兩個點的某個時間找到gps位置?

例如,給定:在ES4236

兩個GPS位置:

37.783333, -122.416667 # San Francisco 
32.715, -117.1625  # San Diego 

在一條直線上在1公里/分鐘旅行(忽略高度)

如何能我發現GPS在一定距離處座標?類似的SO questiongeopy中使用VincentyDistance根據方位和距離計算下一個點。

我猜,更具體:

  • 如何計算使用geopy兩個GPS點之間的關係呢?

  • 使用VincentyDistance通過方位和距離獲取下一個GPS點,我怎麼知道我是否已經到達目的地,或者我應該繼續前進?它不需要完全在目的地被認爲是到達目的地。也許任何半徑0.5公里的地方被認爲是「抵達」。

import geopy 

POS1 = (37.783333, -122.416667)  # origin 
POS2 = (32.715, -117.1625)   # dest 

def get_current_position(d): 
    # use geopy to calculate bearing between POS1 and POS2 
    # then use VincentyDistance to get next coord 

    return gps_coord_at_distance_d 

# If current position is within .5 km of destination, consider it 'arrived' 
def has_arrived(curr_pos): 
    return True/False 

d = 50  # 50 km 
print get_current_position(d) 
print has_arrived(get_current_position(d)) 
+0

Duplicates http://stackoverflow.com/questions/24427828/calculate-point-based-on-distance-and-direction – James

+0

@James啊謝謝,但它計算的距離向北1km(軸承),而不是邁向第二點。此外,我無法在geopy中找到任何關於'VincentyDistance'的文檔,所以我很難看出它是否可以基於兩點來計算。 – tempomax

回答

0

好吧,想我會再回到這個問題,並給我最好的拍攝因爲它沒有看到任何其他的解決方案。不幸的是,我現在無法測試代碼,但我相信使用geopy和geographiclib可以解決您的問題。開始。

從終端(可能使用sudo)

pip install geographiclib 
pip install geopy 
與Python

現在

獲取當前位置

import geographiclib 
from geopy import geopy.distance 

# Get the first azimuth, which should be the bearing 
bearing = geographiclib.WGS84.Inverse(37.783333, -122.416667, 32.715, -117.1625)[2] 


# Now we use geopy to calculate the distance over time 
dist = geopy.distance.VincentyDistance(kilometers = 1) 
san_fran = geopy.Point(37.783333, -122.416667) 

print dist.destination(point=san_fran, bearing=bearing) 

已經來臨

def has_arrived(d): 
    return geopy.distance.vincenty(curr_pos, (32.715, -117.1625)).kilometers < .5 

就像我說的,我不幸的可以這不是測試,但我相信這是正確的。有可能在軸承計算方面存在一些單位差異:it calculates bearing off of North as seen here。對不起,如果這不完全正確,但正如我所說,因爲我沒有收到迴應,因爲我想我可能會扔我所知道的。

+0

謝謝!代碼中有一些小錯誤,但總的來說你是正確的。你認爲你可以用'has_arrived()'來幫忙嗎?給定距離(即km = 100),如何確定它是否在目標半徑內?另外,我可以使用VicentyDistance以米爲單位而不是km來指定嗎? – tempomax

+0

不幸的是,你不能指定米。我會添加has_arrived到答案 – James

+0

有些事情是錯的。 'dist.destination(point = san_fran,bearing = bearing)'給我指向了錯誤方向的下一個gps點。如果我將其更改爲'des.destination(point = san_diego,bearing = bearing)',那麼它會立即跳轉到目的地。 – tempomax

相關問題