geoserver圖層屬性查詢及查詢結果轉換為arcgis js api能使用的格式


一個項目使用了ArcGIS JS API開發GIS展示層,但GIS服務使用了Geoserver,這時加載Geoserver數據和查詢數據就和之前完全不一樣了,以下介紹下我使用ArcGIS JS API+Geoserver開發過程中解決Geoserver圖層屬性查詢的一個方案。

 

以Geoserver中發布的圖層 city 為例。我現在要查詢city圖層中ID=53090000000000的對象,並使用ArcGIS JS API將查詢到的結果顯示出來。

 

首先找到查詢的實際地址:

http://localhost:9999/geoserver/換成自自己工作空間名稱/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=換成自自己工作空間名稱:city&maxFeatures=50&outputFormat=application/json&CQL_FILTER=ID=53090000000000

先不要管這個地址哪兒來的,對應上面需要改的地方改下試試先。如果不對,可以參考以下做法修正部分參數:

第一步:

 

第二步:

照這樣自己抓取看下,最后把抓取地址中的輸出類型改為json就可以了。參考上面給出的示例地址。

 

做好上面的准備過后,就是請求了。構建好url地址,使用ajax的post請求即可,如果出現跨域問題可以通過jsonp或者后台寫個httppost程序來轉換下。

我們關注的是請求結果,如下圖:

得到的結果包含了字段屬性和圖形坐標,這里可以使用json2.js完成對象到json的轉換。這里重要的介紹下圖形的重新繪制,我們關注的是features下的coordinates。

參考ArcGIS JS API中創建面的方法,如下圖:

於是我這樣寫:

var json = {
    "rings": points,
    "spatialReference": { "wkid": 4326 }
};
var polygon = new esri.geometry.Polygon(json);

結果居然是錯誤的,中間經歷了很多的嘗試,后來找到准確的寫法是這樣的:

var feature = features[i];
var points = [];
for (var n = 0; n < feature.geometry.coordinates.length; n++) {
    points.push(feature.geometry.coordinates[n][0]);
}
var json = {
    "rings": points,
    "spatialReference": { "wkid": 4326 }
};
var polygon = new esri.geometry.Polygon(json);

只能說geoserver存儲圖形的坐標方式和arcserver是不一樣的吧,這里是一個坑,希望對同樣掉入這個坑的人有點幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM