首页 / 浏览问题 / 云GIS / 问题详情
GetFeaturesBySQLService总条数
19EXP 2018年08月27日

GetFeaturesBySQLService查询返回的totalCount是数据集里总记录数,怎么获取过滤条件后的总数

1个回答

您好,您这个看的是初始的总数,

function query() {
        var sqlParam = new SuperMap.GetFeaturesBySQLParameters({
            queryParameter: {
                name: "Countries@World",
                attributeFilter: "SMID = 247"
            },
            datasetNames: ["World:Countries"]
        });
        L.supermap
            .featureService(url)
            .getFeaturesBySQL(sqlParam, function (serviceResult) {
                resultLayer = L.geoJSON(serviceResult.result.features).addTo(map).bindPopup('SMID = 247');
                console.log(serviceResult);
            });
    }

这个查询结果中有这个

5,668EXP 2018年08月27日
我这边result没有这个属性,我用的8c
您的那个里面不是有个lastResult么,里面那个featureCount的是不是就是你查询到的那一条

还是不对

那您这个查询的结果想要什么值呢?或者您把您的查询条件和应该得到的查询结果的数量说一下,然后贴一下代码我也看看。
function searchData() {
        const url = 'http://localhost:8090/iserver/services/data-world/rest/data';
        var filterParams = new SuperMap.REST.FilterParameter({
            name: 'countries@world',
            attributeFilter: 'smid > 0 and smid < 20',
        });
        var getFeatureBySQLParams = new SuperMap.REST.GetFeaturesBySQLParameters({
            queryParameter: filterParams,
            datasetNames: ['world:countries'],
            fromIndex: 0,
            toIndex: 9,
        });
        var service = new SuperMap.REST.GetFeaturesBySQLService(url, {
            eventListeners: {
                'processCompleted':function(args) {
                    console.log(args);
                },
                'processFailed': function(error) {
                    console.log(error);
                }
            }
        });
        service.processAsync(getFeatureBySQLParams);
    }

想做分页,返回'smid > 0 and smid < 20'这个过滤条件下的总数
您把toIndex的值改成-1的话是可以显示所有被查询的feature了,或者您这个想要查询smid>0且smid<20的feature,一共有19条,把toIndex改成19也可以
我的意思是能不能在查询每页数据时结果集里返回该过滤条件下记录数。不用为总数查一次,而且数据量有点大,返回全部feature的话很慢
 function getFeaturesBySQL(num) {

                var getFeatureParam, getFeatureBySQLService, getFeatureBySQLParams;

                getFeatureParam = new SuperMap.REST.FilterParameter({
                    /* name: "标线@大连全数据",
                    attributeFilter: "SMID < 100",
                    attributeFilter: "REGISTERDATE between '2013/11/3' and '2013/11/6'",
                    fields:["REGISTERDATE"] */
                    
                	name: "Countries@World",
                    attributeFilter: "SMID < 30"
                });
                getFeatureBySQLParams = new SuperMap.REST.GetFeaturesBySQLParameters({
                	toIndex:-1,
                    queryParameter: getFeatureParam,
                    //datasetNames:["大连全数据:标线"],
                    datasetNames:["World:Countries"],
                    //fromIndex:0,
                    //toIndex:4
                    fromIndex:(num-1)*3,
        			toIndex:(num*3-1)
                });
                getFeatureBySQLService = new SuperMap.REST.GetFeaturesBySQLService(url2, {
                    eventListeners: {"processCompleted": processCompleted, "processFailed": processFailed}});

                getFeatureBySQLService.processAsync(getFeatureBySQLParams);
            }

您可以参考这个的写法,核心的主要是fromIndex和toIndex那两行

这样toIndex不就是(num*3)-1,有什么区别吗
这个num就是几个按钮或者分页的页数按钮,分别的事件是getFeaturesBySQL(1),getFeaturesBySQL(2)这些。

这个num就是这些的值,得到的效果也就是当num为1时得到2个值,从第0个开始作为第一个button触发后得到的值,当num为2时得到5个值,从第3个开始的值作为第二个button触发后得到的值,就相当于成功的将这个查询结果进行分页获取了。
...