2010年6月10日 星期四

MapGuide_資料篩選(SetFilter And SetSpatialFilter)

之前說明了如何取得MgFeatureReader取得MgGeometry,但在應用上我們需要給定很多條件,比如說:人口大於100萬的縣市,在信義區範圍內屬性為電信的人孔,或是與忠孝東路交接又有便利商店的道路等等。

單就邏輯來取選,1. 人口大於100萬的縣市:搜尋人口屬性,將100萬以上的資料選取出來。

2. 信義區範圍內屬性為電信的人孔:找出信義區內的人孔,再從裡面找出屬性是電信的。

3. 與忠孝東路交接又有便利商店的道路:找出與忠孝東路交接的道路,再利用道路做一個5-10公尺的環域,然後以這個環域區塊去搜尋便利商店的門牌資料。

諸如此類的搜尋,還有非常多的應用方式,但是可以發現一件事情,就是我們必須要對資料進行屬性與空間的交叉查詢,來達到這些目的。那在MapGUide裡面要如何輸入這些查詢邏輯,進而獲得資料呢?

不管是空間篩選亦或是屬性篩選都必須要先new一個MgFeatureQueryOptions,這就像是篩選項目的容器,我們再將篩選內容給放進去。

'1令一個篩選容器
Dim QueryOptions As New MgFeatureQueryOptions
'2給定屬性篩選條件,語法類似SQL
QueryOptions.SetFilter("ID='1'")
'3給定空間篩選條件,參數:選取人的空間屬性、被選取的Geometry、空間條件)
QueryOptions.SetSpatialFilter(layer.GetFeatureGeometryName, featureGeometry, MgFeatureSpatialOperations.Inside)
'4將條件輸入,並存入一個MgFeatureReader
Dim layer As MgLayer = Map.GetLayers().GetItem(LayerName)
Dim featureReader As MgFeatureReader = layer.SelectFeatures(QueryOptions)

藉由上述的流程可以發現,不管我們需要怎麼樣的屬性、空間篩選,都可以藉由上面的方式加以組合,變換出你需要的搜尋條件。

比如說可以做出,自定範圍統計設施物的功能。

沒有留言:

張貼留言