本文完整代码及附件已上传至
Github
仓库https://github.com/CNFeffery/DataScienceStudyNotes❞
就在昨天,Python
生态中著名的GIS
分析库geopandas
发布了其1.0.0
正式版本。
历经10年迭代升级,geopandas
充分完善了其在GIS
数据分析上的功能,使得我们可以使用类似pandas
的操作方式,便捷且高性能的开展各种常用的GIS
分析运算,极大增强了Python
在GIS
分析领域的能力。
今天的文章,费老师我就将带大家一起快速了解在全新的1.0
版本中,新的功能特性、优化提升以及相关API的变动情况🚀~
如果你还未曾安装使用过geopandas
,我最推荐的方式是新建虚拟环境,并在虚拟环境中通过conda-forge
源进行稳定安装,以当下非常流行的开源环境管理工具mamba
(可参考我所写的教程
mamba使用教程
公众号:Python大数据分析是时候跟Conda说再见了
)为例,在终端执行下列命令(目前推荐Python
版本为3.9),静静等待,即可一步到位完成最新版geopandas
的安装:
`mamba create -n geopandas-env python=3.9 -y && mamba activate geopandas-env && mamba install geopandas -y `
而如果你已经安装了先前版本的geopandas
,那么在你的对应环境下,终端执行下列命令即可进行版本升级:
`mamba update geopandas -y `
新安装或升级完成后,检查一下版本变化,成功升级到1.0.0
版本🥳:
首先我们来了解一下新版本geopandas
中新增的部分主要的API:
新增方法count_geometries()
,用于针对多部件要素计算单体要素数量:
新增方法count_interior_rings()
,用于针对多边形要素计算内环数量:
新增方法relate_pattern()
,用于计算要素之间是否满足特定的DE-9IM(一种分别计算成对要素在内部、边界、外部两两之间相交相离状态的复杂空间模型)空间关系,具体的原理细节较多,我会在之后单独撰文介绍,下面仅演示relate_pattern()
的使用示例:
新增方法intersection_all()
,用于计算矢量列中全体要素的公共相交部分:
新增方法line_merge()
,用于快速合并一系列端点相交的线要素:
新增方法set_precision()
、get_precision()
,用于设置及获取矢量列的坐标精度大小:
新增方法count_coordinates()
,用于快速计算矢量列各要素坐标点数量:
新增属性方法is_ccw
,用于针对坐标点数量大于等于4个的线要素,判断其坐标串方向是否符合逆时针方向:
新增属性方法is_closed
,用于判断线要素是否起点终点相同:
新增方法force_2d()
、force_3d()
,用于将矢量列强制去除z轴坐标、强制添加z轴坐标:
新增方法voronoi_polygons()
,用于基于整体矢量列的所有顶点,快速生成泰森多边形:
新增方法contains_properly()
,用于快捷判断矢量A是否严格包含矢量B,与contains()
方法的区别是,contains_properly()
不允许作比较的矢量间有任何公共点:
新增方法build_area()
,用于基于一系列可以构成闭合面要素的线要素,整体生成合法的若干多边形:
新增方法snap()
,用于将满足距离阈值要求的要素A挂靠到对应的要素B之上:
新增方法transform()
,用于基于自定义坐标偏移函数,实现对矢量要素的坐标转换,其中自定义函数的输入为N行2列后N行3列的numpy
数组,输出形状与输入一致即可,我们可以配合numpy
中的apply_along_axis()
实现自由的坐标点级别转换计算,而无需关心输入的要素是点线面中的哪种:
新增方法get_geometry()
,用于将矢量列各要素视作多部件要素,进行快捷位序索引:
新增方法dwithin()
,用于快速判断矢量A是否在矢量B目标的指定距离内:
新增方法to_geo_dict()
,用于将GeoDataFrame
快捷转化为GeoJSON
格式字典数据结构:
接下来我们来了解新版本中获得功能增强的一些主要API:
针对sjoin()
方法,新增了dwithin
型空间关系判断,使得我们可以在geopandas
中真正意义上直接实现“匹配与目标要素距离在XXX以内的纪录行”:
在新版本中,我们可以将GeoDataFrame
写出为csv
格式,并在使用pd.read_csv()
读取时,通过dtype
参数将对应列指定解析为矢量类型:
针对GeoDataFrame.to_json()
,新增参数show_bbox
、drop_id
、to_wgs84
,实现更为定制化的GeoJSON
转化:
`demo_gdf = gpd.GeoDataFrame( { 'name': ['示例要素'], 'geometry': [Point(106, 29)] }, crs='EPSG:4524' ) print(demo_gdf.to_json( ensure_ascii=False, indent=4, show_bbox=True, drop_id=True, to_wgs84=False )) `
针对GeoDataFrame.sjoin()
,新增参数on_attribute
,用于额外施加常规表连接中的指定字段相等条件,相当于设置有效的on_attribute
参数后,空间连接的结果将既满足空间关系,又满足字段匹配关系:
新版本中也新增了一系列标记为废弃的API,将会在未来某个版本正式移除,请注意及时调整你的相关代码逻辑,其中主要的有:
unary_union
将废弃,更换为union_all()
use_pygeos
将废弃并在1.1
版本中正式移除
由于pygeos
已经合并入geopandas
底层矢量计算所依赖的新版shapely
中,因此对应的use_pygeos
设置项也将退出历史舞台:
crs
属性赋值以修改坐标系的方式将在未来版本被禁用,请统一使用set_crs()
代替篇幅有限,未能详尽介绍全部新版本内容,完整的更新日志请移步:https://github.com/geopandas/geopandas/releases/tag/v1.0.0
以上就是本文的全部内容,欢迎在评论区与我们进行讨论~
往期精彩回顾
* [适合初学者入门人工智能的路线及资料下载](http://mp.weixin.qq.com/s?__biz=MzIwODI2NDkxNQ==&mid=2247484737&idx=1&sn=27c52b4bc4ca98d3ab817344b84226cc&chksm=97048efda07307eb78d4f4ec0039a386a658404156b051af0cb715fafa8d2ae66cbe49343bf3&scene=21#wechat_redirect)
* [(图文+视频)机器学习入门系列下载](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIwODI2NDkxNQ==&action=getalbum&album_id=2259163844755406853#wechat_redirect)
* [机器学习及深度学习笔记等资料打印](http://mp.weixin.qq.com/s?__biz=MzIwODI2NDkxNQ==&mid=2247488304&idx=1&sn=581944f63eab1822ca53b9a4eeedad79&chksm=9704988ca073119a38a534adbedd51ca0b5705cdd6a104fed74b265bb092485e97c91bb5b347&scene=21#wechat_redirect)
* [《统计学习方法》的代码复现专辑
](https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1337257945842778113&__biz=MzIwODI2NDkxNQ==#wechat_redirect)
* ```
交流群
```
**欢迎加入机器学习爱好者微信群一起和同行交流,目前有机器学习交流群、博士群、博士申报交流、CV、NLP等微信群,请扫描下面的微信号加群,备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~(**也可以加入机器学习交流qq群772479961)