1

シェープファイル データセットがあります。いくつかの道路(線)は同じ名前を持っていますが、別の場所にあり、接続されていません。

これは、geopandas データファイルにある同じ名前の道路の写真です。

ここに画像の説明を入力

道路のチャンク (線列) 間の距離を測定して、距離がしきい値よりも高い場合に道路の名前を変更できるようにしたいと考えています。これにより、各道路には独自の名前が付けられます。

したがって、ラインストリング間の距離を見つける方法を知っていますか?

4

1 に答える 1

4

ジオパンダでは、ジオメトリは形の整ったオブジェクトです。形の整った 2 つのオブジェクト間の距離を取得するには、巧妙な名前の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)

すべて同じジオメトリであるインデックスに一致するgsため、すべてゼロを返します。gs

しかし:

gs.distance(gs.shift())

line1 から line2 まで、および line2 から line3 までの距離を示します。

0         NaN
1    0.554700
2    0.948683
dtype: float64
于 2017-12-25T22:49:38.723 に答える