在使用PostgreSQL作為存放空間資料的資料庫時,就必須要安裝postgis extension。於PostgreSQL創建databse後,於SQL QUERY中執行下列程式碼,將資料庫擴充成空間資料庫。
CREATE EXTENSION postgis;
擴充完後,就能利用PostGIS PostGIS Bundle (版本為3) 中的PostGIS Shapefile Import/Export這個工具匯入shp檔案,網路上有許多資源可以參考,這邊就不做教學。
利用此工具匯入,就必然會遇到常見編碼的問題,即便在PostgreSQL中的Character type是設定為Chinese Taiwan 950,使用PostGIS Shapefile Import/Export一樣會出現無法匯入的錯誤error,這邊以台灣縣市界線的shp為例,當檔名有中文或是路徑出現中文時,就會出現錯誤。
這邊提出一個簡單的解決方式,使用空間資料時,除了常用的ArcGIS商業軟體外,大多使用者都會使用QGIS這套免費軟體作為GIS展示分析軟體,只有透過QGIS連線到PostgreSQL,即能成功將檔案上傳至資料庫。
在QGIS中選取DB manager,選擇要匯入的資料庫後,再點選Import Layer/files,確認資料庫的schema以及相關的主鍵(primary key)、坐標系統、編碼等等資訊後,就可以成功匯入。
Shp檔案是向量格式(vector),geotiff是網格格式(raster),兩者不能匯入至同一個schema,不然就會想筆者一樣,向量格式的資料全部都無法讀取,要重新匯入。為了區別不同類型的DATABASE,筆者這邊建議使用在創建一個DATABASE做為儲存網格的空間資料庫。
在PostgreSQL創建database後,在SOL QUERY中執行下列程式碼。
CREATE EXTENSION postgis;CREATE EXTENSION postgis_raster;
將資料庫擴充成可以儲存網格資料的空間資料庫。為了方便大量匯入既有的geotiff資料,這邊使用batch指令的方式快速的將資料都匯入至資料庫中。
raster2pgsql -s 4326 -I D:\data\GIS_Data\DEM_20m\dem_20m.tiff -F dem_20m |psql “host=localhost user=使用者名稱 password=密碼 port=5433 dbname=資料庫名稱”
這邊有3點需要注意
1. -s坐標系統: 輸入的代碼請參考EPSG的代碼,這邊輸入的是EPSG4326,為WGS84橢球坐標系統。
2. –t 為輸入的網格大小,如果不需要因檔案過大而縮小網格,就不需要加入這項。
3. 輸入的檔名及table名稱有些限制,不能有一些特殊符號,如.%&@等,至於_ +()等則可使用。(這邊是筆者遇到的,如果有其他符號,再麻煩告知)
最後結果如下圖
本篇文章簡單的敘述空間資料庫常用的shp檔案及geotiff檔案匯入的方式,已建立DATABASE的方式將所有的空間資料儲存起來,方便以後的呼叫、管理以及分析,此外透過PostGIS中的程式碼做空間分析如(Intersect, Union, TIN等等)相較於一般GIS軟體更為方便。