2009 年 9 月
目標
本教學課程會逐步引導您使用 OGR 開放原始碼程式庫,將 GIS 向量資料轉換為 KML 的基本概念。雖然這些程式庫可支援大部分的 GIS 檔案,但本教學課程將著重於使用 ESRI 形狀檔案。
簡介
網路上的資料有許多種形式,KML 是最常見的檔案格式之一,但還有許多其他檔案類型也使用。大型企業、政府和非政府組織使用地理資訊系統來建立地圖,還有專用檔案格式。這類應用程式通常需要進行專業培訓,或有很長的時間可學習。這類專屬費用可能相當昂貴。另一方面,它們的功能都非常強大,而且能為專業地圖製作者提供豐富的地圖工具。
許多政府實體會釋出部分 GIS 資料供大眾使用。Data.gov、Massachusetts 地理資訊系統和 DataSF 等入口網站可輕鬆尋找社區的資料。本文說明如何將向量資料 (由點、線條及多邊形等簡單的幾何圖形構成) 轉換為 KML。這樣一來,您就能存取多種不同類型的資料,包括:
- 代表建物包裹界線的包裹資料
- 事件資料,例如犯罪報告
- 界線資料,適用於市、州、縣、省等的邊界。
- 道路資料,包括預定道路和現有道路
- 施工許可證,表示核發許可
- 健康資料,例如描述流感爆發事件的發生地點
Google 地球專業版、shp2KML、KML2KML、Arc2 Earth 等眾多應用程式提供資料轉換功能,其實正是絕佳選擇。本文將著重介紹如何使用指令列中的開放原始碼地理資料資料庫 (GDAL) 公用程式,將向量資料轉換為 KML,以便用於 Google 地球或 Google 地圖。在這種情況下,建議您藉此將這些程式庫整合至自己的應用程式。
檔案類型注意事項
雖然本文將逐步引導您將 ESRI 形狀檔案轉換成 KML,但 GDAL 公用程式 (特別是 OGR) 可用於轉換多種檔案類型,包括 CSV、PostGRES/PostGIS 資料庫,以及各種其他格式。支援大多數主要的資料格式。如果發現不支援的格式,您可以編寫 OGR 驅動程式,因為這是開放原始碼程式庫。
Shapefiles
ESRI 的熱門 Shape 檔案格式是最常見的 GIS 資料格式之一。就技術層面來說,shape 檔案是副檔名為 .shp 的單一檔案,但無法自行開啟 .shp。這個系統至少需要 .dbf 和 .shx 檔,且還有其他各種檔案需求。因此,當您看到形狀檔案參照時,幾乎一律代表一組檔案 (通常是以某個種類壓縮的封存檔加以保存),這就是本文其他部分使用 shapefile 一詞的方式。
Shapefile 包含有關所描述地理區域的大量資訊。這些類別會說明實際幾何圖形、幾何圖形的中繼資料,以及使用空間參照系統的相關資訊,以及資料的其他層面。本文章重點在於幾何圖形、中繼資料及空間參照系統。
幾何圖形和中繼資料相當簡單。幾何圖形是點、線和多邊形,可以在 KML 中輕鬆表達。中繼資料是資料的相關資料,通常用於篩選或查詢目的。舉例來說,描述道路的用字可能包含道路類型 (市政道路、國道、國道公路等) 等中繼資料、速限、資金來源、大小等。
空間參照系統 (SRS) 可用來識別座標系統,以及用來建立向量資料的投影。KML 中的經緯度使用 WGS84 座標系統。不過,您也可以使用其他方法來找出地圖上的座標。廣受歡迎的景點包括:環球橫線麥卡托、英國國家格線和國家平面圖系統。如要將資料轉換成 KML,您可能需要找出該資訊。KML 僅支援 WGS84。一般來說,shape 檔案通常會隨 .prj 檔案一併傳送,而 OGR 也能從該處擷取資訊。但是有時候,需要識別 SRS。有時資料來源是由資料來源提供,例如下載來源的頁面,或是已下載項目的 Readme 文件,或其他格式。這通常就夠了。空間參考資料網站含有 SRS 的詳細資訊,並提供可讓您查詢個別參考系統的參考資料。
Ogr2ogr
GDAL 提供一組強大的程式庫,可用於處理向量資料。請特別注意,ogr2ogr
是一項功能強大的資料轉換公用程式。包括 GDAL/OGR 在內的許多應用程式,包括上述的某些應用程式。
如要開始使用,請下載並安裝 GDAL。然後您需要要插入 Shape 檔案。在本教學課程中,請嘗試使用 DataSF 中的設定。以下範例使用 realtor_neighborhoods
形狀檔案,您可以在同意授權後取得這個檔案。下載完成後,將檔案解壓縮到您記住的目錄中。開啟指令列,然後前往您要放置資料的目錄。現在,開始娛樂吧!
您可以透過指令列輕鬆使用 ogr2ogr
。將 realtor_neighborhoods
從形狀檔案轉換成 KML 的方法如下:
ogr2ogr -f "KML" -where "NBRHOOD='Telegraph Hill'" realtor_neighborhoods.kml realtor_neighborhoods.shp
這個指令的指令如下:
ogr2ogr
:這是核心指令。-f "KML
:這會將輸出格式設為 KML。-where "NBRHOOD='Telegraph Hill'"
:此為選用where
子句,例如在 SQL 中。基本上,它可讓您根據中繼資料查詢資料。這個 API 支援形狀檔案和其他支援查詢的檔案類型。在這個範例中,它會查詢 NBRHOOD 欄位,只選取 Telegraph Hill 的 NBRHOOD 功能。如果不設定這個參數,ogr2ogr
會提供你所有的鄰近多邊形。realtor_neighborhoods.kml
:此為輸出檔案名稱。輸出檔案名稱優先。realtor_neighborhoods.shp
:此為輸入檔案名稱。.shp 檔案代表整個形狀檔案。
就是這麼簡單這個指令會寫入如下所示的 KML 檔案:
<?xml version="1.0" encoding="utf-8" ?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document><Folder><name>realtor_neighborhoods</name> <Schema name="realtor_neighborhoods" id="realtor_neighborhoods"> <SimpleField name="Name" type="string"></SimpleField> <SimpleField name="Description" type="string"></SimpleField> <SimpleField name="OBJECTID" type="float"></SimpleField> <SimpleField name="NBRHOOD" type="string"></SimpleField> <SimpleField name="SFAR_DISTR" type="string"></SimpleField> </Schema> <Placemark> <ExtendedData><SchemaData schemaUrl="#realtor_neighborhoods"> <SimpleData name="OBJECTID">81</SimpleData> <SimpleData name="NBRHOOD">Telegraph Hill</SimpleData> <SimpleData name="SFAR_DISTR">District 8 - Northeast</SimpleData> </SchemaData></ExtendedData> <Polygon><outerBoundaryIs><LinearRing><coordinates>-122.41041847319012,37.805924016582715,0 -122.407203813674,37.806324902060979,0 -122.40667792852096,37.803710121958744,0 -122.40348255423899,37.804117462290641,0 -122.40237202127015,37.798540648764529,0 -122.40876046662795,37.797723222540775,0 -122.41041847319012,37.805924016582715,0</coordinates></LinearRing></outerBoundaryIs></Polygon> <Style><LineStyle><color>ff0000ff</color></LineStyle> <PolyStyle><fill>0</fill></PolyStyle></Style> </Placemark> </Folder></Document></kml>
您可以看到形狀檔案的中繼資料已保留在 Schema
和 SimpleData
元素中。如要進一步瞭解如何使用 ExtendedData 及保存自訂資料,請參閱 KML 開發人員指南的新增自訂資料一節。
後續步驟
GDAL/OGR 可提供大量電力。以最簡單的導入方式來說,您現在可以將所有資料轉換成 KML,以便用於「Google 地球」、「Google 地圖」或任何其他支援 KML 的地理瀏覽器。更棒的是,您可以將 GDAL/OGR 程式庫整合至您的應用程式,以便將 GIS 資料自動轉換成 KML 並控制轉換的輸出。您可以搭配 libKML 使用,進一步管理程式的 KML 產生方式。