Kleine Polygonlücken im Shapely-Polygon entfernen?

9

Ich weiß, dass dieses Problem bereits mit einer anderen Software behoben wurde, aber wie mache ich es mit Shapely?

Ich habe ein Polygon mit einer sehr kleinen Lücke im Inneren der Form:

Spalt

Hier ist eine Nahaufnahme:

gapClose

Das Polygon ist gültig, daher kann ich den Puffertrick nicht verwenden, und die Vereinfachung des Polygons funktioniert auch nicht.

camdenl
quelle

Antworten:

13

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 fxGeometrie 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.

Mike T.
quelle
6

Versuchen Sie, sich um einen kleinen Faktor zu erweitern und zu erodieren ( eps).

   geom.buffer(eps).buffer(-eps)
sgillies
quelle