Shapelyポリゴンの小さなポリゴンギャップを削除しますか?


9

この問題は以前に別のソフトウェアで対処されていることはわかっていますが、Shapelyでどうすればよいですか?

シェイプの内部に非常に小さなギャップがあるポリゴンがあります。

ギャップ

これがクローズアップです:

gapClose

ポリゴンは有効であるため、バッファトリックを使用できず、ポリゴンの単純化も機能しません。

回答:


13

あなたが見ているのは、断片のジオメトリです。@sgilliesの回答に似ていますが、チゼル形状の形状を制御するためにいくつかのバッファーパラメーターを使用します

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

固定fxジオメトリの座標が1つ少ないことに注意してください。これはぶら下がりスライバーでした。また、一部の頂点は元の位置からぐるぐる回っている可能性があることに注意してくださいeps。通常、の数分の1です。


6

小さな係数(eps)で膨張および収縮して​​みてください。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.