文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/。前端
某個項目需求中須要在前端進行畫圓查詢,將圓範圍上的多邊形要素在前端進行展現。由於此項目的環境是AGS環境,考慮使用AGS的I查詢來完成。算法
I查詢中主要涉及到以下幾個參數:geometry、geometryType、layerDefs、layers、tolerance、mapExtent、imageDisplay等。緩存
理解geometry、geometryType、layerDefs、layers這是四個參數相對簡單。服務器
Geometry:查詢要素的構造。測試
GeometryType:查詢的方式,分爲點、線、面、四角範圍查詢。3d
LayerDefs:查詢過濾條件,能夠針對須要查詢的Layers來設置屬性過濾。blog
Layers:須要查詢的圖層。有top、visible、all三種過濾圖層方式。圖片
在I查詢的參數中還有tolerance、mapExtent、imageDisplay這樣三個參數,他們之間是相互關聯的,理解起來稍微複雜。文檔
官方的文檔上有以下描述:get
字面上,咱們能夠將以上三個參數理解爲:查詢緩衝範圍、查詢時的地圖範圍、查詢時的圖片大小。
這裏,我將進一步解釋下這三個參數內在的意思。
mapExtent:指的是此時咱們作I查詢時屏幕範圍上的地理座標範圍。
ImageDisplay:包含了三個值:查詢時的屏幕地圖像素級高度(height:px)、寬度(width:px)、像素DPI。
Tolerance:查詢時基於像素級的緩存大小(不是真實的地理長度)。
經過我上面的描述,咱們應該能夠發現這三個參數的內在關聯。即,經過mapExtent和ImageDisplay,地圖服務器內部能夠算出此時的一個像素所對應的真實地理單位長度。而後再乘以tolerence中的像素級長度,地圖服務器內部便能獲取到真實的緩衝地理級長度。
2.3總結
瞭解了以上參數的真實意思後,咱們能夠對項目需求給出第一個解決方案,即利用I查詢的點類型查詢來完成。
咱們設想,地圖服務器內部的點查詢應該是:基於點座標以及緩衝長度,構建出一個圓來進行查詢。而真實狀況真的如此嗎?如下是一個對點類型查詢的測試:
咱們發現,在I查詢的點類型查詢後,對圓範圍本沒有觸及到的72三、1564兩個要素也被查詢出來,這又是爲何?
答案是:點類型查詢,並非如咱們以前理解的緩衝出一個圓,而應該是緩衝出了一個Extent。如圖,當咱們構建了這個Extent後,確實可以將本不被圓涉及到的兩個面要素也查詢出來。
I查詢中基於point的查詢實際上是構造extent的查詢,並不適合與需求中的圓查詢。可是I查詢可以提供的查詢方式又只有:點、線、面、範圍查詢四種,那到底該如何進行圓查詢?這裏咱們給出另一個方案:用面來模擬圓進行查詢。
咱們大體思路是:在圓上按照360度,一度取一個點,而後構形成一個polygon。具體實現以下:
測試過程相對簡單,我再也不描述,這裏直接給出測試結果:正確。
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/