線とポリゴンの交差座標


8

Python、Shapely、Fionaを使用しています...ラインシェープファイルとポリゴンシェープファイルの入力を渡し、交点とその座標の結果を取得する方法はありますか?図は正確な説明を提供します...

ここに画像の説明を入力してください

回答:


7

ポリゴンとラインストリングの交差はラインストリングであり、2つのラインストリングの交差はポイント(またはマルチポイント)であるため、ポリゴンをラインストリングに変換する必要があります-> Shapely:LinearRings

from shapely.geometry import shape
import fiona
# polygon layer
poly = fiona.open("polygons.shp")
# line layer
line = fiona.open("lines.shp")
# First Feature of the shapefiles
s_poly = shape(poly.next()['geometry'])
s_line = shape(line.next()['geometry'])
print s_poly.intersection(s_line)
LINESTRING (360.4742985178883 -286.9847328244275, 450.1982781776156 -140.6494330268984)
# transform the polygon into a LineString
ring = LineString(list(s_poly.exterior.coords))
print ring.intersection(line)
MULTIPOINT (360.4742985178883 -286.9847328244275, 450.1982781776156 
# or, more formal
from shapely.geometry.polygon import LinearRing
lring = LinearRing(list(s_poly.exterior.coords))
print lring.intersection(s_line)
MULTIPOINT (360.4742985178883 -286.9847328244275, 450.1982781776156 -140.6494330268984)

多くのポリゴンと多くのポリラインがある場合:

Multi_pol_ext = MultiLineString([list(shape(pol['geometry']).exterior.coords) for pol in fiona.open("polygons.shp")])
Multi_lines = MultiLineString([shape(line['geometry']) for line in fiona.open("lines.shp")])
Multi_pol_ext.intersection(Multi_lines)
<shapely.geometry.multipoint.MultiPoint object at 0x1091a5210>

コード内のマイナーな修正は、以前にそのような変数なしlring2た変数lringのブレースと修正を加えるだけ...グッドどこへ行く...簡単な書き込みコマンドを使用して含まfiona.openいただきありがとうございます...完了にタスクを@gene
Akhil
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.