Lo que estás viendo es una geometría de astilla. Similar a la respuesta de @ sgillies , excepto que use algunos parámetros de búfer para controlar la forma de geometría cincelada:
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
Tenga en cuenta que la fx
geometría fija tiene una coordenada menos, que era la astilla colgante. También tenga en cuenta que algunos de los vértices pueden haberse movido desde su posición original, generalmente varias veces menos que eps
.