2009 年 9 月
目標
本教學課程將逐步說明如何使用開放原始碼的地理空間資料抽象資料庫公用程式,協助您建立超大型疊加層,也就是使用區域性區域連結的一組區域疊加層。
簡介
Google 地球和 Google 地圖等地理瀏覽器提供了衛星圖像和地圖圖塊。不過,有時候你可能會想使用自己的。圖像或光柵資料有許多形式,用途也很廣。
- 在地理瀏覽器中放置您自己的衛星或空照圖像
- 在現有圖像上方放置歷史地圖,例如 Google 地球中的 Rumsey Maps 圖層
- 以光柵形式匯入 GIS 資料
- 在地理瀏覽器中放置 LIDAR 或紅外線圖像
然而,高解析度光柵化資料的問題之一,就是需要大量記憶體才能顯示。如果你在網路中推送這個模式,也不必擔心頻寬問題。為解決這個問題,您必須建立資訊方塊。
{0/}您可以建立一個縮小的圖片,以便在使用者縮小畫面時顯示。在同一個區域中,你建立了四張高解析度圖片,以便清楚瀏覽。針對圖片重疊的每個區域,您可以另外建立四個解析度更高的圖片,以近距離放大等。這稱為 quadtree 方法,也是 Google 地球和 Google 地圖圖像的傾斜方式。如要進一步瞭解相關程序,請參閱 KML 開發人員指南中關於區域的文章。
您可以使用 Adobe 的 PhotoShop 或 GIMP 等圖形編輯應用程式來手動完成這項作業,但過程可能相當複雜、繁瑣且容易出錯。此外,還有許多適用於 Windows 的良好應用程式,例如 SuperOverlay、Arc2 Earth 和 MapCruncher 以及 CrunchUp2KML。
如要自動化處理程序,或在您的應用程式中加入功能,GDAL 提供了豐富的工具,讓您處理光柵與向量資料。本文涵蓋指令列選項。不過,您亦可輕鬆將程式庫整合至自己的應用程式中。在本教學課程中,您將使用 gdalinfo
、gdal_translate
、gdalwarp
和 gdal2tiles
公用程式。最終輸出結果是超級重疊。
指令列步驟
透過指令列使用 GDAL 有六個步驟。
- 下載並安裝 GDAL
- 下載圖片
- 使用
gdalinfo
來判斷圖片的相關資訊 - 使用
gdal_translate
為圖片進行地理參照 - 使用
gdalwarp
變更圖像的投影 - 使用
gdal2tiles
將圖片拆分為圖塊,並建立相關的 KML 程式碼
步驟 1:下載並安裝 GDAL
首先,請依這裡的詳細說明,下載並安裝 GDAL。
步驟 2:下載圖片
您可以使用任何圖片。網路上有許多地理資料來源。您可以使用任何圖片,但應該知道圖片的界線,也就是圖片各個角落的經緯度。本教學課程使用 NASA Blue Marble 映像檔,可從 NASA 網站下載。這些圖片的拍攝地點是 2004 年,從太空中提供了地球的美麗影像。選擇右側導覽列右下角的其中一個檔案。
如果您使用的是自己的圖片,且知道圖片已經經過地理校正,就可以跳到步驟 5。否則,請繼續執行步驟 3。
步驟 3:取得映像檔的相關資訊
安裝 GDAL 程式庫並選取映像檔後,您需要取得圖片的部分資訊,才能在地理上進行地理參照。具體來說,您需要圖片每個角落的像素和線條位置。如果您將圖片想成一種表格,就以欄和列的形式顯示,像素就是資料欄,而線條是資料列。
GDAL 提供了便利的公用程式 gdalinfo
,可用於擷取這項資訊。只要在指令列中輸入 gdalinfo filename
,然後將 filename
替換為檔案的路徑即可。畫面會顯示類似以下的輸出:
Driver: JPEG/JPEG JFIF Files: world_200401.jpg Size is 21600, 10800 Coordinate System is `' Image Structure Metadata: SOURCE_COLOR_SPACE=YCbCr INTERLEAVE=PIXEL COMPRESSION=JPEG Corner Coordinates: Upper Left ( 0.0, 0.0) Lower Left ( 0.0,10800.0) Upper Right (21600.0, 0.0) Lower Right (21600.0,10800.0) Center (10800.0, 5400.0) Band 1 Block=21600x1 Type=Byte, ColorInterp=Red Image Structure Metadata: COMPRESSION=JPEG Band 2 Block=21600x1 Type=Byte, ColorInterp=Green Image Structure Metadata: COMPRESSION=JPEG Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue Image Structure Metadata: COMPRESSION=JPEG
本教學課程的重要資訊為「左上」、「下左」、「右」和「右」行。這些維度會指示每個角落的像素和行值。在本例中,左上位為 0,0,右下為 21600,10800。
步驟 4:為圖片進行地理參照
在本例中,「地理參照」是指建立中繼資料,用來說明圖片各個角落的地理位置。您可以使用步驟 3 和 gdal_translate
取得的資訊,為檔案指派地理參照資訊。這項操作會從 world_200401.jpg
映像檔 (bluemarble1.vrt
) 建立 VRT 檔案。VRT 檔案是包含特定轉換相關資訊的 XML 檔案,在此案例中為 gdal_translate
步驟。您將在下一個步驟中再次使用此模型來建立最終的動態磚組。gdal_translate
可讓您執行多種檔案輸出類型,包括主要圖片檔格式。使用 VRT 輸出功能,讓你可在最後一個步驟中,關閉輸出檔案。如果您採用指令列,這樣做可以提高效率並縮短個別步驟的等待時間。您要執行的指令如下:
gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt
該行是大量的資訊,因此這裡分行:
-of
是輸出格式,在本範例中為 VRT。-a_srs
為檔案指派空間參照系統。可藉此告知應用程式正在使用哪一個座標系統。此時,系統所使用的 EPSG:4326 與「Google 地球」所使用的座標系統 WGS84 相同。-gcp
(或區域控制點) 會指定座標中的檔案位置。此時,其實只需要三個點,因為圖片為矩形,因此可以輕鬆識別第四點。使用-gcp
時,請設定像素,然後依序輸入像素和經度,再定義經緯度。每個空格都以空格分隔。- 最後兩個參數是來源檔案和目標檔案。
步驟 5:使圖片變形
原始圖片並非為圓形地球製作,而是以原始方式呈現。在 GIS 方面,則是經過「預測」,代表這是三維物件的二維表示法。投影需要扭曲圖片,使其呈現出您想要的地球平面外觀。
為使圖片看起來清晰可見,您必須使圖像變形並和全球一致。幸好 GDAL 也提供了很棒的工具只要輸入 gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt
即可。這會建立一個名為 bluemarble2.vrt 的新檔案,其中提供關於警告程序的中繼資料。
步驟 6:建立資訊方塊
即將完成,但此部分花費的時間最長。如要建立圖塊,請輸入 gdal2tiles.py -p geodetic -k bluemarble2.vrt
。-k
會強制使用 KML 輸出。這項操作會建立具有上層疊加層的目錄結構。由於您必須分別建立每個圖片檔,因此執行需要一點時間。如果圖片較大,你可以立即去喝杯咖啡、小睡,或是吃輕食。完成後,請開啟 doc.kml
並觀察結果!
結語
本教學課程只是介紹 GDAL 所能運用的介面,但這個 API 確實提供了實用的資訊產生機制。核心 GDAL 程式庫是以 C++ 編寫而成,但可提供 Perl、Python、VB6、R、Ruby、Java 和 C#/.NET 的繫結,因此您可以輕鬆將 GDAL 整合到自己的應用程式中。此外,許多公用程式 (包括 gdal2tiles
) 皆以 Python 編寫,因此可輕鬆整合至 Python 應用程式。gdal2tiles
也可以產生 Google Maps API 和 OpenLayers 網頁。