在地理区域中创建和绘制voronoi区域的包

geovoronoi的Python项目详细描述


Geovoronoi–在地理区域内创建和绘制Voronoi区域的包

马克斯·康拉德markus.konrad@wzb.eu,2019年7月

概述

Voronoi regions of random points across Spain and their respective area

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(例如,您从加载了GeoPandasFiona的geojson文件获得的)。您拥有的n点要么是nx2 numpy数组的形式,要么是形状点对象的列表(它们可以使用函数coords_to_pointspoints_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()

这将是一个示例输出(有关撒丁岛地区的问题,请参见下面的“限制):

Voronoi regions of random points across Italy

请参阅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授权十五。这个{文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何定制springdata存储库方法名称?   html有没有办法将java应用程序或JApplet嵌入到网站中?   Jackson ObjectMapper将java从字符串序列化为JSON作为namevalue   java刷新JTable?   用Java程序分发用JavaDB制作的数据库   java Android如何启动新活动   当集合大小超过500.000时,java的处理速度会显著降低   在java的分层目录中的多个目录中查找相同的文件   java如何将ArrayList数据插入数据库   java如何修改此代码,使其时间复杂度为o(logn)或o(n),而不是o(n^2)   java面板(SimplePanel)中仅显示图像的前1/3(大约),   jakarta ee Java Bean和企业Java Bean之间的区别?   创建AWS Cloudfront自签名URL(java sdk)时出现amazon web服务错误   基于Jersey和Jackson查询参数的java动态属性过滤