Das, was Sie betrachten, ist eine Faserbandgeometrie. Ähnlich wie bei @ sgillies , außer dass einige Pufferparameter verwendet werden , um die Form der gemeißelten Geometrie zu steuern:
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
Beachten Sie, dass die feste fx
Geometrie eine Koordinate weniger hat, nämlich das baumelnde Band. Beachten Sie auch, dass einige der Eckpunkte möglicherweise von ihrer ursprünglichen Position gewackelt sind, normalerweise um ein Vielfaches weniger als eps
.