首页 / 浏览问题 / 云GIS / 问题详情
iclient-leaflet sql查询数据集某一字段的所有唯一值?
20EXP 2022年05月30日

法1:超图现有api QueryBySQLParameter 能否构造上述查询语句 ?如果想获取制定字段的所有唯一值该如何编码

法2:另一种方法是采用sql查询出了该字段的所有数据,之后在进行重复值删除,但是数据量挺大会不会影响系统响应?

1个回答

你好,你可以在查询时设置groupby的查询过滤参数,返回某个字段的所有唯一值,例如:截图中所示有14个对象,按照text字段分组,得到他们的text字段的所有唯一值.

3,755EXP 2022年05月30日

我用的是地图sql查询api,加了groupBy条件,但是输出结果依旧是全部记录没有起到作用

可以先在官网的示例(https://iclient.supermap.io/examples/leaflet/editor.html#01_mapQueryBySQL)里面运行看看是否能出结果,我这边在示例里面修改参数为自己的服务,查询出来是没问题。代码参考:


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title data-i18n="resources.title_mapQueryBySQL"></title>
<script type="text/javascript" src="../js/include-web.js"></script>
</head>
<body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
<div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
<script type="text/javascript" src="../../dist/leaflet/include-leaflet.js"></script>
<script type="text/javascript">
    var host = window.isLocal ? window.server : "https://iserver.supermap.io";
    var map, resultLayer,
        url = "http://localhost:8090/iserver/services/map-deijia/rest/maps/onlyvalue";
    map = L.map('map', {
        preferCanvas: true,
        crs: L.CRS.EPSG4326,
        center: [34.33,97.01],
        maxZoom: 18,
        zoom: 2
    });
    new L.supermap.TiledMapLayer(url).addTo(map);
    query();

    function query() {
        var param = new L.supermap.QueryBySQLParameters({
            queryParams: {
                name: "ceshi@diejia",
                attributeFilter: "SmID < 20",
                groupBy:"text",
                fields:['text']
            }
        });
        new L.supermap
            .QueryService(url)
            .queryBySQL(param, function (serviceResult) {
                console.log(serviceResult);
                var result = serviceResult.result;
                resultLayer = L.geoJSON(result.recordsets[0].features).addTo(map);
            });
    }
</script>
</body>
</html>

好的谢谢,在示例测试确实没问题,应该是本地代码调用有问题
...