使用QGIS上傳Shape檔至空間資料庫
Shape檔案匯至空間資料庫的作法,以採用自由軟體為主,選擇使用QGIS-1.8.0版搭配PostgreSQL+PostGIS空間資料庫為下述操作範例。
附註:PostgreSQL資料庫,本身是一般普遍通用的關聯式資料庫,需要安裝PostGIS套件才會形成具備空間型態的空間資料庫。
以下就為各位介紹操作流程:
(一)開啟「Shape檔匯出至PostGIS」
點選工具列上「DataBase」→「Shape檔匯出至PostGIS」→「Shape檔匯出至PostGIS(I)」
(二)新增資料庫連線設定
點選「新增」後,即出現設定連結資料庫的主機IP位置、Port、資料庫名稱、使用者名稱、密碼等資訊,如下圖所示:
(三)匯入選項的設定
1.首先點選「連接」,
2.取消勾選「使用預設SRID」,
3.於SRID欄位填入以WGS84為主的SRID編碼為「4326」,
4.最後點選「新增」,加入Shape檔案的存取目錄,如下圖所示:
(四)選擇Shape檔案路徑
點選Shape檔案存取的目錄與路徑,選擇編碼格式以「UTF-8」為主,如下圖所示:
附註:範例圖示中的Shape檔案係取自運研所的台灣縣市行政區界,由於Shape檔中,以「.dbf」所編輯的屬性資料格式是以Big5編碼為主,但因採用PostgreSQL+PostGIS資料庫所編碼的格式是以UTF-8為主,因此在編碼格式上就要改為UTF-8,以避免上傳至資料庫時,發生編碼錯誤導致屬性資料皆為亂碼。
(五)檔案上傳
選擇準備上傳之檔案後,其檔案路徑即會顯示於上傳列上,點選「OK」後,立即上傳,如下圖所示:
其檔案上傳進度,如下圖所示:
(六)上傳成功後,檢視檔案
依據上述的操作流程後,即可將Shape檔案上傳至空間資料庫,後續再以QGIS連結資料庫的方式,以讀取檢視檔案是否上傳完整無誤,首先點選工具列圖示「Add PostGIS Layers」功能,如下圖所示:
開啟「Add PostGIS Layers」,點選「Connect」表示連結資料庫,若資料庫連結成功後,則會於下面框架內容中,顯示該資料庫的所有具備空間特性的資料表單,再點選上述操作過程所上傳資料表-twn_county,後續再點選「新增」,如下圖所示:
(七)開啟屬性資料表,檢視內容
連結資料庫把資料表加入後,即可在QGIS操作框架中看到整個檔案圖層的空間分佈,後續於圖層列的按滑鼠右鍵,點選「Open Attribute Table 」開啟屬性資料表,如下圖所示:
開啟屬性資料表後,檢視中文欄位編碼內容是否正確。
除了上述透過QGIS的功能套件上傳Shape檔至資料庫,另外一種方式是較為傳統的SQL產生方法,其步驟流程也較為複雜,在此也順道介紹。
早期在QGIS尚未開發「Shape檔匯出至PostGIS」的功能套件時,若遇到需要把Shape上傳至空間資料庫時,就必需採用PostgreSQL資料庫內附提供「shp2pgsql」的程式,該程式可於Microsoft Windows作業系統環境使用「命令提示字元」模式執行,也就是DOS模式下的程式。主要功能為將在GIS軟體完成編輯Shape檔案包含shp、dbf、shx空間、屬性及索引資料,轉換成PostgreSQL+PostGIS資料庫所適用的SQL語法。
由於Shape檔案中存放屬性資料格式的.dbf檔,其編碼格式以「Big5」為主,因而在產生SQL語法時,針對中文字元的特殊字元可能會造成衝碼的問題,例如:許,功,蓋等字,為此辨識這些較為特殊字元,通常會在中文字元附近多出「\」的符號來頂替表示,但也會因此造成SQL語法執行時判讀錯誤的困擾,因此就必需再經過清除或取代多餘的「\」符號的程序後,才會得到完整的SQL語法。
後續,再將此SQL語法執行於PgAdminIII(PostgreSQL資料庫的管理介面工具), 即可將Shape檔案屬性內容及其空間特性產生於PostgreSQL+PostGIS資料庫的空間資料表單。
詳述作法,如下所示:
Step-1:命令提示字元→開啟Postgresql目錄的shp2pgsql.exe,其路徑目錄於:「C:\Program Files\PostgreSQL\8.3\bin」,
如下圖所示:
Step-2:輸入shp2pgsql.exe執行目錄與資料存取路徑,如下圖所示:
以上內容解釋如下:
- 「C:\Program Files\PostgreSQL\8.3\bin>shp2pgsql」:此一內容為“執行程式的路徑位置”。
- 「-s 4326」:此一內容為“指定空間座標為WGS84,因此它的SRID 為4326”。
- 「-I」:此一內容為“匯入資料庫後,在PostgreSQL立即建立空間索引”。
- 「”D:\地籍圖\2009-07-16台北市圓山遺址地籍\Taipei_Yuanshan\AB0271.shp”」:此一內容為“GIS軟體匯出的Shape檔案路徑位置,該路徑位置需要shp、shx及dbf有三個必要檔案,因為這個檔案路徑位置可能含有空格字元,所以需要用雙引號附註”。
- 「AB0271」:此一內容為“指定在PostgreSQL資料庫中表格的名稱”。
- 「>C:\AB0271.txt」:此一內容為“將資料轉變成SQL語法後,所存放的檔案路徑與名稱”。
Step-3:按「Enter」後,立即執行shp2pgsql.exe程式,下圖是執行完後,畫面輸出的結果,如下圖所示:
以上紅框內容解釋如下:
- 「Shapefile type:Polygon」-表示這個Shape檔案的類型屬於“Polygon”。
- 「Postgis type:MULTIPOLYGON[2]」-表示上傳到PostgreSQL後,Postgis將它的類型定義為“MultiPolygon”。
Step-4:由於shp2pgsql.exe所轉出產生出來的SQL語法檔案(此所指得下圖例是C:\AB0271.txt),若檔案內容有包含「中文字元」的話,因為排除衝碼問題,所以會產生有多餘的「\」,因此建議先用notepad++的「取代」功能,將多餘的「\」清除掉。
Step-5:開啟PgAdmin III,並選定所執行的資料庫,再按「SQL查詢」,再「開啟檔案」,然後點選匯入己經清除完成的SQL語法檔案「C:\AB0271.txt」。
Step-6:將SQL語法檔案滙入至pgAdminIII開始產生執行後的畫面。
SQL語法執行成功後,亦會於輸出窗格顯示訊息,如下圖所示:
完成以上操作程序後,除可透過PgAdminIII工具,檢視資料庫所產生資料表單,並可利用QGIS確認空間資料庫上的資料表單的空間型態與範圍。
上述操作流程之內容可參考下列文獻資料:
林農堯、白璧玲、廖泫銘,多國語言與缺字呈現之網頁地圖系統建置,2008年空間資訊基礎建設國際研討會暨台灣地理資訊學會年會。