Python GIS神器shapely 2.0新版本来了

简介: Python GIS神器shapely 2.0新版本来了

1 简介

大家好我是费老师,我写过很多篇介绍geopandas相关技术的文章,而geopandas之所以如此高效易用,成为Python GIS生态中的翘楚,离不开其底层依赖库shapely对其矢量计算功能的支持。

不仅是作为geopandas的基石,直接使用shapely中极其丰富的各种矢量操作API,也可以帮助我们轻松实现各种细致入微的矢量操作。而就在几天前,shapely发布了其颇具里程碑意义的2.0正式版本,为我们带来了更加澎湃的运算性能提升,以及更稳定更丰富的新功能,今天的文章费老师我就来带大家一览shapely 2.0版本中的主要新特性🥳。

2 shapely 2.0重要新特性一览

通常我们不会专门去安装shapely,在安装geopandas的过程中它就顺带被安装上了,在我的本地示例虚拟环境中shapely原先的版本为1.8.5,通过执行conda update shapely -c conda-forge -y可将其稳定升级到2.0.0以上的正式版本:

接下来我们来看看本次大的版本更新中带来了哪些重要内容:

2.1 向量化矢量操作带来高达百倍的性能提升

新版shapely重写了底层对C++库GEOS的封装方式,大幅度降低了冗余计算成本,并且吸收了pygeos中的底层逻辑,对各种常用接口进行「ufunc向量化」运算支持,使得我们可以配合numpy快速实现,以contains()为例,基于shapely的顶级API接口:

在上面的例子中,相较于标量一对一运算列表批量运算,新的向量化运算分别取得了500多倍和70多倍的运算加速😉。

目前shapely的所有顶级API,以及shapely.ops等子模块下的顶级API均已支持向量化运算特性,具体见shapely中的API文档是否如下图所示提及ufunc

2.2 矢量对象不可变

在以前的版本中,shapely中的矢量要素对象是可变的,譬如对于LineString要素,可以在被创建后,通过为其coords属性赋值新的坐标串信息以改变其矢量信息:


而从2.0.0开始,shapely中所有的矢量要素变为不可变对象,这意味着它们「可hash」,譬如可以作为字典的键,或pandas分组运算的分组依据等:

2.3 矢量要素类可作为顶级API使用

从上面的几个例子中你也可以发现,新版shapely中我们可以直接从shapely导入常用的各种矢量要素类,这将作为from shapely.geometry import XXX方式的备选方式:

2.4 多部件要素不再可视作序列型对象

在以前的版本中,多部件要素譬如MultiPoint可以直接视作数组对象来直接按位置索引或迭代,而从2.0.0开始,原有的方式会引发错误,请注意更换为使用其geoms属性实现相关操作:

2.5 矢量要素支持精度控制

2.0.0开始,shapely新增API接口set_precision()get_precision()用于针对矢量要素进行坐标精度设置和精度查询,非常的方便:

2.6 基于GEOS新增大量新功能函数

随着对底层GEOS依赖库的版本更新(当前依赖版本:3.11.1),一大批新的实用功能函数得以被添加到shapely中,由于数量非常众多,下面我仅对其中的部分典型新功能函数做介绍:

  • extract_unique_points()

通过新增的函数extract_unique_points(),我们可以从指定要素中快速提取去重后的折点要素:

  • node()

通过新增的函数node(),我们可以轻松地从线要素中提取出彼此不交叉的片段:

  • minimum_bounding_circle()与minimum_bounding_radius()

通过minimum_bounding_circle()minimum_bounding_radius()我们可以快速得到目标要素的最小外接圆及其对应半径:

  • dwithin()

通过dwithin(),我们可以快速判断要素之间的距离是否小于所给定的阈值:

2.7 新增force_2d()、force_3d()函数

通过新增的快捷函数force_2d()force_3d(),我们可以直接为指定要素移除/添加z轴信息:

相关文章
|
数据可视化 JavaScript 前端开发
[Python可视化]一种极具特色(但是并没有什么用)的GIS专题图可视化方法
[Python可视化]一种极具特色(但是并没有什么用)的GIS专题图可视化方法
93 0
|
3月前
|
数据挖掘 定位技术 API
Python GIS神器geopandas 1.0版本来了
Python GIS神器geopandas 1.0版本来了
|
3月前
|
算法 数据可视化 定位技术
QGIS+Conda+jupyter玩转Python GIS
QGIS+Conda+jupyter玩转Python GIS
|
6月前
|
机器学习/深度学习 数据挖掘 定位技术
地理数据分析:Python在GIS中的应用
【4月更文挑战第12天】本文探讨了Python在GIS中的应用优势和实践,包括其简单易学、开源、强大的数据处理能力以及丰富的GIS库。Python用于地理数据分析,涉及数据获取与处理、空间数据管理、空间分析、地图制作和机器学习。案例展示Python在城市规划、环境保护、资源管理和灾害响应中的作用。通过学习和实践,可以掌握Python在GIS中的技能。
293 0
|
Linux 定位技术 数据格式
Python与开源GIS:开始使用GDAL
Python与开源GIS:开始使用GDAL
293 0
|
存储 JavaScript 数据挖掘
微软行星云计算Microsoft Planetary Computer 账号内测申请开通和如何根据自己的需求配置电脑环境(R/python/GIS等)
微软行星云计算Microsoft Planetary Computer 账号内测申请开通和如何根据自己的需求配置电脑环境(R/python/GIS等)
334 0
微软行星云计算Microsoft Planetary Computer 账号内测申请开通和如何根据自己的需求配置电脑环境(R/python/GIS等)
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。