geopandas.GeoSeries.voronoi_polygons#

GeoSeries.voronoi_polygons(tolerance=0.0, extend_to=None, only_edges=False)[来源]#

返回一个 GeoSeries,它由表示输入几何体的顶点周围计算得到的Voronoi图的对象组成。

GeoSeries 中的所有几何图形将在一个 Voronoi 图中共同考虑。因此,结果几何图形不一定与输入几何图形一一对应。请注意,每个几何图形的顶点都被视为 Voronoi 图的一个站点,因此图将围绕每个几何图形的顶点构建。

Parameters:
tolerancefloat, default 0.0

如果输入顶点之间的距离小于此值,则将它们合并在一起。

extend_toshapely.Geometry, default None

如果设置,Voronoi 图将扩展以覆盖该几何图形的包络(除非该包络小于输入几何图形)。

only_edgesbool (optional, default False)

如果设置为 True,图形将返回 LineStrings 而不是 Polygons。

另请参阅

GeoSeries.delaunay_triangles

围绕顶点的德劳内三角剖分

笔记

输出中的多边形顺序当前与输入顶点的顺序不对应。

如果您想为每个几何体单独生成Voronoi图,请使用 shapely.voronoi_polygons()

示例

最常见的用例是生成表示一组点周围的Voronoi图的多边形:

>>> from shapely import LineString, MultiPoint, Point, Polygon
>>> s = geopandas.GeoSeries(
...     [
...         Point(1, 1),
...         Point(2, 2),
...         Point(1, 3),
...         Point(0, 2),
...     ]
... )
>>> s
0    POINT (1 1)
1    POINT (2 2)
2    POINT (1 3)
3    POINT (0 2)
dtype: geometry

默认情况下,您将获得一个多边形的GeoSeries:

>>> s.voronoi_polygons()
0        POLYGON ((-2 5, 1 2, -2 -1, -2 5))
1           POLYGON ((4 5, 1 2, -2 5, 4 5))
2       POLYGON ((-2 -1, 1 2, 4 -1, -2 -1))
3    POLYGON ((4 -1, 4 -1, 1 2, 4 5, 4 -1))
dtype: geometry

如果将only_edges设置为True,您将获得代表Voronoi图边缘的LineStrings:

>>> s.voronoi_polygons(only_edges=True)
0     LINESTRING (-2 5, 1 2)
1    LINESTRING (1 2, -2 -1)
2      LINESTRING (4 5, 1 2)
3     LINESTRING (1 2, 4 -1)
dtype: geometry

您还可以将每个图表扩展到给定的几何形状:

>>> limit = Polygon([(-10, -10), (0, 15), (15, 15), (15, 0)])
>>> s.voronoi_polygons(extend_to=limit)
0              POLYGON ((-10 13, 1 2, -10 -9, -10 13))
1    POLYGON ((15 15, 15 -10, 13 -10, 1 2, 14 15, 1...
2    POLYGON ((-10 -10, -10 -9, 1 2, 13 -10, -10 -10))
3       POLYGON ((-10 15, 14 15, 1 2, -10 13, -10 15))
dtype: geometry

该方法支持任何几何类型,但请记住,底层算法仅基于输入几何的顶点,不考虑顶点之间的边段。

>>> s2 = geopandas.GeoSeries(
...     [
...         Polygon([(0, 0), (1, 1), (0, 1)]),
...         LineString([(1, 0), (2, 1), (1, 2)]),
...         MultiPoint([(2, 3), (2, 0), (3, 1)]),
...     ]
... )
>>> s2
0      POLYGON ((0 0, 1 1, 0 1, 0 0))
1          LINESTRING (1 0, 2 1, 1 2)
2    MULTIPOINT ((2 3), (2 0), (3 1))
dtype: geometry
>>> s2.voronoi_polygons()
0    POLYGON ((1.5 1.5, 1.5 0.5, 0.5 0.5, 0.5 1.5, ...
1    POLYGON ((1.5 0.5, 1.5 1.5, 2 2, 2.5 2, 2.5 0....
2    POLYGON ((-3 -3, -3 0.5, 0.5 0.5, 0.5 -3, -3 -3))
3    POLYGON ((0.5 -3, 0.5 0.5, 1.5 0.5, 1.5 -3, 0....
4     POLYGON ((-3 5, 0.5 1.5, 0.5 0.5, -3 0.5, -3 5))
5    POLYGON ((-3 6, -2 6, 2 2, 1.5 1.5, 0.5 1.5, -...
6    POLYGON ((1.5 -3, 1.5 0.5, 2.5 0.5, 6 -3, 1.5 ...
7       POLYGON ((6 6, 6 3.75, 2.5 2, 2 2, -2 6, 6 6))
8       POLYGON ((6 -3, 2.5 0.5, 2.5 2, 6 3.75, 6 -3))
dtype: geometry