法1:超图现有api QueryBySQLParameter 能否构造上述查询语句 ?如果想获取制定字段的所有唯一值该如何编码
法2:另一种方法是采用sql查询出了该字段的所有数据,之后在进行重复值删除,但是数据量挺大会不会影响系统响应?
你好,你可以在查询时设置groupby的查询过滤参数,返回某个字段的所有唯一值,例如:截图中所示有14个对象,按照text字段分组,得到他们的text字段的所有唯一值.
我用的是地图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>