SuperMap iClient for Leaflet 实现空间查询
SuperMap iClient for Leaflet 实现空间查询,最常用的方式是调用数据服务 FeatureService 的 getFeaturesByGeometry,通过几何对象与空间关系模式(如 INTERSECT、CONTAIN)过滤指定数据集中的矢量要素,结果通常返回 GeoJSON 便于上图。也可以用地图服务 QueryService 的 queryByGeometry,或大数据场景下 ProcessingService 的单对象空间查询。截至 2026 年 11 月,配合 iClient 12.1.x(兼容 Leaflet 1.0.3~1.9.4)即可完成,重点在正确配置参数与空间模式。

地图服务查询与大数据单对象查询
当要素挂在地图图层上、需要按图层查询时,改用 QueryService:
- 参数类 L.supermap.QueryByGeometryParameters,指定 queryParams(图层名、属性过滤)、geometry、spatialQueryMode。
- 调用 new L.supermap.QueryService(mapUrl).queryByGeometry(params)。还支持 queryByBounds、queryByDistance、queryBySQL 等变体。
大数据或海量矢量场景用 ProcessingService 的单对象空间查询(addQueryJob):
- 参数 L.supermap.SingleObjectQueryJobsParameter,指定 source、dataset、mode(如 ‘INTERSECT’)等;多对象时默认取 SmID 最小的一个做查询对象。
- 处理地址示例为 spatialprocessing 或 distributedanalyst 的 jobs 接口;常配合 Leaflet.draw 交互选对象。
三者对比:数据服务面向数据集、灵活分页字段控制;地图服务绑定已发布地图图层;ProcessingService 适合分布式分析任务、异步 Job。日常 Web 应用优先数据服务 getFeaturesByGeometry。
参数配置、性能与注意点
| 参数 | 作用 | 建议 |
|---|---|---|
| spatialQueryMode | 空间关系 | 框选用 INTERSECT,面内点用 CONTAIN/WITHIN |
| returnFeaturesOnly | 只返要素 | 设 true,减少冗余 |
| fromIndex / toIndex | 分页 | 大数据强制分页,避免一次拉全量 |
| attributeFilter | 属性再过滤 | 与空间条件组合,缩小结果 |
| targetEpsgCode | 目标坐标系 | 与地图 CRS 一致,减少客户端转换 |
跨域时可用 options 的 crossOrigin、proxy、headers,或新版本 L.supermap.setRequestHeaders。绘制依赖 Leaflet.draw(常用 1.0.4)。打包若用 webpack,记得 babel-loader 处理 ES6。版本方面,npm 包现为 @supermapgis/iclient-leaflet(11.2.0 起更名),最新 12.1.3 可在GitHub Releases核对;CDN 也可直接引 iclient-leaflet.min.js。涉及 Revit 等外部模型进 SuperMap 再发布服务时,可参考SuperMap加载Revit?插件导出怎么设置?,保证源数据几何正确再查。
常见问题
为什么返回空结果?
先核对 spatialQueryMode 是否与几何关系匹配,再检查 datasetNames、服务是否可访问、几何坐标与数据集 CRS 是否一致;用 returnContent 与小范围几何做冒烟测试。
Promise 和回调都能用吗?
可以。新写法推荐 then/catch;旧文档也有回调。注意错误分支要打印 result.error 或网络状态,便于定位 404、跨域或参数校验失败。
文本类型怎么查?
文本仅支持 Intersect、Contain,且只能作为被搜索对象,不能当查询几何。其他类型点线面网络均可正常参与。
大数据一次查太多会卡?
务必设 returnFeaturesOnly: true,并用 fromIndex/toIndex 分页;或改走 ProcessingService 异步 Job,前端轮询结果再上图。
总结:日常用 FeatureService.getFeaturesByGeometry + 合适 SpatialQueryMode 就能完成大部分空间查询;地图服务与 ProcessingService 按图层或大数据需求选用。建议先在官方示例上改参数验证,再接到自己的服务;发布数据前用 iDesktop 检查坐标与属性,查询时坚持分页与 returnFeaturesOnly,结果稳定且性能可控。