首页 / 浏览问题 / 其他 / 问题详情
iclient进行空间查询的方式
209EXP 2022年02月08日

我是用iclient进行空间查询(通过选中矩形图层和点数据集图层进行相交查询),方法如下:

queryParam = new SuperMap.REST.FilterParameter({
  name:"RISKMAP_ADDRESS@ORCL_riskcontrol",
  attributeFilter:"exists  (select 1 from riskmap_main where "+this.nowdate+this.riskMapData.sqlName+".SMID = riskmap_main.ADDRESSID and"+this.sumAmount+this.MapCode+this.policyno+" riskmap_Main.sumAmount<>'0'"+this.powerSQL+ this.sumPay+") and VALIDSTATUS = '1'"+this.address,
});

最终的过滤条件attributeFilter为: exists  (select 1 from riskmap_main where  sysdate between RiskMap_Main.STARTDATE and RiskMap_Main.ENDDATE 
and SMDTV_163.SMID = riskmap_main.ADDRESSID and riskmap_Main.sumAmount<>'0' and 
((  EXISTS  ( select prpDcompany.comCode from PrpDcompany prpDcompany where riskmap_main.comCode
 = prpDcompany.comCode and (prpDcompany.upperPath like '00000000%'))))) and VALIDSTATUS = '1'

而此时是查询不出来数据来的,但是如果我将sql语句执行到数据库中

select * from SMDTV_163 where 1=1 and
exists  (select 1 from riskmap_main where  sysdate between RiskMap_Main.STARTDATE and RiskMap_Main.ENDDATE 
and SMDTV_163.SMID = riskmap_main.ADDRESSID and riskmap_Main.sumAmount<>'0' and 
((  EXISTS  ( select prpDcompany.comCode from PrpDcompany prpDcompany where riskmap_main.comCode
 = prpDcompany.comCode and (prpDcompany.upperPath like '00000000%'))))) and VALIDSTATUS = '1';

是可以查询出来数据的,同样的我将attributeFilter 的过滤条件改为下面的方式也是可以查询出来数据的(同样的改为 attributeFilter:"1=1 and exists ( select 1 from PrpDcompany)"  也可以查到),说明iserver中已经集成了PrpDcompany和RiskMap_Main的业务表数据,如下: 

queryParam = new SuperMap.REST.FilterParameter({
  name:"RISKMAP_ADDRESS@ORCL_riskcontrol",
  attributeFilter:"1=1 and exists ( select 1 from  riskmap_main)"
});

请问一下,这是什么原因呢? 是iclient要求的过滤条件的数据不能过多吗?还是有其他的原因呢? 麻烦老师帮忙解答一下

1个回答

您好,您最终的目的是什么呢, attributeFilter 作为一个过滤条件,您像这样写的话会不会显得有所麻烦。
341EXP 2022年02月08日
老师,经过试验是由   and SMDTV_163.SMID = riskmap_main.ADDRESSID这个条件导致查询不出来数据的问题,其中SMDTV_163 是图层RISKMAP_ADDRESS@ORCL_riskcontrol中RISKMAP_ADDRESS对应的表名,请问一下这个应该怎样解决呢?
所以您的意思是 你要从   图层RISKMAP_ADDRESS@ORCL_riskcontrol   中查询 到  RISKMAP_ADDRESS   这个数据对吗?

根据你的问题我的理解是你想通过一个面要素去查询到这个图层中的点数据并让他显示出来对吗,然后这个矩形其实也是你的数据。

如果像这样的话我的建议是你直接通过一个点击事件将矩形要素作为一个 attributeFilter  的判断条件,就可以将想要的结果展示出来
我需要将RISKMAP_ADDRESS@ORCL_riskcontrol中的数据过滤一下,满足图层中的SMID 和riskmap_main中ADDRESSID相等,并且加上其他的条件,查询出圈出的面数据中的符合条件的数据 ,所以需要   SMDTV_163.SMID = riskmap_main.ADDRESSID条件进行过滤,同时矩形要素只是其中的一个条件,不是矩形要素中的所有的点数据都要,所以需要过滤一下,请问老师,有什么好的解决方法吗?
所以您的目的是像在这个圈出来的面数据中查询出 SMID 和riskmap_main中ADDRESSID相等 的点要素吗?
...