Loại bỏ các khoảng trống đa giác nhỏ trong đa giác Shapely?


9

Tôi biết vấn đề này đã được giải quyết trước đây với các phần mềm khác nhau, nhưng làm cách nào để thực hiện với Shapely?

Tôi có một đa giác với một khoảng cách rất nhỏ trên phần bên trong của hình dạng:

lỗ hổng

Đây là một kết thúc:

khoảng cách

Đa giác là hợp lệ vì vậy tôi không thể sử dụng thủ thuật đệm và đơn giản hóa đa giác cũng không hoạt động.

Câu trả lời:


13

Thứ bạn đang nhìn là một hình học cúi. Tương tự như câu trả lời của @ sgillies , ngoại trừ sử dụng một vài tham số bộ đệm để kiểm soát hình dạng hình học được đục:

import json
from shapely.geometry import shape, JOIN_STYLE
eps = 0.001  # epsilon that is approx. the width of slivers, e.g. 1 mm

# Load the original polygon from GeoJSON
poly = shape(json.loads('{"type": "Polygon", "coordinates": [[[...]]]}'))

# Here's the algorithm
fx = poly.buffer(eps, 1, join_style=JOIN_STYLE.mitre).buffer(-eps, 1, join_style=JOIN_STYLE.mitre)

# Compare number of vertices in the exterior LinearRing
print(len(poly.exterior.coords))  # 136
print(len(fx.exterior.coords))    # 135

Lưu ý rằng fxhình học cố định có một tọa độ ít hơn, đó là cúi lơ lửng. Cũng lưu ý rằng một số đỉnh có thể bị lung lay từ vị trí ban đầu của chúng, thường là ít hơn nhiều lần so với eps.


6

Hãy thử giãn nở và ăn mòn bởi một yếu tố nhỏ ( eps).

   geom.buffer(eps).buffer(-eps)

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.