close
文章出處

文章版權由作者李曉暉和博客園共有,若轉載請于明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

1.背景

某個項目需求中需要在前端進行畫圓查詢,將圓范圍上的多邊形要素在前端進行展示。因為此項目的環境是AGS環境,考慮使用AGS的I查詢來完成。

                       

2.I查詢的相關參數介紹

I查詢中主要涉及到如下幾個參數:geometry、geometryType、layerDefs、layers、tolerance、mapExtent、imageDisplay等。

2.1理解相對簡單的參數

理解geometry、geometryType、layerDefs、layers這是四個參數相對簡單。

Geometry:查詢要素的構造。

GeometryType:查詢的方式,分為點、線、面、四角范圍查詢。

LayerDefs:查詢過濾條件,可以針對需要查詢的Layers來設置屬性過濾。

Layers:需要查詢的圖層。有top、visible、all三種過濾圖層方式。

2.2理解相對復雜的參數

在I查詢的參數中還有tolerance、mapExtent、imageDisplay這樣三個參數,他們之間是相互關聯的,理解起來稍微復雜。

官方的文檔上有如下描述:

 

字面上,我們可以將以上三個參數理解為:查詢緩沖范圍、查詢時的地圖范圍、查詢時的圖片大小。

這里,我將進一步解釋下這三個參數內在的意思。

mapExtent:指的是此時我們做I查詢時屏幕范圍上的地理坐標范圍。

ImageDisplay:包含了三個值:查詢時的屏幕地圖像素級高度(height:px)、寬度(width:px)、像素DPI。

Tolerance:查詢時基于像素級的緩存大小(不是真實的地理長度)。

通過我上面的描述,我們應該可以發現這三個參數的內在關聯。即,通過mapExtent和ImageDisplay,地圖服務器內部可以算出此時的一個像素所對應的真實地理單位長度。然后再乘以tolerence中的像素級長度,地圖服務器內部便能獲取到真實的緩沖地理級長度。

2.3總結

了解了以上參數的真實意思后,我們可以對項目需求給出第一個解決方案,即利用I查詢的點類型查詢來完成。

3.方案一:利用I查詢的點類型查詢來完成,可行?

3.1測試

 我們設想,地圖服務器內部的點查詢應該是:基于點坐標以及緩沖長度,構建出一個圓來進行查詢。而真實情況真的如此嗎?以下是一個對點類型查詢的測試:

 

我們發現,在I查詢的點類型查詢后,對圓范圍本沒有觸及到的723、1564兩個要素也被查詢出來,這又是為什么?

答案是:點類型查詢,并不是如我們之前理解的緩沖出一個圓,而應該是緩沖出了一個Extent。如圖,當我們構建了這個Extent后,確實能夠將本不被圓涉及到的兩個面要素也查詢出來。

3.2結論

I查詢中基于point的查詢其實是構造extent的查詢,并不適合與需求中的圓查詢。但是I查詢能夠提供的查詢方式又只有:點、線、面、范圍查詢四種,那到底該如何進行圓查詢?這里我們給出另外一個方案:用面來模擬圓進行查詢。

4.方案二:用面來模擬圓,進行I查詢多邊形類型查詢,可行?

4.1Polygon模擬圓的算法

我們大致思路是:在圓上按照360度,一度取一個點,然后構造成一個polygon。具體實現如下:

 

4.2測試和結論

測試過程相對簡單,我不再描述,這里直接給出測試結果:正確。

                                                                                -----歡迎轉載,但保留版權,請于明顯處標明出處:http://www.cnblogs.com/naaoveGIS/


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AutoPoster 的頭像
    AutoPoster

    互聯網 - 大數據

    AutoPoster 發表在 痞客邦 留言(0) 人氣()