最後一天決定把GIS補充完整一點,介紹一下 shapefile 它是儲存地理資訊的檔案,並分享一下完賽感想!
ESRI Shapefile(shp),或簡稱shapefile,是美國環境系統研究所公司(ESRI)開發的空間資料開放格式。
Shapefile 用來儲存像是建築物、道路、城市邊界...的地理資料。
是由一組不同副檔名的檔案所組合而成,每一種檔案都各自有其用途,通常下載到的 Shapefile 檔案,會是一個 zip壓縮檔,解壓縮後會有以下內容
副檔名 | 內容說明 |
---|---|
.shp | 主要檔案,主要記載地理特質的圖形。 |
.shx | 主檔內,地理特質的索引檔案。 |
.dbf | 格式為dBASE,地理資料屬性資訊的資料庫檔案 |
.xml | 存有Shapefile 中介資料的 XML檔案 |
.prj | 存有座標系統資訊的投影檔案。 |
文件上所述,前三個副檔名的檔案就已涵蓋Shapefile運作所有必備資料。其他類型的檔案則是非必要的,你可以將Shapefile載入資料庫中,方便我們取得其空間物件和相關屬性。
有以下兩種方式載入Shapefile 檔案到資料庫中。
shp2pgsql
的方式載入。(Windowns 也可以使用)隨便下載一個Shapefile 檔案來看看,行政院農業委員會資料開放平台 野生動物保護區 (剛剛在檢查文章的時候網站好像壞掉了!)的地理圖資。
馬上補上其他連結 http://data.taichung.gov.tw/dataset/b27b59cb-aee7-4cf3-9306-a4eb23ac8126
(台中市政府資料空開平台 臺中市警察分局轄區範圍_TWD97)
下載下來是一個 zip 的壓縮檔,解壓縮如下圖,內容就是最基本的三個檔案
簡單一個指令,就可以把網路上下載下來的地理資訊檔,匯入資料庫的欄位中。
shp2pgsql -I -s SRID -W encoding shapefile_name table_name | psql -d database -U user
替換掉上方指令 SRID
、encoding
、shapefile_name
、table_name
、database
、user
介紹幾個之前沒有介紹過的!
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
欄位右邊紅框,有一個眼睛的按鈕!
按下去眼睛的按鈕,空間資料都顯示出來了! 看到圖形是不是比較有成就感呀~
很高興,可以撐到現在!今年第一次參加鐵人賽,報名了兩個系列,分別是 Laravel 以及 PostgreSQL。
這系列的 PostgreSQL 應該算非常非常入門,一邊學習一邊分享我的所見所聞,寫到最後遇到錯誤,一直寫不出來,也讓後面原本的規劃越來越亂。
雖然計劃趕不上變化,但還是盡力完成,過程中讓我學到很多東西,未來就持續努力~
今天過後事情就真的變得比較閒了!開始可以靜下心來在努力的規劃下一段的任務。
我的部落格 https://www.vnewin.com/
如果有其他的分享會不定時的發表在部落格,也歡迎多關注我的部落格!