將 GIS 向量資料轉換成 KML

M Geo API 團隊 Mano Marks
2009 年 9 月

目標

本教學課程會逐步引導您使用 OGR 開放原始碼程式庫,將 GIS 向量資料轉換為 KML 的基本概念。雖然這些程式庫可支援大部分的 GIS 檔案,但本教學課程將著重於使用 ESRI 形狀檔案。

簡介

網路上的資料有許多種形式,KML 是最常見的檔案格式之一,但還有許多其他檔案類型也使用。大型企業、政府和非政府組織使用地理資訊系統來建立地圖,還有專用檔案格式。這類應用程式通常需要進行專業培訓,或有很長的時間可學習。這類專屬費用可能相當昂貴。另一方面,它們的功能都非常強大,而且能為專業地圖製作者提供豐富的地圖工具。

許多政府實體會釋出部分 GIS 資料供大眾使用。Data.govMassachusetts 地理資訊系統DataSF 等入口網站可輕鬆尋找社區的資料。本文說明如何將向量資料 (由點、線條及多邊形等簡單的幾何圖形構成) 轉換為 KML。這樣一來,您就能存取多種不同類型的資料,包括:

  • 代表建物包裹界線的包裹資料
  • 事件資料,例如犯罪報告
  • 界線資料,適用於市、州、縣、省等的邊界。
  • 道路資料,包括預定道路和現有道路
  • 施工許可證,表示核發許可
  • 健康資料,例如描述流感爆發事件的發生地點

Google 地球專業版shp2KMLKML2KMLArc2 Earth 等眾多應用程式提供資料轉換功能,其實正是絕佳選擇。本文將著重介紹如何使用指令列中的開放原始碼地理資料資料庫 (GDAL) 公用程式,將向量資料轉換為 KML,以便用於 Google 地球或 Google 地圖。在這種情況下,建議您藉此將這些程式庫整合至自己的應用程式。

檔案類型注意事項

雖然本文將逐步引導您將 ESRI 形狀檔案轉換成 KML,但 GDAL 公用程式 (特別是 OGR) 可用於轉換多種檔案類型,包括 CSVPostGRES/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>

您可以看到形狀檔案的中繼資料已保留在 SchemaSimpleData 元素中。如要進一步瞭解如何使用 ExtendedData 及保存自訂資料,請參閱 KML 開發人員指南的新增自訂資料一節。

後續步驟

GDAL/OGR 可提供大量電力。以最簡單的導入方式來說,您現在可以將所有資料轉換成 KML,以便用於「Google 地球」、「Google 地圖」或任何其他支援 KML 的地理瀏覽器。更棒的是,您可以將 GDAL/OGR 程式庫整合至您的應用程式,以便將 GIS 資料自動轉換成 KML 並控制轉換的輸出。您可以搭配 libKML 使用,進一步管理程式的 KML 產生方式。