Chuyển đổi Shapely MultiPolygon thành Polygon: Kỹ thuật không phải lúc nào cũng hoạt động


10

Để có được tọa độ bên ngoài, tôi cần chuyển đổi MultiPolygon thành Đa giác. Tôi làm như thế này:

if poly.geometry.type == 'Polygon':
    x, y = poly.geometry.exterior.xy
elif poly.geometry.type == 'MultiPolygon':
    allparts = [p.buffer(0) for p in poly.geometry]
    poly.geometry = shapely.ops.cascaded_union(allparts)
    x, y = poly.geometry.exterior.xy  # here happens the error

Điều này thành công rất thường xuyên, nhưng cũng có trường hợp Polygon rõ ràng vẫn là MultiPolygon vì lỗi sau vẫn được nêu ra:

AttributeError: 'MultiPolygon' object has no attribute 'exterior'

Tuy nhiên, tôi đã kiểm tra rằng mọi phần của MultiPolygon là một đa giác và bản thân nó không phải là Đa giác:

>>>>[p.type for p in poly.geometry]
['Polygon', 'Polygon']

Bất kỳ ý tưởng tại sao điều này xảy ra và làm thế nào để khắc phục nó?

Nó có thể là các lỗ trong đa giác? Tôi trông như thế này: nhập mô tả hình ảnh ở đây


MultiPolygon là một danh sách Đa giác đơn giản, do đó, một danh sách không có "bên ngoài", nhưng mọi Đa giác trong danh sách đều có "bên ngoài". Nếu bạn muốn Đa giác sử dụng vòng lặp for ([p.ex thầm.xy cho p trong Multi)]
gen

Được rồi, tôi hiểu rồi, nhưng tôi có thể làm gì sau đó để có được tọa độ bên ngoài của MultiPolygon ? Theo cách tiếp cận của tôi, tôi đang thử một liên minh gồm các đa giác đơn, nhưng điều này dường như không hoạt động ở đây ....
người đồng hương

Có thể là API của thay đổi hình dạng trong thời gian trung bình? Tôi không thấy thuộc tính geometrytrong một Polygon, nhưng geom_type?
K.-Michael Aye

Câu trả lời:


14

Bạn cần hiểu các vị từ nhị phân Shapely:

1) Nếu hai đa giác cắt nhau kết quả của unionhoặc unary_union(màu đỏ) là Đa giác do đó bạn có thể tính toán bên ngoài

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

2) Nếu hai đa giác bị ngắt kết nối, kết quả là cần có MultiPolygon (màu đỏ với hai đa giác)

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

Và nếu bạn làm việc với Shapefiles, không có cấu trúc liên kết, điều này có thể xảy ra

Một giải pháp là tính toán Hull lõm nhưng nó không thực sự là một liên minh.

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


Được rồi, thực sự, tôi phát hiện ra rằng đây là trường hợp - và logic! Cảm ơn rất nhiều!
người nhà quê

1
Làm thế nào để bạn tính toán thân tàu lõm?
Dima Lituiev
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.