(数据科学学习手札162)Python GIS神器geopandas 1.0版本发布
本文完整代码及附件已上传至我的
Github
仓库https://github.com/CNFeffery/DataScienceStudyNotes
1 简介
大家好我是费老师,就在昨天,Python
生态中著名的GIS
分析库geopandas
发布了其1.0.0
正式版本。
历经10年迭代升级,geopandas
充分完善了其在GIS
数据分析上的功能,使得我们可以使用类似pandas
的操作方式,便捷且高性能的开展各种常用的GIS
分析运算,极大增强了Python
在GIS
分析领域的能力。
今天的文章,费老师我就将带大家一起快速了解在全新的1.0
版本中,新的功能特性、优化提升以及相关API的变动情况~
2 geopandas 1.0版本介绍
如果你还未曾安装使用过geopandas
,我最推荐的方式是新建虚拟环境,并在虚拟环境中通过conda-forge
源进行稳定安装,以当下非常流行的开源环境管理工具mamba
(可参考我所写的教程)为例,在终端执行下列命令(目前推荐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
版本:
2.1 新增API介绍
首先我们来了解一下新版本geopandas
中新增的部分主要的API:
2.1.1 新增count_geometries()方法
新增方法count_geometries()
,用于针对多部件要素计算单体要素数量:
2.1.2 新增count_interior_rings()方法
新增方法count_interior_rings()
,用于针对多边形要素计算内环数量:
2.1.3 新增relate_pattern()方法
新增方法relate_pattern()
,用于计算要素之间是否满足特定的DE-9IM(一种分别计算成对要素在内部、边界、外部两两之间相交相离状态的复杂空间模型)空间关系,具体的原理细节较多,我会在之后单独撰文介绍,下面仅演示relate_pattern()
的使用示例:
2.1.4 新增intersection_all()方法
新增方法intersection_all()
,用于计算矢量列中全体要素的公共相交部分:
2.1.5 新增line_merge()方法
新增方法line_merge()
,用于快速合并一系列端点相交的线要素:
2.1.6 新增set_precision()、get_precision()方法
新增方法set_precision()
、get_precision()
,用于设置及获取矢量列的坐标精度大小:
2.1.7 新增count_coordinates()方法
新增方法count_coordinates()
,用于快速计算矢量列各要素坐标点数量:
2.1.8 新增is_ccw属性方法
新增属性方法is_ccw
,用于针对坐标点数量大于等于4个的线要素,判断其坐标串方向是否符合逆时针方向:
2.1.9 新增is_closed属性方法
新增属性方法is_closed
,用于判断线要素是否起点终点相同:
2.1.10 新增force_2d()、force_3d()方法
新增方法force_2d()
、force_3d()
,用于将矢量列强制去除z轴坐标、强制添加z轴坐标:
2.1.11 新增voronoi_polygons()方法
新增方法voronoi_polygons()
,用于基于整体矢量列的所有顶点,快速生成泰森多边形:
2.1.12 新增contains_properly()方法
新增方法contains_properly()
,用于快捷判断矢量A是否严格包含矢量B,与contains()
方法的区别是,contains_properly()
不允许作比较的矢量间有任何公共点:
2.1.13 新增build_area()方法
新增方法build_area()
,用于基于一系列可以构成闭合面要素的线要素,整体生成合法的若干多边形:
2.1.14 新增snap()方法
新增方法snap()
,用于将满足距离阈值要求的要素A挂靠到对应的要素B之上:
2.1.15 新增transform()方法
新增方法transform()
,用于基于自定义坐标偏移函数,实现对矢量要素的坐标转换,其中自定义函数的输入为N行2列后N行3列的numpy
数组,输出形状与输入一致即可,我们可以配合numpy
中的apply_along_axis()
实现自由的坐标点级别转换计算,而无需关心输入的要素是点线面中的哪种:
2.1.16 新增get_geometry()方法
新增方法get_geometry()
,用于将矢量列各要素视作多部件要素,进行快捷位序索引:
2.1.17 新增dwithin()方法
新增方法dwithin()
,用于快速判断矢量A是否在矢量B目标的指定距离内:
2.1.18 新增to_geo_dict()方法
新增方法to_geo_dict()
,用于将GeoDataFrame
快捷转化为GeoJSON
格式字典数据结构:
2.2 功能增强
接下来我们来了解新版本中获得功能增强的一些主要API:
2.2.1 空间连接新增dwithin型空间关系判断
针对sjoin()
方法,新增了dwithin
型空间关系判断,使得我们可以在geopandas
中真正意义上直接实现“匹配与目标要素距离在XXX以内的纪录行”:
2.2.2 配合pd.read_csv指定矢量列类型
在新版本中,我们可以将GeoDataFrame
写出为csv
格式,并在使用pd.read_csv()
读取时,通过dtype
参数将对应列指定解析为矢量类型:
2.2.3 to_json()新增参数show_bbox、drop_id、to_wgs84
针对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
))
2.2.4 空间连接新增参数on_attribute
针对GeoDataFrame.sjoin()
,新增参数on_attribute
,用于额外施加常规表连接中的指定字段相等条件,相当于设置有效的on_attribute
参数后,空间连接的结果将既满足空间关系,又满足字段匹配关系:
2.3 标记为废弃的API
新版本中也新增了一系列标记为废弃的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
以上就是本文的全部内容,欢迎在评论区与我们进行讨论~
(数据科学学习手札162)Python GIS神器geopandas 1.0版本发布的更多相关文章
- (数据科学学习手札140)详解geopandas中基于pyogrio的矢量读写引擎
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,前不久我在一篇文章中给大家分享 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
- (数据科学学习手札80)用Python编写小工具下载OSM路网数据
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札32)Python中re模块的详细介绍
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...
- (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播图
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信 ...
- (数据科学学习手札57)用ggplotly()美化ggplot2图像
一.简介 经常利用Python进行数据可视化的朋友一定用过或听说过plotly这样的神器,我在(数据科学学习手札43)Plotly基础内容介绍中也曾做过非常详细的介绍,其渲染出的图像以浏览器为载体,非 ...
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...
- (数据科学学习手札49)Scala中的模式匹配
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...
- (数据科学学习手札40)tensorflow实现LSTM时间序列预测
一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...
随机推荐
- OSI模型之网络层
一.简介 网络层是OSI参考模型中的第三层,同时也是TCP/IP模型的第二层.它介于传输层和数据链路层之间,主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务.网络层传输单位是数据 ...
- 一个随时更新的js库
1.src同级建commFunction=>timer.js 2.main.js引入 import time from '../commonFunction/time' Vue.prototyp ...
- Redis官方开源的可视化管理工具 - RedisInsight
前言 今天大姚给大家推荐一款Redis官方开源的可视化管理工具:RedisInsight. Redis介绍 Redis (Remote Dictionary Server) 是一个使用 C 语言编写的 ...
- 校园圈子系统前后端安装开发app小程序h5
四川掌上时代开发公司,作为一家专注于提供高质量软件解决方案的企业,在信息技术领域已经积累了丰富的经验和良好的声誉.位于中国四川省成都市,该公司不仅服务于本地市场,还将业务拓展到了全国乃至国际市场,与多 ...
- Linux中的which whereis locate
which which会在PATH环境中搜寻可执行文件 whereis Linux会将系统里面所有的文件都搜集到一个数据库文件中,whereis从这个数据库文件里面寻找文件 locate locate ...
- 磁盘空间满了报错cannot create temp file for here-document: No space left on device
如下:虚拟机设置的存储空间是20G,.目前用到100%了.执行命令会报错设备没有空间 我想删除镜像释放空间,也无法操作 分级找到文件,但是不知道删除哪个 退出的容器都找不到了 把昨天下午弄的删了 容器 ...
- 免费考AI OCP认证,附通关秘籍!
这是一个能让你快速熟悉AI相关技能的考试,由Oracle官方提供,而且限时免费. 它就是OCI Generative AI Professional. 可以看到,目前免费政策正在执行,到今年的7月31 ...
- 5款.NET开源、免费、功能强大的图表库
LiveCharts2 LiveCharts2是一个.NET开源(MIT License).简单.灵活.交互式且功能强大的.NET图表.地图和仪表,现在几乎可以在任何地方运行如:Maui.Uno Pl ...
- C# winform GDI+ 五子棋 (二):根据博弈算法写的人机AI(抄的别人的)
白棋是ai,最后ai走赢了. 根据博弈算法的一个AI.遍历深度6层,下子很慢.其实我是从别人的代码里复制的算法,改到自己上面用了. 这个博弈算法 class GameAI { /// <summ ...
- MyBatis一对多或多对多分页查询的结果条数不符合预期的问题解决
问题描述 通常我们我们在单表查询中我们可以采用limit进行分页查询,这样可以减少页面的显示量,加快页面想应速度.但是在MyBatis框架中,如果我们在一对多或多对多查询中直接使用limit关键字 ...