2015-03-02 40 views
0

我有一個表示路徑的座標列表(緯度/經度)。 給定一定的半徑和另一個座標,我需要檢查座標是否在路線中(在任何點的給定半徑範圍內),以及距離路線起點的距離。查找Python中路由起點的座標距離

我看着shapely,它看起來像一個很好的解決方案。

我開始通過創建一個StringLine

from shapely.geometry import LineString 
route = LineString[(x,y),(x1,y1)...] 

然後到檢查點是我添加了一個緩衝的路線附近和路口檢查

from shapely.geometry import Point 
p = Point(x,y) 
r = 0.5 
intersection = p.buffer(r).intersection(route) 
if intersection.is_empty: 
    print "Point not on route" 
else: 
    # Calculate P distance from the begning of route 

我被困計算距離。我雖然也許在p分裂路線,並測量上半年的length,但我得到的交集結果是HeterogeneousGeometrySequence,我不知道我可以做什麼。

感謝這一個幫助。

EDIT

我相信我找到了解決

if p.buffer(r).intersects(route): 
return route.project(p) 
+0

如果你有座標的起點和終點,你可以簡單地使用距離公式:http://www.purplemath.com/modules/distform.htm – 2015-03-02 08:29:20

+0

嘿@Afaan Bilal,我不是地理位置專家,但我相信,簡單的距離計算不是100%準確的地理計算(世界是圓的......)。另外,我正在尋找一個使用某種包的完整解決方案。 – haki 2015-03-02 08:34:26

+0

我實際上是在一部手機上,所以只是給你的標題發表評論,不能看完整的來源,很多時候我們中最偉大的專家忘記了最簡單的事情,你知道,這就是爲什麼我認爲也許你只是需要計算平坦的直線距離! – 2015-03-02 08:39:10

回答

1

而非緩衝的幾何形狀,這是昂貴的和不完全的(因爲緩衝需要許多段和many other options的),只是看是否該點在距離閾值內:

if route.distance(p) <= r: 
    return route.project(p) 

另外,您可能是真實的現在你的距離單位是度數。如果你想要像米這樣的線性距離,你需要使用不同的庫來使它複雜得多。

+0

嗨@Mike T,感謝評論我已經刪除了緩衝區,以支持簡單的距離。你能重新發送一個輕量級的包(或python中的另一個實現)來將距離轉換爲米嗎? – haki 2015-03-09 09:44:57

+0

@haki這實際上是一個複雜的問題,需要大量的信息,比如區域大小和精度是否可接受。 [這個問題有幾種方法](http://gis.stackexchange.com/q/80881/1872),可能有效,但還有其他幾個沒有列出的方法,比如用Vincenty的公式或更多來計算測地線精確[GeographicLib](http://geographiclib.sourceforge.net/)。 – 2015-03-09 10:18:31

+0

謝謝@Mike T.如果在正確理解的情況下,只要我在小範圍內計算距離,分流就不會很大。我目前乘以100K來獲得米。我已經爲你鏈接的問題出演過,所以當我有機會的時候我可以做到。再次感謝。 – haki 2015-03-09 10:32:11