本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

  PostGIS作为postgresql针对地理空间数据的拓展功能,可以帮助我们有效管理和固化空间矢量数据,以及开展空间数据分析,而geopandas作为Python生态中优秀的空间数据分析处理工具,自然在与PostGIS进行交互方面开发了相应的功能。

  本文就将针对如何利用geopandasPostGIS空间数据库写入及读取矢量数据进行介绍。

图1

2 geopandas与PostGIS进行交互

  为了能在geopandas中与postgresqlPostGIS建立连接,请确保以下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

  接着我们来演示如何通过geopandasPostGIS推送矢量信息表,使用到的API为to_postgis(),其主要参数如下:

name:字符型,用于指定推送到PostGIS后的表名称

consqlalchemy.engine.Engine对象,用于建立与数据库的连接

if_exists:字符型,用于指定当数据库中已存在同名表时的相应策略,'fail'表示抛出错误,'replace'指替换,'append'指向原表追加,默认为fail

schema:字符型,用于指定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,对应geopandasread_postgis(),其主要参数如下:

sql:字符型,对应从空间数据库中提取数据的SQL语句

con:同to_postgis()

geom_col:字符型,用于指定将哪一列作为GeoDataFrame的矢量列

crs:用于指定坐标参考系,同GeoDataFrame的坐标参考系设定方式

index_col:字符型或列表,用于指定将哪些列作为索引

parse_dates:列表,用于预解析时间类型数据

  接着我们从PostGIS中读取刚才写入的表:

图10

  简简单单,我们就实现了与PostGIS的交互。


  以上就是本文的全部内容,如有疑问欢迎在评论区与我讨论~

(数据科学学习手札93)利用geopandas与PostGIS进行交互的更多相关文章

  1. (数据科学学习手札129)geopandas 0.10版本重要新特性一览

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...

  2. (数据科学学习手札146)geopandas中拓扑非法问题的发现、诊断与修复

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,geopandas作为在Pyt ...

  3. (数据科学学习手札89)geopandas&geoplot近期重要更新

    本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 最近一段时间(本文写作于2020-07-1 ...

  4. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...

  5. (数据科学学习手札111)geopandas 0.9.0重要新特性一览

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在几天前,geopandas释放了其最新正式版 ...

  6. (数据科学学习手札75)基于geopandas的空间数据分析——坐标参考系篇

    本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的数据结 ...

  7. (数据科学学习手札55)利用ggthemr来美化ggplot2图像

    一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...

  8. (数据科学学习手札36)tensorflow实现MLP

    一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...

  9. (数据科学学习手札80)用Python编写小工具下载OSM路网数据

    本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...

随机推荐

  1. Python Ethical Hacking - Malware Analysis(2)

    Filtering Command Output using Regex #!/usr/bin/env python import smtplib import subprocess import r ...

  2. 牛客练习赛 66C公因子 题解

    原题 原题 思路 考场想复杂了,搞到自闭-- 实际上,因为差值不变,我们可以先差分,求\(\gcd\),便得到答案(考场时想多了,想到了负数.正数各种复杂的处理,但是不需要),最后处理一下即可 代码 ...

  3. 详解 CmProcess 跨进程通信的实现

    CmProcess 是 Android 一个跨进程通信框架,整体代码比较简单,总共 20 多个类,能够很好的便于我们去了解跨进程实现的原理. 个人猜测 CmProcess 也是借鉴了 VirtualA ...

  4. selenium自动爬取网易易盾的验证码

    我们在爬虫过程中难免会遇到一些拦路虎,比如各种各样的验证码,时不时蹦出来,这时候我们需要去识别它来继续我们的工作,接下来我将爬取网一些滑动验证码,然后通过百度的EasyDL平台进行数据标注,创建模型, ...

  5. OFD呼之欲来、来之跚跚,谁之罪?

    软件国产化的浪潮势不可挡,美国逼得逾甚,我们压迫感逾强,唯有奋起直追方慰平生之志. 在板式文档领域,pdf已成为国际标准,亦可称为美国标准:它在该领域一枝独秀,已形成一览众山小之势! pdf出道20余 ...

  6. matplotlib基础汇总_03

    四图 直方图 [直方图的参数只有一个x!!!不像条形图需要传入x,y] hist()的参数 bins 可以是一个bin数量的整数值,也可以是表示bin的一个序列.默认值为10 normed 如果值为T ...

  7. Python os.unlink() 方法

    概述 os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误.高佣联盟 www.cgewang.com 语法 unlink()方法语法格式如下: os.unlink(path) 参 ...

  8. Python 字典(Dictionary) len()方法

    Python 字典(Dictionary) len()方法 描述 Python 字典(Dictionary) len() 函数计算字典元素个数,即键的总数.高佣联盟 www.cgewang.com 语 ...

  9. PHP debug_zval_dump() 函数

    debug_zval_dump 函数用于查看一个变量在zend引擎中的引用计数.类型信息. 版本要求:PHP 4 >= 4.2.0, PHP 5, PHP 7高佣联盟 www.cgewang.c ...

  10. PDOStatement::fetchAll

    PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)高佣联盟 www.cgewang.c ...