ArcGIS Server 设置空间过滤条件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/smss007/article/details/81559143

.

最近遇到一个问题,用户想在 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 执行空间过滤,成功!!!

这里写图片描述

猜你喜欢

转载自blog.csdn.net/smss007/article/details/81559143