2017-12-25 76 views
0

私はshapefileデータセットを持っています。いくつかの道路(線)は同じ名前ですが、異なる場所にあり、接続されていません。ここでLinestring Geopandasとの距離

は私のgeopandasで同じ名前を持つ道路の絵であるデータ・ファイル:

enter image description here

を私は名前を変更できるようにするには、道路のチャンク(ラインストリング)の間の距離を測定できるようにしたいと思いますその距離が閾値よりも高い場合には、各道路がそれ自身の一意の名前を有するように道路を選択する。

したがって、線ストリング間の距離の見方は分かりますか?

+0

'line1.distance(LINE2)' –

答えて

3

geopandasでは、ジオメトリは滑らかなオブジェクトです。任意の二つの形の良いオブジェクト間の距離を取得するには、巧妙という名前distanceメソッドを使用します。

from shapely.geometry import Point, LineString 
import geopandas 

line1 = LineString([ 
    Point(0, 0), 
    Point(0, 1), 
    Point(1, 1), 
    Point(1, 2), 
    Point(3, 3), 
    Point(5, 6), 
]) 

line2 = LineString([ 
    Point(5, 3), 
    Point(5, 5), 
    Point(9, 5), 
    Point(10, 7), 
    Point(11, 8), 
    Point(12, 12), 
]) 

line3 = LineString([ 
    Point(9, 10), 
    Point(10, 14), 
    Point(11, 12), 
    Point(12, 15), 
]) 

print(line1.distance(line2)) 
> 0.5547001962252291 

をあなたはgeopandas GeoSeries/GeoDataFrameを持っている場合、あなたはそれについて少し賢くする必要があります。

gs = geopandas.GeoSeries([line1, line2, line3]) 
gs.distance(gs) 

戻り値すべてゼロ、なぜなら全て同じジオメトリであるインデックス、最大gsgsにもライン。

しかし:

gs.distance(gs.shift()) 

は、LINE2にあなたLINE1からの距離を与え、LINE3にLINE2:

0   NaN 
1 0.554700 
2 0.948683 
dtype: float64 
+0

うわー!どうもありがとう !!これは素晴らしい答えです。 – james