38

頂点の座標のリスト = [(x1,y1), (x2,y2), (x3,y3),...] と point(x,y) を持つポリラインがあります。Shapely ではgeometry1.distance(geometry2)、2 つのジオメトリ間の最短距離を返します。

>>> from shapely.geometry import LineString, Point
>>> line = LineString([(0, 0), (5, 7), (12, 6)])  # geometry2
>>> list(line.coords)
[(0.0, 0.0), (5.0, 7.0), (12.0, 6.0)]
>>> p = Point(4,8)  # geometry1
>>> list(p.coords)
[(4.0, 8.0)]
>>> p.distance(line)
1.4142135623730951

しかし、ポイント(x、y)に最も近いライン上のポイントの座標も見つける必要があります。LineString上記の例では、これはから 1.4142135623730951 単位離れたオブジェクト上のポイントの座標ですPoint(4,8)。メソッドdistance()は、距離を計算するときに座標を持っている必要があります。このメソッドからそれを返す方法はありますか?

4

2 に答える 2

55

あなたが説明しているGIS用語は線形参照であり、Shapelyにはこれらの方法があります

# Length along line that is closest to the point
print(line.project(p))

# Now combine with interpolated point on line
p2 = line.interpolate(line.project(p))
print(p2)  # POINT (5 7)

別の方法は、次を使用することnearest_pointsです。

from shapely.ops import nearest_points
p2 = nearest_points(line, p)[0]
print(p2)  # POINT (5 7)

これは、線形参照手法と同じ答えを提供しますが、2 つのポリゴンなど、より複雑なジオメトリ入力から最も近い点のペアを決定できます。

于 2014-06-26T20:58:23.833 に答える