Tọa độ đường thẳng so với đa giác


8

Tôi đang làm việc với Python, Shapely và Fiona ... Có cách nào tôi có thể đưa vào đầu vào của một shapefile dòng và một shapefile đa giác, và nhận được kết quả của các điểm giao nhau và tọa độ của chúng không? Hình minh họa cung cấp một mô tả chính xác ....

nhập mô tả hình ảnh ở đây

Câu trả lời:


7

Giao điểm của Đa giác và LineString là LineString và giao điểm của hai LineStrings là Điểm (hoặc MultiPoint), vì vậy bạn cần chuyển đổi Đa giác của mình thành LineString -> 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)

Nếu bạn có nhiều đa giác và nhiều polylines:

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>

Sửa lỗi nhỏ trong mã chỉ bao gồm thêm một dấu ngoặc và sửa lỗi lring biến trước đó là lring2 mà không có biến nào như vậy ... Tốt để đi ... Một lệnh viết đơn giản sử dụng fiona.open hoàn thành nhiệm vụ ... Cảm ơn bạn @gene
Akhil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.