(数据科学学习手札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 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
随机推荐
- OSCP Learning Notes - Exploit(7)
Pre-Exploit Password Attacks Tools: 1. ncrack Ncrack 0.6 ( http://ncrack.org )Usage: ncrack [Options ...
- Python Ethical Hacking - MAC Address & How to Change(2)
FUNCTIONS Set of instructions to carry out a task. Can take input, and return a result. Make the cod ...
- C++ RMQ问题
RMQ问题是区间求最值问题,就是求一个数组第i个到第j个中最大数或最小数的算法. 这个算法有一些倍增思想,也有一些二分思想.具体是一个数组,m[i][j]表示从i开始往后数2的j次方个数的最大值或最小 ...
- 【week1错题集】
day9[2.f] # day9 题2.f ''' 有如下文件,t1.txt,里面的内容为: 葫芦娃,葫芦娃, 一根藤上七个瓜 风吹雨打,都不怕, 啦啦啦啦. 以r模式打开文件,从‘风吹雨打..... ...
- Python中ftplib模块的使用
ftplib模块的主要接口 # from ftplib import FTP #加载ftp模块 # ftp=FTP() #设置变量 # ftp.set_debuglevel(2) #打开调试级别2,显 ...
- 读懂操作系统之快表(TLB)原理(七)
前言 前不久.我们详细分析了TLB基本原理,本节我们通过一个简单的示例再次叙述TLB的算法和原理,希望借此示例能加深我们对TLB(又称之为快表,深入理解计算机系统(第三版)又称之为翻译后备缓冲区)的理 ...
- js 从目标数组中过滤掉 一个数组元素,
标题描述的有点僵硬,大概需求是,从目标数组中过滤掉我想要删除的元素集合,这里使用的是遍历+过滤器的组合,很方便,做个笔记! let old = ["AE_CN_SUPER_ECONOMY_G ...
- IDEA 2020.1.2,IDEA 2020.1.3永久破解(持续更新)
1. 本教程适用于 IntelliJ IDEA 2020.1.3 以下所有版本,请放心食用~2. 本教程适用于 JetBrains 全系列产品,包括 IDEA. Pycharm.WebStorm.Ph ...
- Django学习路3
1.打开 Data Source alt insert 打开 Data Source 找到 db.sqlite3 确定 Download 下载后 TestConnection 测试是否成功 2.项目下 ...
- PHP fopen() 函数
定义和用法 fopen() 函数打开一个文件或 URL. 如果 fopen() 失败,它将返回 FALSE 并附带错误信息.您可以通过在函数名前面添加一个 '@' 来隐藏错误输出. 语法 fopen( ...