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 fx
hì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
.