在地理区域中创建和绘制voronoi区域的包
geovoronoi的Python项目详细描述
Geovoronoi–在地理区域内创建和绘制Voronoi区域的包
马克斯·康拉德markus.konrad@wzb.eu,2019年7月
概述
geovoroni有助于为地理数据生成Voronoi regions,例如某个国家公立大学的坐标。这反过来又可以用来估计某种“覆盖范围”。
它获取一个坐标列表,并使用SciPy从中计算voronoi区域。在边上,这些区域变为无穷大。然后,我们可以采用周围区域的形状(例如,一个国家的形状为多边形)来切割voronoi区域,使其适合所提供的形状,从而使边缘区域有限。geovoroni对这些操作使用shapely。此外,该软件包还实现了一些功能,以便于绘制得到的voronoi区域。
安装
此软件包在PyPI上可用。您可以通过pip安装最新版本,如下所示:
# install with "plotting" dependencies (recommended):
pip install -U geovoronoi[plotting]
# or install base version:
pip install -U geovoronoi
用法
您有一个地理区域,其中包含一些要为其生成voronoi区域的点。这个地理区域是一个shapely Polygon/MultiPolygon object(例如,您从加载了GeoPandas或Fiona的geojson文件获得的)。您拥有的n点要么是nx2 numpy数组的形式,要么是形状点对象的列表(它们可以使用函数coords_to_points
和points_to_coords
进行转换)。点和周围的地理区域必须具有相同的CRS (coordinate reference system)。
以意大利的这些随机生成的点为例(inWorld Mercator CRS):
importnumpyasnp# coords = ... generate some coordinates with np.random.uniform ...print(coords)
array([[1690891.43454513, 4865911.53550427],
[1303898.2749075 , 5398659.4816214 ],
[1379407.32051822, 5701267.51923313],
[1703402.05850744, 4916559.63783754],
...
]])
意大利的周围形状是事先从Geopandas获得的:
importgeopandasasgpdworld=gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))area=world[world.name=='Italy']area=area.to_crs(epsg=3395)# convert to World Mercator CRSarea_shape=area.iloc[0].geometry# get the Polygon
现在,我们可以计算voronoi区域,用地理区域形状剪切它们并为它们指定点:
fromgeovoronoiimportvoronoi_regions_from_coordspoly_shapes,pts,poly_to_pt_assignments=voronoi_regions_from_coords(coords,area_shape)
poly_shapes
是表示相应voronoi区域形状的多边形对象列表。有了它们,您可以做shapely API提供的所有事情。例如,您可以获取每个voronoi区域的area(在geovoroni中还有一个助手函数calculate_polygon_areas
)。
pts
是从coords
(按相同顺序)转换的形状点对象的列表。poly_to_pt_assignments
是一个嵌套列表,对于poly_shapes
中的每个voronoi区域,它包含一个指向pts
(以及coords
)的索引列表,这些索引表示属于该voronoi区域的点。通常,这只是一个点。但是,如果存在重复点(例如,两个或多个点具有完全相同的坐标),则会为相应的voronoi区域列出所有这些重复点。
您可以使用plotting
子模块中的函数绘制结果:
importmatplotlib.pyplotaspltfromgeovoronoi.plottingimportsubplot_for_map,plot_voronoi_polys_with_points_in_areafig,ax=subplot_for_map()plot_voronoi_polys_with_points_in_area(ax,area_shape,poly_shapes,coords,poly_to_pt_assignments)plt.show()
这将是一个示例输出(有关撒丁岛地区的问题,请参见下面的“限制):
请参阅examples/random_points_across_italy.py中的完整示例源代码。另请参见examples/目录中的其他示例,这些示例演示如何计算voronoi区域的面积、处理重复点或与geopandas交互。
依赖关系
geovoronoi需要python 3.4或更新版本。需要安装以下软件包(如果没有,如果使用像pip这样的python软件包管理器,它们将自动安装):
- 努比
- scipy
- 形状
- matplotlib(仅用于绘图)
- Geopandas(仅用于绘图)
- 笛卡尔(仅用于绘图)
限制
- 切割voronoi区域时,不单独处理地理区域的多多边形形状(参见
random_points_across_italy.py
示例中的撒丁岛)
待办事项
- 支持地理区域的多多边形形状(参见
random_points_across_italy.py
示例中的撒丁岛) - 支持绘制具有多个几何图形的
area_shape
对象
许可证
根据^{a授权十五。这个{