Menghapus celah poligon kecil di Shapely polygon?


9

Saya tahu masalah ini telah diatasi sebelumnya dengan perangkat lunak yang berbeda, tetapi bagaimana saya melakukannya dengan Shapely?

Saya memiliki poligon dengan celah yang sangat kecil di bagian dalam bentuk:

celah

Ini adalah close up:

gapClose

Poligon valid, jadi saya tidak bisa menggunakan trik buffer, dan menyederhanakan poligon juga tidak berfungsi.

Jawaban:


13

Hal yang Anda lihat adalah geometri sliver. Mirip dengan jawaban @ sgillies , kecuali gunakan beberapa parameter buffer untuk mengontrol bentuk geometri pahat:

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

Perhatikan bahwa fxgeometri tetap memiliki satu koordinat kurang, yang merupakan sliver menggantung. Juga perhatikan bahwa beberapa simpul mungkin telah bergoyang dari posisi semula, biasanya beberapa kali lebih sedikit daripada eps.


6

Coba melebarkan dan mengikis dengan faktor kecil ( eps).

   geom.buffer(eps).buffer(-eps)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.