Hal yang Anda lihat adalah geometri sliver. Mirip dengan jawaban @ sgillies , kecuali gunakan beberapa parameter buffer untuk mengontrol bentuk geometri pahat:
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
Perhatikan bahwa fx
geometri tetap memiliki satu koordinat kurang, yang merupakan sliver menggantung. Juga perhatikan bahwa beberapa simpul mungkin telah bergoyang dari posisi semula, biasanya beberapa kali lebih sedikit daripada eps
.