iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 30
2
AI & Data

後端前進PostgreSQL系列 第 30

後端前進PostgreSQL補充GIS以及完賽心得

最後一天決定把GIS補充完整一點,介紹一下 shapefile 它是儲存地理資訊的檔案,並分享一下完賽感想!

介紹 shapefile

ESRI Shapefile(shp),或簡稱shapefile,是美國環境系統研究所公司(ESRI)開發的空間資料開放格式。

Shapefile 用來儲存像是建築物、道路、城市邊界...的地理資料。

Shapefile 結構

是由一組不同副檔名的檔案所組合而成,每一種檔案都各自有其用途,通常下載到的 Shapefile 檔案,會是一個 zip壓縮檔,解壓縮後會有以下內容

副檔名 內容說明
.shp 主要檔案,主要記載地理特質的圖形。
.shx 主檔內,地理特質的索引檔案。
.dbf 格式為dBASE,地理資料屬性資訊的資料庫檔案
.xml 存有Shapefile 中介資料的 XML檔案
.prj 存有座標系統資訊的投影檔案。

文件上所述,前三個副檔名的檔案就已涵蓋Shapefile運作所有必備資料。其他類型的檔案則是非必要的,你可以將Shapefile載入資料庫中,方便我們取得其空間物件和相關屬性。


載入 Shapefile 方法

有以下兩種方式載入Shapefile 檔案到資料庫中。

  1. PostGIS 套件中包含了一個 Shapefile 匯入匯出工具,具有一個簡單的圖形介面可以載入。 (Windowns)
  2. Mac 只有指令列 shp2pgsql 的方式載入。(Windowns 也可以使用)

shp2pgsql 載入

隨便下載一個Shapefile 檔案來看看,行政院農業委員會資料開放平台 野生動物保護區 (剛剛在檢查文章的時候網站好像壞掉了!/images/emoticon/emoticon04.gif)的地理圖資。

馬上補上其他連結 http://data.taichung.gov.tw/dataset/b27b59cb-aee7-4cf3-9306-a4eb23ac8126
(台中市政府資料空開平台 臺中市警察分局轄區範圍_TWD97)

下載下來是一個 zip 的壓縮檔,解壓縮如下圖,內容就是最基本的三個檔案

https://ithelp.ithome.com.tw/upload/images/20191016/20105865Xdqph3Fgjp.png

簡單一個指令,就可以把網路上下載下來的地理資訊檔,匯入資料庫的欄位中。

shp2pgsql -I -s SRID -W encoding shapefile_name table_name | psql -d database -U user

替換掉上方指令 SRIDencodingshapefile_nametable_namedatabaseuser

介紹幾個之前沒有介紹過的!

  • encoding 地理圖資檔案的文字編碼
  • shapefile_name .shp 檔案路徑,必須是完整的路徑包含副檔名
  • table_name 要匯入的資料表

指令內還有 -I 表示在資料表的 geometry 欄位加上GiST索引!忘記這個索引類型是什麼的可以看這篇 PostGIS 分析空間資料 (4) - 建立欄位、GiST索引 這樣就可以得到完整,包裝好的地理圖資資料!

➜  ~ shp2pgsql -I -s 3826 -W big5 gis-shapefile/VA150002V02.shp shp_test | psql -d animal -U postgres

上面指令!我目前在 ~ 表示在家目錄,我在家目錄裡,建立一個資料夾 gis-shapefile 並放入剛剛從 台中市政府資料空開平台 下載回來的 Shapefile臺中市警察分局轄區範圍_TWD97 資料。

接下來確認一下SRID TWD97 的 SRID 是 3826,編碼的部分,看資料格式填寫,如上下載的資料 big5 編碼,再附上完整路徑,再填入預計新增的資料表,最後最後 選擇資料庫,以及該資料庫的擁有者!就可以囉~

匯入結果

打開pgAdmin4 看看 animal 資料庫中,多了一個 shp_test 資料表,查看資料表最後一個欄位,就是空間物件的資料 geom 欄位, geom 欄位右邊紅框,有一個眼睛的按鈕!

https://ithelp.ithome.com.tw/upload/images/20191016/20105865GwEo9TH2Q3.png

按下去眼睛的按鈕,空間資料都顯示出來了! 看到圖形是不是比較有成就感呀~/images/emoticon/emoticon07.gif

https://ithelp.ithome.com.tw/upload/images/20191016/201058654B4x3Z6fhQ.png


完賽心得

很高興,可以撐到現在!今年第一次參加鐵人賽,報名了兩個系列,分別是 Laravel 以及 PostgreSQL。

這系列的 PostgreSQL 應該算非常非常入門,一邊學習一邊分享我的所見所聞,寫到最後遇到錯誤,一直寫不出來,也讓後面原本的規劃越來越亂。

雖然計劃趕不上變化,但還是盡力完成,過程中讓我學到很多東西,未來就持續努力~/images/emoticon/emoticon08.gif

今天過後事情就真的變得比較閒了!開始可以靜下心來在努力的規劃下一段的任務。

參考資料

Shapefile維基百科

最後

我的部落格 https://www.vnewin.com/ 如果有其他的分享會不定時的發表在部落格,也歡迎多關注我的部落格!


上一篇
PostgreSQL 黑畫面操作 - MAC 初探psql紀錄 (3)
系列文
後端前進PostgreSQL30

1 則留言

0
阿展展展
iT邦好手 1 級 ‧ 2020-02-08 13:57:39

恭喜完賽 \0.0/
截圖好用心 還有陰影呢!!/images/emoticon/emoticon32.gif

我要留言

立即登入留言