(資料科學學習手札93)利用geopandas與PostGIS進行互動

費弗裡發表於2020-08-11

本文完整程式碼及資料已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  PostGIS作為postgresql針對地理空間資料的擴充功能,可以幫助我們有效管理和固化空間向量資料,以及開展空間資料分析,而geopandas作為Python生態中優秀的空間資料分析處理工具,自然在與PostGIS進行互動方面開發了相應的功能。

  本文就將針對如何利用geopandasPostGIS空間資料庫寫入及讀取向量資料進行介紹。

(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖1

2 geopandas與PostGIS進行互動

  為了能在geopandas中與postgresqlPostGIS建立連線,請確保以下3個庫已經安裝:

pip install sqlalchemy, psycopg2, geoalchemy2

  接下來我們需要保證postgresql中存在可以連線的空間資料庫,在pgAdmin介面內新建資料庫,譬如這裡我們新建資料庫demo

(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖2
(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖3

  點選儲存成功建立資料庫之後,要注意這時我們的demo資料庫只是個普通的postgresql資料庫,是不支援空間相關功能的,在對應資料庫上右鍵開啟查詢工具:

(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖4

  在彈出的介面中輸入CREATE EXTENSION postgis;並執行,成功之後我們的資料庫就變成了空間資料庫,支援空間相關的各種功能:

(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖5

  至此我們的準備工作就已結束,接下來我們就可以直接在geopandas中讀寫PostGIS資料表。

2.1 利用geopandas向PostGIS寫入資料

  為方便演示,這裡我們以簡化版的重慶市區縣向量面資料為例,首先我們匯入所需的geopandas(注意geopandas版本必須大於等於0.8.0)與sqlalchemy(後者用於建立資料庫連線),並讀入重慶市.geojson檔案,你可以在開頭的Github倉庫找到它:

(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖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:埠/資料庫名稱

  對應本例:

(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖7

  在pgAdmin中隨即就能檢視到剛才寫入的資料表:

(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖8
(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖9

2.2 利用geopandas從PostGIS讀取資料

  從PostGIS中讀取資料要用到另一個API,對應geopandasread_postgis(),其主要引數如下:

sql:字元型,對應從空間資料庫中提取資料的SQL語句

con:同to_postgis()

geom_col:字元型,用於指定將哪一列作為GeoDataFrame的向量列

crs:用於指定座標參考系,同GeoDataFrame的座標參考系設定方式

index_col:字元型或列表,用於指定將哪些列作為索引

parse_dates:列表,用於預解析時間型別資料

  接著我們從PostGIS中讀取剛才寫入的表:

(資料科學學習手札93)利用geopandas與PostGIS進行互動
圖10

  簡簡單單,我們就實現了與PostGIS的互動。


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

相關文章