5. 載入空間資料¶
PostGIS 由各種函式庫和應用程式提供支援,提供多樣選項可供載入資料。
我們會先從資料庫備份檔載入工作資料,接著回顧使用常見工具載入不同 GIS 資料格式的一些標準方式。
5.1. 載入備份檔¶
在 PgAdmin 瀏覽器中,在 **nyc** 資料庫圖示上**按一下右鍵**,然後選擇**還原…** 選項。
瀏覽至工作坊資料資料目錄的位置(可在工作坊中找到 資料套件),然後選取
nyc_data.backup
檔案。按一下**還原選項**索引標籤,向下捲動至**不得儲存**區段,並將**所有人**切換為**是**。
按一下**還原**按鈕。資料庫還原應該會執行至完成而不會產生錯誤。
載入完成後,按一下右鍵**nyc** 資料庫,然後選擇**重新整理**選項,以更新客戶端關於資料庫中有哪些表格的資訊。
備註
如需練習從原生空間格式載入資料,而不是使用剛才涵蓋的 PostgreSQL 資料庫備份檔,後面的幾個區段將指導您透過各種命令列工具和 QGIS DbManager 進行載入。請注意,如果您已透過 pgAdmin 載入資料,可以略過這些區段。
5.2. 透過 ogr2ogr 載入¶
ogr2ogr
是用於在 GIS 資料格式間轉換資料的命令列工具程式,包括常見檔案格式和常見空間資料庫。
- Windows:
可從 GIS Internals 下載 ogr2ogr 的組建。
ogr2ogr 包含在 QGIS 安裝 中的組成部分,而且可透過 OSGeo4W Shell 存取 -
可從 MS4W 下載 ogr2ogr 的組建。
- MacOS:
如果您已安裝 Postgres.app,您會在
/Applications/Postgres.app/Contents/Versions/*/bin
目錄中找到ogr2ogr
。最後,如果你已安裝 HomeBrew,你可以安裝 gdal 套件來取得
ogr2ogr
的存取權限
- Linux:
如果你從套件安裝 QGIS,
ogr2ogr
應當已安裝,且作為 gdal 或 libgdal* 套件的一部分,已在你路徑中。
Postgis 研討會資料目錄包含一個 2000/
子目錄,其中包含 2000 年人口普查的空間檔案,且已由 2010 年人口普查中的資料廢止。我們可以使用這些檔案來練習資料載入,以避免與我們使用備份檔案載入的資料產生名稱衝突。在執行這些指示時,務必在 shell 中位於 2000/
子目錄中
export PGPASSWORD=mydatabasepassword
我們將密碼放在環境中,而不是在連線字串中傳遞密碼,因此在命令執行期間,密碼不會在處理程序清單中可見。
請注意,在 Windows 中,你需要使用 set
,而不是 export
。
ogr2ogr \
-nln nyc_census_blocks_2000 \
-nlt PROMOTE_TO_MULTI \
-lco GEOMETRY_NAME=geom \
-lco FID=gid \
-lco PRECISION=NO \
Pg:"dbname=nyc host=localhost user=pramsey port=5432" \
nyc_census_blocks_2000.shp
為了更清楚地了解視覺效果,這些行會顯示為 \
,但你應當在 shell 中將它們寫在同一行中。
在 ogr2ogr
中有大量的選項,但我們在此僅使用少數幾個。以下是命令的逐行說明。
ogr2ogr \
可執行檔名稱!你可能需要確認可執行檔位置在你的 PATH 中,或使用可執行檔的完整路徑,具體取決於你的設定。
-nln nyc_census_blocks_2000 \
nln 選項代表「新的圖層名稱」,且會設定將在目標資料庫中建立的表格名稱。
-nlt PROMOTE_TO_MULTI \
nlt 選項代表「新的圖層類型」。特別是對於空間檔案輸入,新的圖層類型通常是「多部分幾何」,因此需要事先告知系統對幾何類型使用「多邊形」而不是「多邊形」。
-lco GEOMETRY_NAME=geom \
-lco FID=gid \
-lco PRECISION=NO \
lco 選項代表「建立圖層選項」。不同的驅動程式有不同的建立選項,我們在此為 PostgreSQL 驅動程式 使用三個選項。
GEOMETRY_NAME 設定幾何欄位的欄位名稱。在工作坊中,我們偏好使用「geom」而不是預設名稱,以使我們的表格符合標準的欄位名稱。
FID 設定主鍵欄位名稱。同樣地,我們偏好使用「gid」,這是工作坊中使用的標準。
精度控制數字欄位在資料庫中的呈現方式。從 shape 檔載入資料的預設值會使用資料庫「數值」類型,此處理方式比較精確,但作業上有時會比「整數」和「雙重精度」等簡單數字類型困難。我們使用「否」來關閉「數值」類型。
Pg:"dbname=nyc host=localhost user=pramsey port=5432" \
大致而言,ogr2ogr
中參數的順序為:可執行檔、選項、目標位置以及來源位置。因此,這是目標位置,也是 PostgreSQL 資料庫的連結字串。「Pg:」部分是驅動程式的名稱,而後面的 連結字串 會放在引號中(因為其中可能有嵌入的空格)。
nyc_census_blocks_2000.shp
在本例中,來源資料集為我們正在讀取的 shape 檔。可以在一次呼叫中讀取多個圖層,方法是將連結字串放在這裡,然後再加上圖層名稱清單,但我們在本例中只有一個 shape 檔要載入。
5.3. Shapefiles?那是什麼?¶
您可能在問自己 - 「這個 shapefile 檔案是什麼東西?」「shapefile」通常用來表示一組檔案,這些檔案的 .shp
、.shx
、.dbf
以及其他附檔名具有相同的開頭名稱(例如 nyc_census_blocks)。實際的 shapefile 特別與 .shp
附檔名的檔案相關。然而,僅有 .shp
檔案本身並不完整,如果沒有必要的支援檔案就無法進行傳送。
必要的檔案
.shp
—shape 格式;圖徵幾何本身.shx
—shape 索引格式;圖徵幾何的位置索引.dbf
—屬性格式;每個 shape 在 dBase III 中的欄屬性
可選檔案包含
.prj
—投影格式;座標系統和投影資訊,一個使用 well-known text 格式描述投影的純文字檔
shp2pgsql
這個工具透過將二進位資料轉換為一系列 SQL 指令,讓形狀資料能夠在 PostGIS 中使用,然後這些指令會在資料庫中執行以載入資料。
5.4. 使用 shp2pgsql 載入資料¶
shp2pgsql
會將 Shape 檔案轉換為 SQL。它是一個轉換公用程式,是 PostGIS 程式碼庫的一部分,也與 PostGIS 套件一起發行。如果你在本機電腦上安裝了 PostgreSQL,你可能會發現 shp2pgsql
已隨附安裝,而且在安裝的可執行檔目錄中可以使用。
與 ogr2ogr
不同,shp2pgsql
不會直接連線到目標資料庫,它只會發出與輸入 shape 檔案相同的 SQL。使用者必須透過「管線」或先將 SQL 儲存到檔案,然後再載入,才能將 SQL 傳遞到資料庫。
以下是呼叫範例,載入與之前相同的資料
export PGPASSWORD=mydatabasepassword
shp2pgsql \
-D \
-I \
-s 26918 \
nyc_census_blocks_2000.shp \
nyc_census_blocks_2000 \
| psql dbname=nyc user=postgres host=localhost
以下是此命令的逐條說明。
shp2pgsql \
可執行程式!它會讀取來源資料檔,然後發出 SQL,可以將 SQL 導向檔案,或導管至 psql
,以便直接載入資料庫。
-D \
D 旗標會指示程式產生「傾印格式」,其載入速度比預設的「新增格式」快很多。
-I \
I 旗標會指示程式在載入完成後,在資料表上建立空間索引。
-s 26918 \
s 旗標會指示程式此資料的「空間參考識別碼 (SRID)」為何。工作坊的來源資料都在「UTM 18」中,其 SRID 為 26918(請見下方)。
nyc_census_blocks_2000.shp \
要讀取的來源 shape 檔案。
nyc_census_blocks_2000 \
建立目標資料表時要使用的資料表名稱。
| psql dbname=nyc user=postgres host=localhost
此公用程式會產生 SQL 串流。「|」運算子會接受該串流,並將其用作 psql
資料庫終端程式程式碼的輸入。psql
的參數就是目標資料庫的連線字串。
5.5. SRID 26918?這是什麼意思?¶
大部分的匯入流程都不言而喻,但即使是經驗豐富的 GIS 人員也會被 SRID 給絆倒。
「SRID」代表「空間參考識別碼」。它定義我們資料的地理座標系統及投影的所有參數。SRID 很方便,因為它會將所有關於地圖投影(可能很複雜)的資訊打包成一個數字。
你可以透過在線上資料庫中查詢,或
直接在 PostGIS 中使用查詢 spatial_ref_sys
資料表來查看我們的研討會地圖投影。
SELECT srtext FROM spatial_ref_sys WHERE srid = 26918;
備註
PostGIS spatial_ref_sys
表格是 OGC 標準表格,定義了資料庫中已知的所有空間參考系統。PostGIS 提供的資料列出超過 3000 個已知的空間參考系統,以及它們之間進行轉換/重新投影所需的詳細資料。
在兩者中,您都會看到空間參考系統 **26918** 的文字表示(為了清楚起見,這裡以美化格式列印)
PROJCS["NAD83 / UTM zone 18N",
GEOGCS["NAD83",
DATUM["North_American_Datum_1983",
SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],
AUTHORITY["EPSG","6269"]],
PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4269"]],
UNIT["metre",1,AUTHORITY["EPSG","9001"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-75],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
AUTHORITY["EPSG","26918"],
AXIS["Easting",EAST],
AXIS["Northing",NORTH]]
如果您從資料目錄中開啟 nyc_neighborhoods.prj
檔案,您將看到相同的投影定義。
您從地方機關(例如紐約市)收到的資料通常會以地方投影呈現,並標記為「州平面」或「UTM」。我們的投影是「通用橫軸墨卡托 (UTM) 區 18 北」或 EPSG:26918。
5.6. 嘗試:使用 QGIS 查看資料¶
QGIS 是電腦用的 GIS 檢視器/編輯器,可快速檢視資料。您可以檢視包含平面的 shapefile 和 PostGIS 資料庫在內的許多資料格式。其圖形介面允許輕鬆探索您的資料,而且簡易測試又可快速調整樣式。
嘗試使用此軟體來連線您的 PostGIS 資料庫。可以從 https://qgis.org 下載應用程式。
您首先會想要使用選單 圖層->新增圖層->PostGIS 圖層->新增,然後填寫提示建立與 PostGIS 資料庫的連線。連線完成後,您可以按一下連線並選取要顯示的表格來新增圖層。