ボロノイ分割をしたかったので scipy.spatial.Voronoi を使ったのだけれど、用語や配列の意味に混乱したので、整理してみた。
ドキュメントにあるように、処理自体はすぐにできる。
import numpy
import scipy.spatial
v = scipy.spatial.Voronoi(numpy.array([[0,0],[0,1],[1,1]]))
まず point, region, ridge, vertice の意味。2 次元だとこんな絵になる。2 次元だと ridge は線だけれども、3 次元だと ridge は面になる。
それぞれのデータは Voronoi object の属性に対応表の形で入っている。インデックス番号で対応表は表現されている。図にするとこんな感じで辿るようになっている。少し凝ったことをすると、たくさん辿らないといけないので、迷子にならないように丁寧に追いかけないといけない。
閉じた領域で Polygon を作る時は、例えば次のようなコードになる。
import geopandas as gpd
from shapely.geometry import Polygon
va = gpd.GeoDataFrame([dict(geometry=Polygon([v.vertices[vt] for vt in v.regions[r]]), pti=pti)
for pti,r in enumerate(v.point_region) if -1 not in v.regions[r]])
![IMG_1585[1].JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F41883%2Fd11b253d-ea98-67fe-8aeb-e7d96259dc44.jpeg?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=0d689e88dd7815f2c8b9400ddeb616b9)
![IMG_1584[1].JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F41883%2F8e51c022-3f01-0fb0-3b80-6c55ac0cc79c.jpeg?ixlib=rb-4.1.1&auto=format&gif-q=60&q=75&s=985fb700c453a1a56ea8991608e05082)