(數據科學學習手札93)利用geopandas與PostGIS進行交互

本文完整代碼及數據已上傳至個人Github倉庫https://github.com/CNFeffery/DataScienceStudyNotesgit

1 簡介

  PostGIS做爲postgresql針對地理空間數據的拓展功能,能夠幫助咱們有效管理和固化空間矢量數據,以及開展空間數據分析,而geopandas做爲Python生態中優秀的空間數據分析處理工具,天然在與PostGIS進行交互方面開發了相應的功能。github

  本文就將針對如何利用geopandasPostGIS空間數據庫寫入及讀取矢量數據進行介紹。sql

圖1

2 geopandas與PostGIS進行交互

  爲了能在geopandas中與postgresqlPostGIS創建鏈接,請確保如下3個庫已經安裝:數據庫

pip install sqlalchemy, psycopg2, geoalchemy2

  接下來咱們須要保證postgresql中存在能夠鏈接的空間數據庫,在pgAdmin界面內新建數據庫,譬如這裏咱們新建數據庫demojson

圖2
圖3

  點擊保存成功建立數據庫以後,要注意這時咱們的demo數據庫只是個普通的postgresql數據庫,是不支持空間相關功能的,在對應數據庫上右鍵打開查詢工具:bash

圖4

  在彈出的界面中輸入CREATE EXTENSION postgis;並執行,成功以後咱們的數據庫就變成了空間數據庫,支持空間相關的各類功能:app

圖5

  至此咱們的準備工做就已結束,接下來咱們就能夠直接在geopandas中讀寫PostGIS數據表。工具

2.1 利用geopandas向PostGIS寫入數據

  爲方便演示,這裏咱們以簡化版的重慶市區縣矢量面數據爲例,首先咱們導入所需的geopandas(注意geopandas版本必須大於等於0.8.0)與sqlalchemy(後者用於建立數據庫鏈接),並讀入重慶市.geojson文件,你能夠在開頭的Github倉庫找到它:post

圖6

  接着咱們來演示如何經過geopandasPostGIS推送矢量信息表,使用到的API爲to_postgis(),其主要參數以下:3d

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的交互。


  以上就是本文的所有內容,若有疑問歡迎在評論區與我討論~

相關文章
相關標籤/搜索