1. 程式人生 > >ArcGIS Server 設定空間過濾條件

ArcGIS Server 設定空間過濾條件

.

最近遇到一個問題,使用者想在 Server Rest 中的 Export Map 進行空間過濾顯示,就是顯示某一個矩形範圍內要素。我當時一臉懵逼,Export Map 中有一個 Layer Definitions 引數可以過濾條件,平時都是寫的屬性條件,還可以設定空間過濾條件??(黑人問號臉)。

然後查了半天資料,發現。。。。。真的可以哎!!參考文件:http://blog.newnaw.com/?p=1160https://www.cnblogs.com/beijixingqiao/archive/2013/02/21/2920628.html

大部分我們寫的都是類似於 name=’北京市’ 的 屬性條件的 SQL 語句,其實layerDefs 這個引數也是可以接受空間SQL語句的。這篇文章我們用到的是 ST_Within 和 ST_Geometry。
更多引數見:

http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/006z00000050000000/

首先我們要保證資料是儲存在資料庫中的,我的資料是放在 Oracle 中的,然後釋出成普通的地圖服務即可。我先在ArcMap 中開啟圖層,然後在圖層對話方塊的Definition Query標籤頁中輸入了 SQL 語句,是可以成功執行的。一下就成功了,美滋滋~

sde.st_within (shape, sde.st_geometry ('polygon ((12818466 4196179,13308886 4196179,13308886 4499482,12818466 4499482,12818466 4196179))'
, 3857)) = '1'

這裡寫圖片描述

然後我將該圖層釋出成服務,滿心歡喜的到 Export Map 去執行,發現!執行失敗。。。。

這裡寫圖片描述

原來是Server啟用了 標準化查詢 為了防止 SQL 注入攻擊,ArcGIS Server預設是啟用標準化查詢的,如果需要在應用程式中使用資料庫特定的 where 子句語句,可以通過訪問 ArcGIS Server 管理員目錄禁用標準化查詢。

1. 開啟管理員目錄,然後以具有管理許可權的使用者身份登入到站點。(地址如:http://gisserver.domain.com:6080/arcgis/admin)。
2. 單擊系統 > 屬性 > 更新。
3. 在操作 - 更新 頁面,在系統屬性對話方塊中輸入以下字串:{"standardizedQueries": "false"}


4. 單擊更新。
5. 然後重新啟動 ArcGIS Server。

這裡寫圖片描述

最後,在 Export Map 執行空間過濾,成功!!!

這裡寫圖片描述