Removendo pequenas lacunas de polígono no polígono Shapely?

9

Sei que esse problema foi resolvido antes com um software diferente, mas como faço com o Shapely?

Eu tenho um polígono com uma lacuna muito pequena no interior da forma:

Gap = Vão

Aqui está um close-up:

gapClose

O polígono é válido, portanto não posso usar o truque de buffer, e simplificar o polígono também não funciona.

Camdenl
fonte

Respostas:

13

O que você está vendo é uma geometria da tira. Semelhante à resposta de @ sgillies , exceto use alguns parâmetros de buffer para controlar a forma da geometria cinzelada:

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

Observe que a fxgeometria fixa tem uma coordenada a menos, que era a fita pendente. Observe também que alguns dos vértices podem ter se desviado da posição original, geralmente várias vezes menos que eps.

Mike T
fonte
6

Tente dilatar e corroer por um pequeno fator ( eps).

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