MapX的座標問題

  我們知道,一個GIS開發包或者GIS平臺,和一般的圖形系統的差別就在於其管理的對象都是有空間參考(或者叫地理參考)的,簡而言之,空間參考就是座標系,但座標系不是簡單的笛卡爾座標系,因爲地球是圓的。有關的文獻可以參考一般的地圖學教材。

對 於GIS系統,座標系是和每個對象對應的,也就是說,任何一個空間對象(Feature)都必須有一個空間參考,但在實現中,一般是一個圖層對應一個空間 參考,也就是座標系。而整個地圖也有一個空間參考,並且有的系統,這個參考還分爲實際內部數據的和顯示的(例如MapX)。

MapX的空 間參考可以通過CoordSys object來設置。設置的類型包括平面座標(笛卡爾座標,Non-Earth),經緯度以及各類投影座標系統。然後這個CoordSys對象可以和圖 層、Map對象關聯,或者說,每個Layer對象和Map對象都有自己的空間參考。

在MapX中,圖層的空間參考可以通過Layer.CoordSys屬性來獲取或者設置。

MapX 的Map對象的空間參考則可以通過Map.DisplayCoordSys和Map.NumericCoordSys屬性來設置,前者是顯示的座標,後者 是實際的座標。如果你把前者設置爲經緯度,後者設置爲投影座標,那麼通過Map的工具量測得到就是前者的座標單位,而通過FeatureFactory對 象添加屬性,使用的座標就是後者。

那麼對應層和Map對象空間參考不一致的情況,顯示的時候就要實時(onfly)變換。

在我們使用FeatureFactory添加座標的時候,一定要清楚當前地圖的NumericCoordSys屬性的設置。

而創建一個Point的對象的時候,使用的也是NumericCoordSys這個座標體系。

對於一個沒有添加任何數據的MapX控件,其Map的NumericCoordSys屬性爲平面座標,如果使用Layers.Add添加圖層,這個屬性就自動變爲添加的第一個圖層的空間參考。

如果加載GeoSet,則座標體系通過GeoSet創建。

通過MapX的Layers.Add方法新建圖層,一般不需要指定圖層的空間參考,也無法在LayerInfo對象中指定文件圖層對象的空間參考,這時,創建的圖層的空間參考爲MapX的空間參考(NumericCoordSys)。

另外,使用平面座標(Non-Earth)時,需要指定其範圍,缺省好像是-100到100,太小,但也不能太大,不確定的情況下,使用int.max就合適,太大數據溢出,就等於很小了。

座標是GIS開發一個比較頭疼的問題,遇到類似的問題的朋友,希望這篇東西會有益處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章