(数据科学学习手札143)为geopandas添加gdb文件写出功能
本文示例代码已上传至我的
Github
仓库https://github.com/CNFeffery/DataScienceStudyNotes
1 简介
大家好我是费老师,很多读者朋友跟随着我先前写作的基于geopandas的空间数据分析系列教程文章(快捷访问地址:https://www.cnblogs.com/feffery/tag/geopandas/
),掌握了有关geopandas
的诸多实用方法,从而更方便地在Python
中处理分析GIS
数据。其中在文件IO篇中给大家介绍过针对ESRI GeoDataBase
格式的文件(也就是大家简称的gdb
文件),可以在指定图层名layer
参数后进行读取,但无法进行gdb
文件的写出操作。
实际上geopandas
是具有写出矢量数据到gdb
文件的能力的,只是需要额外配置一些软件库,今天的文章中,我就来带大家学习如何简单快捷地给geopandas
补充gdb
文件写出功能。
2 为geopandas补充gdb文件写出功能
2.1 为gdal添加FileGDB插件
在geopandas
0.11版本之后,针对矢量文件的读写有默认的'fiona'
和可选的'pyogrio'
两种引擎,请注意,本文的方案仅适用于默认的'fiona'
引擎。
而fiona
底层依赖的则是著名的栅格矢量数据转换框架gdal
,因此我们要给geopandas
添加gdb
写出功能,本质上是需要给gdal
添加相关功能。
搞清楚问题的关键后,下面我们开始操作,这里为了方便演示测试,我们利用conda
新建一个geopandas
虚拟环境,顺便把jupyterlab
也装上,全部命令如下,直接全部粘贴到终端执行即可:
conda create -n geopandas-write-gdb-test python=3.8 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main -y
conda activate geopandas-write-gdb-test
conda install geopandas -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge -y
pip install jupyterlab -i https://pypi.tuna.tsinghua.edu.cn/simple
全部执行完之后,我们可以先查看默认情况下fiona
有哪些已有的读写驱动:
import fiona
fiona.supported_drivers
可以看到其中列出的'OpenFileGDB'
就是gdal
中默认自带的针对gdb
文件的驱动,其对应的值为'r'
说明它只能针对gdb
文件进行读取,我们要想写出gdb
文件,需要额外配置添加Esri
官方开发的FileGDB
驱动。
第一步,我们需要去下载FileGDB
驱动文件,Esri
官方Github
仓库:https://github.com/Esri/file-geodatabase-api
,按照https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
上有关gdal
使用FileGDB
插件的额外说明,我选择下载FileGDB
的版本为https://github.com/Esri/file-geodatabase-api/blob/master/FileGDB_API_1.5.1/FileGDB_API_1_5_1-VS2015.zip
。
下载到本地解压后,因为我是64位windows
系统,所以从bin64
目录下复制FileGDBAPI.dll
文件,粘贴到我们前面利用conda
新建的虚拟环境根目录下的Library\bin
里。
这个目录找起来很简单,因为所有用conda
建立的虚拟环境,默认都位于你的conda
安装根目录的envs
目录下,我的conda
安装根目录在C:\Conda
,因此我需要粘贴前面文件的目标目录为C:\Conda\envs\geopandas-write-gdb-test\Library\bin
:
第二步,我们还需要下载ogr_FileGDB.dll
这个文件,我是通过OSGeo4W
下载的,有些麻烦,为了方便广大读者朋友使用,我在百度云盘分享了一个备份(链接:https://pan.baidu.com/s/1VEtN6JAReFsDhnWl_8v6Eg
提取码:w2s7),大家将其下载下来放置于前面FileGDBAPI.dll
同级目录下的gdalplugins
目录中即可:
第三步,完成了这些操作后,我们就已经搞定了,这时回到fiona
中再次查看支持的驱动,可以看到多了FileGDB
,且值为'raw'
,这代表我们已经拥有了写出gdb
文件的能力:
2.2 在geopandas中测试写出gdb文件
至此我们就可以进行gdb
文件的写出了,只需要在to_file()
中指定driver='FileGDB'
,并设置好对应的图层名layer
参数即可:
import geopandas as gpd
from shapely.geometry import Point, LineString, Polygon
demo_point_layer = gpd.GeoDataFrame(
{
'数据字段测试': ['点要素测试数据字段测试'],
'geometry': [Point(0, 0)]
},
crs='EPSG:4326'
)
demo_linestring_layer = gpd.GeoDataFrame(
{
'数据字段测试': ['线要素测试数据字段测试'],
'geometry': [LineString([(0, 0), (1, 1)])]
},
crs='EPSG:4326'
)
demo_polygon_layer = gpd.GeoDataFrame(
{
'数据字段测试': ['面要素测试数据字段测试'],
'geometry': [Polygon([(0, 0), (1, 1), (1, 0)])]
},
crs='EPSG:4326'
)
# 写出到示例gdb文件中
demo_point_layer.to_file('./demo.gdb', layer='点图层测试', driver='FileGDB')
demo_linestring_layer.to_file('./demo.gdb', layer='线图层测试', driver='FileGDB')
demo_polygon_layer.to_file('./demo.gdb', layer='面图层测试', driver='FileGDB')
查看目标gdb
文件的所有图层名:
读入查看矢量,在读入时建议不设置driver
参数,因为默认的OpenFileGDB
驱动读取gdb
文件要更快:
其中线要素与面要素读进来不知为何变成了多部件要素类型,这其实不影响在geopandas
中进行分析使用,但如果实在介意,可以直接基于数值唯一的某个字段进行dissolve()
操作即可恢复原样:
以上操作适用于windows
系统,至于linux
系统,且容我日后研究出来后再分享给大家。
以上就是本文的全部内容,欢迎在评论区与我进行讨论~
(数据科学学习手札143)为geopandas添加gdb文件写出功能的更多相关文章
- (数据科学学习手札89)geopandas&geoplot近期重要更新
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 最近一段时间(本文写作于2020-07-1 ...
- (数据科学学习手札111)geopandas 0.9.0重要新特性一览
本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在几天前,geopandas释放了其最新正式版 ...
- (数据科学学习手札139)geopandas 0.11版本重要新特性一览
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...
- (数据科学学习手札129)geopandas 0.10版本重要新特性一览
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...
- (数据科学学习手札146)geopandas中拓扑非法问题的发现、诊断与修复
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,geopandas作为在Pyt ...
- (数据科学学习手札134)pyjanitor:为pandas补充更多功能
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 pandas发展了如此多年,所包含的功能已 ...
- (数据科学学习手札75)基于geopandas的空间数据分析——坐标参考系篇
本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的数据结 ...
- (数据科学学习手札80)用Python编写小工具下载OSM路网数据
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
随机推荐
- 密码学系列之:在线证书状态协议OCSP详解
目录 简介 PKI中的CRL CRL的缺点 CRL的状态 OCSP的工作流程 OCSP的优点 OCSP协议的细节 OCSP请求 OCSP响应 OCSP stapling 总结 简介 我们在进行网页访问 ...
- jupyter 反向代理配置
抓了下包,看了一下WS连不上,参考这个,问题解决 location / { proxy_pass http://127.0.0.1:8813/; # JUPYTER_PORT 为 Jupyter 运行 ...
- Solution -「CF520E」Pluses everywhere
Step 1. 转化一步题目:考虑有 \(n\) 个小球,每个小球有 \(a_i\) 的价值,\(m\) 个板子,把板子插进小球间的空隙,且不能插在第 \(1\) 个球之前与第 \(n\) 个球之后. ...
- 可视化查询(sp_helptext)——快速查询包含指定字符串的存储过程(附源码)
前言 在开发中,随着业务逻辑的调整,修改存储过程是必不可免的. 那怎么定位到需要修改的存储过程呢?一个一个的点开查询?存储过程少的话还行,一旦存储过程过多,这样是很浪费时间的,一个不注意还会遗漏掉. ...
- Webpack干货系列 | 在 Webpack 5 集成 ESLint 的方法
程序员优雅哥(youyacoder)简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解运用Webpack 5 中集成 ESLint 的方 ...
- jdbc 06: 实现登陆页面
jdbc连接mysql,实现简单的登陆验证 package com.examples.jdbc.o6_实现登录界面; import java.sql.*; import java.util.HashM ...
- VMware虚拟机安装基于Debian的统信UOS系统
统信操作系统(UOS)是一款美观易用.安全可靠的国产桌面操作系统.UOS预装了Google Chrome.WPS Office.搜狗输入法以及一系列原生应用.它既能让您体验到丰富多彩的娱乐生活,也可以 ...
- 如何创建一个带诊断工具的.NET镜像
现阶段的问题 现在是云原生和容器化时代,.NET Core对于云原生来说有非常好的兼容和亲和性,dotnet社区以及微软为.NET Core提供了非常方便的镜像容器化方案.所以现在大多数的dotnet ...
- 事务_基本演示和事务_默认自动提交&手动提交
事务的基本介绍 概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败 操作: 开启事务:start transaction; 回滚:rollback; 提交:co ...
- Bika LIMS 开源LIMS集—— SENAITE的使用(分析/测试、方法)
分析/测试项目分类(Test Category) 定义检测项目的分类,例如理化检测.微生物检测,或者按样品的维度定义,例如食品检测.水质检测等. 分析方法(Test Method) 定义实验室分析方法 ...