项目中需要判定两个面间的拓扑关系,ArcGIS中三种常用查询:QueryTask、FindTask、IdentifyTask,其中query查询比较适合判断两个几何图形(点、线、面)之间的关系(重合、相交、分离等)。
在使用中发现spatialRelationship参数使用灵活度较大,为了便于以后使用,特此记下来query查询的一些应用方法, 首先上一段通用query查询方法。
/**
* 通用query查询方法
* @param url 查询图层URL
* @param outFields 需要输出的字段
* @param relation 查询类型
* @param geometry 空间几何范围
* @param result 查询结果回调函数
* @param fau 查询失败回调函数
* @param relationParam 自定义查询条件
*
*/
public static function queryUtil(url:String,outFields:Array,relation:String,geometry:Geometry,
result:Function,fau:Function,relationParam:String=""):void
{
var queryTask:QueryTask = new QueryTask(url);
var query:Query = new Query();
query.outFields = outFields;
query.spatialRelationship = relation;
if(relation==Query.SPATIAL_REL_RELATION){
query.relationParam=relationParam;
}
query.geometry = geometry;
query.returnGeometry = true;
queryTask.showBusyCursor = true;
queryTask.useAMF = false;
queryTask.execute(query, new AsyncResponder(result, fau));
}
方法的参数如下:
- url:某个图层的服务地址,是精确到单个图层的。
- outFields:输出字段,如果需要获取查询后结果中的几何图形的属性信息,可通过该参数进行控制。
- relation:查询类型,这个参数就是要查询的几何拓扑关系。
- geometry:需要查询的几何图形范围,可以是点线面
- result、fau:成功失败的回调函数。
- relationParam:自定义查询条件,在relation为SPATIAL_REL_RELATION时,可使用自定义的查询条件。
重点介绍下自定义的查询条件,ArcGIS API for Flex提供了几个常用的查询条件,具体可参考官方api。当官方提供的查询条件不能满足需求时,可设置queryTask的spatialRelationship参数值为SPATIAL_REL_RELATION,然后自定义设置relationParam。
自定义规则如下:
自定义的规则为单个字符串,每个字符使用"T"、"F"、"*"表示,T表示为真,F表示为假,*表示不限制。
项目中需要判断两个区域(面)是否相离,就是不能让两个面相交,边界重合,相互包含。刚开始使用官方提供的几个规则都不能很好的进行条件判断,最后自己设置了一条规则,“T*******T”,可满足条件的判断。