用纽比乌芬奇包裹的地球仪
pygeos的Python项目详细描述
这是一个c/python库,它将geos中的几何函数包装在numpy ufuncs中。 这个项目仍处于模拟阶段:api很可能会改变。
为什么是不明飞行物?
通用函数(简称ufunc)是在 一个元素一个元素的n维数组,支持数组 广播。所涉及的for循环在c中完全实现, 减少python解释器的开销。
pygeos旨在将geos中的几何函数公开到python中,以提供 一种快速灵活的方法,用Python处理大量的几何图形。
GeoGeometry对象
geos几何体对象存储在python扩展的静态属性中 键入pygeos.geosgeometry。这使得python解释器不在ufunc中 内环。geosgeometry对象跟踪基础几何体和 允许python垃圾收集器在几何体不是 再也不用了。
geosometry对象是不可变的。按如下方式构造:
>>>frompygeosimportGEOSGeometry>>>geometry=GEOSGeometry.from_wkt("POINT (5.2 52.1)")
或者简单地说:
>>>frompygeosimportpoints>>>point=points(5.2,52.1)
示例
将点网格与多边形进行比较:
>>>geoms=points(*np.indices((4,4)))>>>polygon=box(0,0,2,2)>>>contains(polygon,geoms)array([[False,False,False,False],[False,True,False,False],[False,False,False,False],[False,False,False,False]])
计算两个多边形列表的所有可能交点的面积:
>>>frompygeosimportbox,area,intersection>>>polygons_x=box(range(5),0,range(10,15),10)>>>polygons_y=box(0,range(5),10,range(10,15))>>>area(intersection(polygons_x[:,np.newaxis],polygons_y[np.newaxis,:]))array([[100.,90.,80.,70.,60.],[90.,81.,72.,63.,54.],[80.,72.,64.,56.,48.],[70.,63.,56.,49.,42.],[60.,54.,48.,42.,36.]])
安装
pygeos使用shapely的安装脚本。如果你有一个标准的libgeos 位置,以下选项应起作用:
$ pip install pygeos
为开发人员安装
克隆包:
$ git clone https://github.com/caspervdw/pygeos.git
使用pip安装
$ pip install -e .
运行单元测试:
$ python -m pytest pygeos/test.py
参考文献
- GEOS: http://trac.osgeo.org/geos
- Shapely: https://shapely.readthedocs.io/en/latest/
- Numpy ufuncs: https://docs.scipy.org/doc/numpy/reference/ufuncs.html
- Joris van den Bossche’s blogpost: https://jorisvandenbossche.github.io/blog/2017/09/19/geopandas-cython/
- Matthew Rocklin’s blogpost: http://matthewrocklin.com/blog/work/2017/09/21/accelerating-geopandas-1
版权和许可证
版权所有(c)2019,卡斯珀·范德威尔。BSD 3条款许可证。