2010年6月8日 星期二

MapGuide_取得MgFeatureReader

在GIS的開發裡面,最常用函式莫過於取得篩選後的屬性資料列表與空間"形狀",在MapGuide裡面就可以對應到兩種型態,MgFeatureReader是類似DataSet的資料列表變數,MgGeometry則是可以記載空間形狀的變數。

所以,如何取得MgFeatureReader跟MgGeometry是很基本也很重要的函式,通常這樣常用的函式會把他寫到Class裡面以供各功能叫用,開發其他專案也可以互相套用。

如何抓取MgFeatureReader是本篇的重點,直接來看專案裡面的程式碼。

Function GetRecData(ByVal mgSessionId As String, ByVal mgMapName As String, ByVal LayerName As String, ByVal QueryString As String) As MgFeatureReader

'功能:以條件輸入獲得MgFeatureReader
'輸入:mgSessionId、mgMapName、LayerName、QueryString(查詢條件)
'輸出:MgFeatureReader

'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. 建立查詢選項MgFeatureQueryOptions
Dim QueryOptions As MgFeatureQueryOptions = New MgFeatureQueryOptions()
Dim QureyLayer As String = LayerName
QueryOptions.SetFilter(QueryString)

'5. 獲取MgFeatureReader
Dim layer As MgLayer = Map.GetLayers().GetItem(QureyLayer)
Dim featureReader As MgFeatureReader = layer.SelectFeatures(QueryOptions)
GetRecData = featureReader
featureReader.Close()

End Function

這個函式必須傳入四個參數,分別是MapGuide啟動的SessionId,所使用的地圖名稱,要抓取的圖層名稱與篩選的條件式,共分為五個步驟,最後會傳回一個MgFeatureReader,其他的程式就可以用ReadNext的方式抓取到裡面的屬性資料。

1 則留言:

匿名 提到...

您好,我用了您的方法後出現了
Invalid stream header exception. 的錯誤訊息
錯誤的地方是在
Dim featureReader As MgFeatureReader = layer.SelectFeatures(QueryOptions)
請問您知道是什麼原因嗎??

張貼留言