Supprimer les petits espaces de polygone dans le polygone Shapely?

9

Je sais que ce problème a déjà été résolu avec différents logiciels, mais comment le faire avec Shapely?

J'ai un polygone avec un très petit espace à l'intérieur de la forme:

écart

Voici un gros plan:

gapClose

Le polygone est valide, je ne peux donc pas utiliser l'astuce de tampon, et la simplification du polygone ne fonctionne pas non plus.

camdenl
la source

Réponses:

13

La chose que vous regardez est une géométrie de ruban. Semblable à la réponse de @ sgillies , sauf utiliser quelques paramètres de tampon pour contrôler la forme de la géométrie ciselée:

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

Notez que la fxgéométrie fixe a une coordonnée de moins, qui était le ruban pendant. Notez également que certains des sommets peuvent avoir bougé de leur position d'origine, généralement plusieurs fois moins que eps.

Mike T
la source
6

Essayez de dilater et d'éroder d'un petit facteur ( eps).

   geom.buffer(eps).buffer(-eps)
sgillies
la source