Python GIS神器geopandas 1.0版本来了

简介: Python GIS神器geopandas 1.0版本来了

1 简介

大家好我是费老师,就在昨天,Python生态中著名的GIS分析库geopandas发布了其1.0.0正式版本。

bcaf2b75d518dd667dae09b5070948a9.png

历经10年迭代升级,geopandas充分完善了其在GIS数据分析上的功能,使得我们可以使用类似pandas的操作方式,便捷且高性能的开展各种常用的GIS分析运算,极大增强了PythonGIS分析领域的能力。

今天的文章,费老师我就将带大家一起快速了解在全新的1.0版本中,新的功能特性、优化提升以及相关API的变动情况🚀~

2 geopandas 1.0版本介绍

如果你还未曾安装使用过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

f1469d4f248fc883b0133ad44ccda074.png

新安装或升级完成后,检查一下版本变化,成功升级到1.0.0版本🥳:

774992265ca261ce8f2db5644973dcef.png

2.1 新增API介绍

首先我们来了解一下新版本geopandas中新增的部分主要的API:

2.1.1 新增count_geometries()方法

新增方法count_geometries(),用于针对多部件要素计算单体要素数量:

a5e81f105dd1977143a4f3dd4324d1a5.png

2.1.2 新增count_interior_rings()方法

新增方法count_interior_rings(),用于针对多边形要素计算内环数量:

80e68358a6ae280f962806f378424dae.png

2.1.3 新增relate_pattern()方法

新增方法relate_pattern(),用于计算要素之间是否满足特定的DE-9IM(一种分别计算成对要素在内部、边界、外部两两之间相交相离状态的复杂空间模型)空间关系,具体的原理细节较多,我会在之后单独撰文介绍,下面仅演示relate_pattern()的使用示例:

0ffef01342be7d95bfc308c4fb201dc6.png

2.1.4 新增intersection_all()方法

新增方法intersection_all(),用于计算矢量列中全体要素的公共相交部分:

11616452dd94e239097e1eabc917024a.png

2.1.5 新增line_merge()方法

新增方法line_merge(),用于快速合并一系列端点相交的线要素:

fc77045ad69959ca8c23dec6ad9d6c1b.png

2.1.6 新增set_precision()、get_precision()方法

新增方法set_precision()get_precision(),用于设置及获取矢量列的坐标精度大小:

714c016c4d3f75a05003110847b6eec1.png

2.1.7 新增count_coordinates()方法

新增方法count_coordinates(),用于快速计算矢量列各要素坐标点数量:

5bd49b5353c563dd39558ae5dc3a6b8c.png

2.1.8 新增is_ccw属性方法

新增属性方法is_ccw,用于针对坐标点数量大于等于4个的线要素,判断其坐标串方向是否符合逆时针方向:

ee46310d5878ad58689dd7e57e6f4b2f.png

2.1.9 新增is_closed属性方法

新增属性方法is_closed,用于判断线要素是否起点终点相同:

383c661495047a216fd9683190bf9025.png

2.1.10 新增force_2d()、force_3d()方法

新增方法force_2d()force_3d(),用于将矢量列强制去除z轴坐标、强制添加z轴坐标:

d6b800bc94677b096a8b068d1c24ca5a.png

2.1.11 新增voronoi_polygons()方法

新增方法voronoi_polygons(),用于基于整体矢量列的所有顶点,快速生成泰森多边形

9f40ad766bd8fb61f0746ebc1b538cac.png

2.1.12 新增contains_properly()方法

新增方法contains_properly(),用于快捷判断矢量A是否严格包含矢量B,与contains()方法的区别是,contains_properly()不允许作比较的矢量间有任何公共点:

69a0d5d64c9729b52d78e5288d5d6309.png

2.1.13 新增build_area()方法

新增方法build_area(),用于基于一系列可以构成闭合面要素的线要素,整体生成合法的若干多边形:

667d9dbb4df3d0847a50c53ff2266a8d.png

2.1.14 新增snap()方法

新增方法snap(),用于将满足距离阈值要求的要素A挂靠到对应的要素B之上:

ae56404baa43fb6259711fef3196f1ae.png

2.1.15 新增transform()方法

新增方法transform(),用于基于自定义坐标偏移函数,实现对矢量要素的坐标转换,其中自定义函数的输入为N行2列后N行3列的numpy数组,输出形状与输入一致即可,我们可以配合numpy中的apply_along_axis()实现自由的坐标点级别转换计算,而无需关心输入的要素是点线面中的哪种:


2.1.16 新增get_geometry()方法

新增方法get_geometry(),用于将矢量列各要素视作多部件要素,进行快捷位序索引:

24a237c7d42b36a82aba95b6cb3c1187.png

2.1.17 新增dwithin()方法

新增方法dwithin(),用于快速判断矢量A是否在矢量B目标的指定距离内:

1d3a916555d666fe3c79c3eada691a10.png

2.1.18 新增to_geo_dict()方法

新增方法to_geo_dict(),用于将GeoDataFrame快捷转化为GeoJSON格式字典数据结构:

c5e25608df6a03d66510407fb145db5b.png

2.2 功能增强

接下来我们来了解新版本中获得功能增强的一些主要API:

2.2.1 空间连接新增dwithin型空间关系判断

针对sjoin()方法,新增了dwithin型空间关系判断,使得我们可以在geopandas中真正意义上直接实现“匹配与目标要素距离在XXX以内的纪录行”:

b6965f4727b0b67330d8f4df01a81ccb.png

2.2.2 配合pd.read_csv指定矢量列类型

在新版本中,我们可以将GeoDataFrame写出为csv格式,并在使用pd.read_csv()读取时,通过dtype参数将对应列指定解析为矢量类型:

c60b403df9f03d4e8fcef8a5a0810586.png

2.2.3 to_json()新增参数show_bbox、drop_id、to_wgs84

针对GeoDataFrame.to_json(),新增参数show_bboxdrop_idto_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
))

a722e960e72e2322bb295e31c2d72636.png

2.2.4 空间连接新增参数on_attribute

针对GeoDataFrame.sjoin(),新增参数on_attribute,用于额外施加常规表连接中的指定字段相等条件,相当于设置有效的on_attribute参数后,空间连接的结果将既满足空间关系,又满足字段匹配关系:

73129d0182e9ce6d7a16805eccefbd59.png

2.3 标记为废弃的API

新版本中也新增了一系列标记为废弃的API,将会在未来某个版本正式移除,请注意及时调整你的相关代码逻辑,其中主要的有:

  • unary_union将废弃,更换为union_all()

88451bcf02a27bc949ca1c6a71f2114b.png

  • use_pygeos将废弃并在1.1版本中正式移除

由于pygeos已经合并入geopandas底层矢量计算所依赖的新版shapely中,因此对应的use_pygeos设置项也将退出历史舞台:

fec1956c98a730f568ec68de27b11d7f.png

  • crs属性赋值以修改坐标系的方式将在未来版本被禁用,请统一使用set_crs()代替

47d59ce140a33026c0fc9689f2614493.png

相关文章
|
10天前
|
Ubuntu Shell Linux
pyenv 管理多个 Python 版本(1)
pyenv 管理多个 Python 版本(1)
130 86
pyenv 管理多个 Python 版本(1)
|
5天前
|
Shell Python
使用 pyenv 来管理多个 Python 版本(2)
使用 pyenv 来管理多个 Python 版本(2)
97 71
使用 pyenv 来管理多个 Python 版本(2)
|
2月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
329 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
1月前
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
98 19
|
2月前
|
Python Windows
查看Python版本
【10月更文挑战第8天】查看Python版本
35 2
|
2月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
447 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
2月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
515 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
3月前
|
开发者 Python
Python 的主流版本:Python 3.x
Python 的主流版本:Python 3.x
117 2
|
3月前
|
Linux 编译器 开发工具
快速在linux上配置python3.x的环境以及可能报错的解决方案(python其它版本可同样方式安装)
这篇文章介绍了在Linux系统上配置Python 3.x环境的步骤,包括安装系统依赖、下载和解压Python源码、编译安装、修改环境变量,以及常见安装错误的解决方案。
300 1
|
4月前
|
定位技术 API C++
Python GIS神器shapely 2.0新版本来了
Python GIS神器shapely 2.0新版本来了
下一篇
DataWorks