2010年6月9日 星期三

MapGuide_取得MgGeometry

昨天有提到如何取得MgFeatureReader,那另一個對應的就是今天所要介紹的取得MgGeometry。

也是跟MgFeatureReader一樣,我們可以將取得MgGeometry寫在Class裡面,以供各功能使用,直接看專案裡面的程式碼。
Function GetGeometry(ByVal mgSessionId As String, ByVal mgMapName As String, ByVal LayerName As String, ByVal featureReader As MgFeatureReader) As MgGeometry

'功能:以MgFeatureReader獲得MgGeometry
'輸入:mgSessionId、mgMapName、LayerName、featureReader
'輸出:MgGeometry

'1. 獲得使用者資訊
Dim userInfo As MgUserInformation = New MgUserInformation(mgSessionId)

'2. 連接站點
Dim siteConnection As MgSiteConnection = New MgSiteConnection
siteConnection.Open(userInfo)

'3. 獲得MgMap,打開地圖
Dim Map As MgMap
Map = New MgMap(siteConnection)
Map.Open(mgMapName)

'4. 獲得要抓取Geometry的layer
Dim layer As MgLayer = Map.GetLayers().GetItem(LayerName)

'5. 抓取MgGeometry
featureReader.ReadNext()
Dim agfReaderWriter As New MgAgfReaderWriter
Dim featureGeometryData As MgByteReader = featureReader.GetGeometry(layer.GetFeatureGeometryName())
Dim featureGeometry As MgGeometry = agfReaderWriter.Read(featureGeometryData)
GetGeometry = featureGeometry
featureReader.Close()

End Function

從程式碼可以看出,除了輸入MapGuide啟動的SessionId、使用的地圖名稱與圖層以外,我們必須先抓到MgFeatureReader,再利用GetGeometry的方法來取得MgGeometry。其實想法上也蠻合理的,在一堆資料裡面要取得某資料的空間形狀,勢必先得挑出要針對哪筆資料,取得以後再讀取他的空間屬性。

可以取得MgFeatureReader與MgGeometry就可以變化出非常多關於查詢的功能,剩下就是使用者介面的設計了。

沒有留言:

張貼留言