社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python】Python GIS神器geopandas 1.0版本来了

机器学习初学者 • 9 月前 • 130 次点击  
本文完整代码及附件已上传至Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

就在昨天,Python生态中著名的GIS分析库geopandas发布了其1.0.0正式版本。

历经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

新安装或升级完成后,检查一下版本变化,成功升级到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_bboxdrop_idto_wgs84,实现更为定制化的GeoJSON转化:

demo_gdf = gpd.GeoDataFrame(
    {
        'name': ['示例要素'],
        'geometry': [Point(10629)]
    },
    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


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

往期精彩回顾




  • 交流群

欢迎加入机器学习爱好者微信群一起和同行交流,目前有机器学习交流群、博士群、博士申报交流、CV、NLP等微信群,请扫描下面的微信号加群,备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~(也可以加入机器学习交流qq群772479961


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/172092
 
130 次点击