GML已經成為大家所接受並且容易理解的一種空間資訊的交換格式標準,所以將其它GIS資料轉換為GML格式進行發布就具有廣泛的實用價 值和市場前景。不久的將來,空間資訊會大量的以GML格式存在,人們可以方便的進行空間資訊的共用與交換。由此就會引發出一個非常重要的問題,那就是如何將現有的一些空間資訊轉換成GML格式,更好的實現各類空間資料共用。
目前,大量的空間資料都是以特定的文本資料格式進行儲存的,最常見的GIS資料格式包括ArcInfo公司的Shp檔案,MapInfo公司的Mif檔案等等。在我們所開發的中介軟體中,包含一個轉換工具,實現了對Shp檔案,Mif檔案到GML檔案的轉化。
根據GML3規範中的Schema的描述、Shp檔案和Mif檔案的格式,就能將Shp檔案和Mif檔案轉換為GML檔案。在轉換過程中,首先要建立一個GML格式文檔,添加GML描述資訊,然後迴圈的將Shp或者Mif檔案中的地理資訊元素轉換為GML中的幾何圖元。
以ArcInfo公司的Shp檔案為例。該檔案是一個二進位檔案,包含一個固定長度的標頭檔。該標頭檔長度為100個位元組,其中包含整個檔案的重要屬性資訊。例如:從第24個位元組開始到28個位元組描述的是檔案的長度;從第28個位元組開始到第32個位元組描述的是檔案的版本;從第32個位元組開始到第36個位元組描述的是檔案中包含圖形的類型;從第36個位元組到第84個位元組,每八個位元組為一組,分別描述該圖形檔案的邊界範圍(Xmin,Ymin,Xmax,Ymax,Zmin,Zmax)。第100個位元組以後是關於對象資料的描述,其中包括對point,line,polygon等幾何類型的描述。每個地理對象是由一組位元組決定,每組位元組的長度根據所描述的幾何類型的不同,位元組長度也相應不同。以其中的Point點對象為例,從第0-4個位元組描述對象的類型,從第4-12個位元組描述點對象的X座標,從第12-20個位元組描述點對象的Y座標。
我們將Shp檔案中描述的各種地理資訊與GML幾何圖元進行對應,其對應關係如下表所示。
Shp檔案 |
GML檔案 |
Point |
Point |
PointM |
Point |
PointZ |
Point |
MultiPoint |
Point 或 MultiPoint |
MultiPointM |
Point 或 MultiPoint |
MultiPointZ |
Point 或 MultiPoint |
Polyline |
LineString |
PolylineM |
LineString |
PolylineZ |
LineString |
Null shape |
DBNull.Value |
Polygon |
Polygon |
PolygonM |
Polygon |
PolygonZ |
Polygon |
MultiPatch |
Polygon |
除了以特定文本資料格式儲存以外,還有相當一部分地理資訊是儲存在資料庫中的(一般都是儲存在關聯式資料庫中)。將這些地理資訊轉換為GML檔案的原理和上述方法是類似的,只要找到地理資訊與GML幾何圖元之間的對應關係,就可以編程進行轉換。
還有一種常見的地理資訊格式就是柵格資料(Raster Data)。柵格資料是由正方形或者矩形柵格點組成,每個柵格點或者像素的位置由柵格所在的行列號來定義,所對應的數值為柵格所要表達的內容的屬性值。柵格映像的編碼和XML格式的編碼完全不同。它不能從文法上進行分析,不能驗證正確性,也沒有良好的格式。而且,它的每一個柵格點的資料值都是固定不變的,將其轉化XML標準的格式的時候,沒有任何操作的靈活性。將柵格映像轉換為GML,可以將其中所有的柵格點轉換成為GML中的Point。由於通常柵格映像都包含著大量的資訊,因此轉換後的GML檔案一般也都包含了大量的點資訊。目前來看,將柵格資料轉換為GML,並沒有太多的實際意義。況且,GML3中已經支援柵格資料,其中對覆蓋模式的描述與柵格資料集是等價的。