首页 / 浏览问题 / WebGIS / 问题详情
Leaflet API如何实现根据a字段统计多边形或圆域范围内的要素的b字段
8EXP 2021年11月19日

iServer 10i(2020)

iClient for Leaflet API如何实现根据a字段统计多边形或圆域范围内的要素的b字段

已尝试:

使用 L.supermap.queryService(url).queryByGeometry 和 L.supermap.queryService(url).queryByDistance 无法得到统计结果

使用 L.supermap.queryService(url).queryBySQL 可以统计,但无法传递空间条件(geometry参数)

1个回答

您好, L.supermap.queryService(url).queryBySQL您是怎么统计的呢,范围查询api可以参考这个https://iclient.supermap.io/web/apis/leaflet.html

1,010EXP 2021年11月19日
是为了统计数据,不是查询要素

queryService.queryBySQL(new SuperMap.QueryBySQLParameters({
    queryParams: [{
        name: '',
        groupBy: '类型',
        fields: ['类型', 'sum(area) as area', 'count(1) as num'],
    }],
}), callback);

上面这个可以统计出area和num,但不能传空间条件

下面这个可以传空间条件,但不能统计出结果

queryService.queryByGeometry(new SuperMap.QueryByGeometryParameters({
    queryParams: [{
        name: '',
        groupBy: '类型',
        fields: ['类型', 'sum(area) as area', 'count(1) as num'],
    }],
    geometry,
}), callback);

您可以参考这个问题http://qa.supermap.com/61626

http://qa.supermap.com/61626 这个我看过了  实现不了我的需求  他是用getFeaturesBySQL 这个也不能传geometry条件

我需要能同时按空间条件(geometry)和属性条件(attributesFilter)统计,我觉得代码应该是写成如下形式

queryService.queryByGeometry(new SuperMap.QueryByGeometryParameters({
    queryParams: [{
        name: '',
        attributeFilter: `类型 <> 'abc'`,
        groupBy: '类型',
        fields: ['类型', 'sum(area) as area', 'count(1) as num'],
    }],
    geometry,
}), callback);

但上述代码不能正常返回结果,官方文档也没有相应的demo

重点是  能同时传递geometry, attributeFilter, groupBy, fields参数 且fields参数里存在 形如  sum(fieldname) as alias 的表达式

您好刚才测试了一下,几何查询和空间查询不能用groupby的,sql查询能用
那么如何实现按空间条件统计数据,queryService.queryBySQL能否传递空间条件,如何传递
目前能想到的办法就是先进行范围查询,再自己对查询结果进行解析,目前是没有您说的接口的
...