我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

(数据科学学习手札162)Python GIS神器geopandas 1.0版本发布

来源:网络 更新时间:2024-06-25 18:31:42

本文完整代码及附件已上传至我的 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


以上就是本文的全部内容,欢迎在评论区与我们进行讨论~