(数据科学学习手札93)利用geopandas与PostGIS进行交互
本文完整代码及数据已上传至我的
Github仓库https://github.com/CNFeffery/DataScienceStudyNotes
1 简介
PostGIS作为postgresql针对地理空间数据的拓展功能,可以帮助我们有效管理和固化空间矢量数据,以及开展空间数据分析,而geopandas作为Python生态中优秀的空间数据分析处理工具,自然在与PostGIS进行交互方面开发了相应的功能。
本文就将针对如何利用geopandas向PostGIS空间数据库写入及读取矢量数据进行介绍。
图1
2 geopandas与PostGIS进行交互
为了能在geopandas中与postgresql和PostGIS建立连接,请确保以下3个库已经安装:
pip install sqlalchemy, psycopg2, geoalchemy2
接下来我们需要保证postgresql中存在可以连接的空间数据库,在pgAdmin界面内新建数据库,譬如这里我们新建数据库demo:
图2
图3
点击保存成功创建数据库之后,要注意这时我们的demo数据库只是个普通的postgresql数据库,是不支持空间相关功能的,在对应数据库上右键打开查询工具:
图4
在弹出的界面中输入CREATE EXTENSION postgis;并执行,成功之后我们的数据库就变成了空间数据库,支持空间相关的各种功能:
图5
至此我们的准备工作就已结束,接下来我们就可以直接在geopandas中读写PostGIS数据表。
2.1 利用geopandas向PostGIS写入数据
为方便演示,这里我们以简化版的重庆市区县矢量面数据为例,首先我们导入所需的geopandas(注意geopandas版本必须大于等于0.8.0)与sqlalchemy(后者用于创建数据库连接),并读入重庆市.geojson文件,你可以在开头的Github仓库找到它:
图6
接着我们来演示如何通过geopandas向PostGIS推送矢量信息表,使用到的API为to_postgis(),其主要参数如下:
name:字符型,用于指定推送到
PostGIS后的表名称con:
sqlalchemy.engine.Engine对象,用于建立与数据库的连接if_exists:字符型,用于指定当数据库中已存在同名表时的相应策略,
'fail'表示抛出错误,'replace'指替换,'append'指向原表追加,默认为failschema:字符型,用于指定
schema,默认为'public'index:bool型,用于指定是否保留index信息
index_label:字符型或序列,当index被设置为True时为index信息指定字段名称
首先需要利用sqlalchemy中的create_engine来创建数据库连接,传入字符串包含了数据库类型、用户名、密码、主机IP、端口以及数据库名称,格式为:
数据库类型://用户名:密码@主机IP:端口/数据库名称
对应本例:
图7
在pgAdmin中随即就能查看到刚才写入的数据表:
图8
图9
2.2 利用geopandas从PostGIS读取数据
从PostGIS中读取数据要用到另一个API,对应geopandas的read_postgis(),其主要参数如下:
sql:字符型,对应从空间数据库中提取数据的SQL语句
con:同
to_postgis()geom_col:字符型,用于指定将哪一列作为
GeoDataFrame的矢量列crs:用于指定坐标参考系,同
GeoDataFrame的坐标参考系设定方式index_col:字符型或列表,用于指定将哪些列作为索引
parse_dates:列表,用于预解析时间类型数据
接着我们从PostGIS中读取刚才写入的表:
图10
简简单单,我们就实现了与PostGIS的交互。
以上就是本文的全部内容,如有疑问欢迎在评论区与我讨论~
(数据科学学习手札93)利用geopandas与PostGIS进行交互的更多相关文章
- (数据科学学习手札129)geopandas 0.10版本重要新特性一览
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...
- (数据科学学习手札146)geopandas中拓扑非法问题的发现、诊断与修复
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,geopandas作为在Pyt ...
- (数据科学学习手札89)geopandas&geoplot近期重要更新
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 最近一段时间(本文写作于2020-07-1 ...
- (数据科学学习手札139)geopandas 0.11版本重要新特性一览
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...
- (数据科学学习手札111)geopandas 0.9.0重要新特性一览
本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在几天前,geopandas释放了其最新正式版 ...
- (数据科学学习手札75)基于geopandas的空间数据分析——坐标参考系篇
本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的数据结 ...
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...
- (数据科学学习手札36)tensorflow实现MLP
一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...
- (数据科学学习手札80)用Python编写小工具下载OSM路网数据
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
随机推荐
- ASP.NET CORE之中间件-自定义异常中间件
参考资料:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1 1.一般A ...
- split().reverse().join()代码解析
split() 方法用于把一个字符串分割成字符串数组. reverse() 方法用于颠倒数组中元素的顺序. join() 方法用于把数组中的所有元素放入一个字符串.
- webpack 编译时,提示 Unexpected token: keyword «const»
代码里如果用到const 关键字,编译报这种错误 解决方法: npm install terser-webpack-plugin --save 然后,webpack配置: const TerserPl ...
- 第三节:Centos下安装Mysql5.6数据库
1.下载mysql5.6版本 [官网-需要什么版本自己去找]https://dev.mysql.com/downloads/mysql/5.6.html [版本]linux通用 cd /usr/loc ...
- Day17_购物车
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 注:实验 ...
- pandas_DateFrame的创建
# DateFrame 的创建,包含部分:index , column , values import numpy as np import pandas as pd # 创建一个 DataFrame ...
- PHP NULL 合并运算符
HP 7 新增加的 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式. NULL 合并运算符会判断变量是否存在且值不为NULL,如果是,它就会返回自身的值,否则返回它的第二 ...
- Python os.mknod() 方法
概述 os.mknod() 方法用于创建一个指定文件名的文件系统节点(文件,设备特别文件或者命名pipe).高佣联盟 www.cgewang.com 语法 mknod()方法语法格式如下: os.mk ...
- Unicode 字符串
Unicode 字符串 Python 中定义一个 Unicode 字符串和定义一个普通字符串一样简单:高佣联盟 www.cgewang.com >>> u'Hello World ! ...
- UOJ #22 UR #1 外星人
LINK:#22. UR #1 外星人 给出n个正整数数 一个初值x x要逐个对这些数字取模 问怎样排列使得最终结果最大 使结果最大的方案数又多少种? n<=1000,x<=5000. 考 ...