1. 程式人生 > >解決query查詢輸入geometry參數查詢不到而通過where條件可以查到的問題

解決query查詢輸入geometry參數查詢不到而通過where條件可以查到的問題

gis 查詢參數 數據 ron http 顯示 src 出現 ren

解決query查詢輸入geometry參數查詢不到而通過where條件可以查到的問題

原因:

是因為geometry的坐標系和所要查詢的圖層不一樣導致的(問題引起是由於底圖中疊加了不同的坐標系的引起的)

問題描述:

我在公司做好的功能並且測好了,到現場出了問題,發現通過where語句查詢時正常的,拉寬查詢不正常。並且通過網頁打開圖層查詢請求頁面,手動輸入代碼中得到的geometry查詢是可以查到數據的。

問題解決過程:

  1. 通過fiddler跟蹤請求的http路徑(因為arcgisAPI請求arcgisServer是通過http路徑進行請求的不管是post還是get方法都可以通過fiddler拿到路徑參數,)

這個地方有個疑問:按理說如果通過post方法請求不應該可以拿到參數的,這個問題有同學感興趣的可以去研究一下,(我記得在某片文章中看到過arcgis api的post方法不是我們傳統意義上表單post請求傳參)

  1. 拿到參數後在瀏覽器中輸入參數回車發現會下載一個query文件用編輯器打開裏面是一些查詢信息,信息不是很好解讀。

技術分享

  1. 又回到fiddler中跟蹤網頁查詢和代碼調用的區別

代碼調用:

技術分享

網頁調用:

技術分享

有沒有發現問題,問題在於代碼調用中inSR這個參數中有一個參考系的值,大概猜出是這個參數引起了問題,但是並不知怎麽解決

  1. 回到瀏覽器中對比fiddler中復制的正常網頁查詢的url和代碼調用的url,發現有一個細微差別

網頁調用:

技術分享

代碼調用:

技術分享

這是記起是返回值顯示格式(html, amf,json)

所以把代碼中的路徑中的“amf”改成”html”問題找到了

技術分享

這是就是我們的查詢頁面,並且自動輸入了查詢參數,裏面InputSpatialReference參數中輸入了fiddler中的InSR值,這時就對應上了輸入的參數

  1. 找到問題,就到代碼中去找這個輸入參數,發現query對象中沒有這個參數的輸入,後思考後得出應該是繼承了輸入geometry中的坐標系參數,後去掉geometry中的坐標系參數,發現可以查出來了,到這一步問題已經解決。

技術分享

  1. 後面我又想了解一下為什麽會出現這個問題,我又在網頁查詢頁面InputSpatialReference這個參數中輸入當前服務的坐標系參數發現是可以查到的,這是才想起了應該是參考系不一樣導致的,果然在對比了兩個坐標系發現一個是北京54的另一個是WGS_1984的坐標系。

技術分享

後面又去找這個問題,發現他們的底圖是北京54的坐標系,而我們查詢的專題是1984的坐標系統,而我們的DrawTool對象要綁定一個map對象,而地圖對象的坐標系統正好也是底圖的坐標系可以通過他去看distmap.map.spatialReference(北京54)

可能是這個時候默認是map底圖的坐標系(暫時沒去探究,感興趣的可以去研究一下)。

解決query查詢輸入geometry參數查詢不到而通過where條件可以查到的問題