也是跟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就可以變化出非常多關於查詢的功能,剩下就是使用者介面的設計了。
沒有留言:
張貼留言