首页 / 浏览问题 / WebGIS / 问题详情
海量数据过滤展示
7EXP 2025年09月02日
问题背景:基于pgsql存储空间数据,表中有几十万条面数据。 发布iserver地图服务、数据服务。 使用iclient for openlayers进行开发和展示。 现需要根据属性对数据进行筛选展示,例如task_id='a',展示符合条件的面数据。 1.目前按照数据服务getFeaturesBySQL的方式实现筛选,再使用openlayers矢量图层配色展示。但问题是筛选出来的面数据有几万条,数据量太大,接口要执行几十秒时间,甚至会导致iserver或数据库崩溃。 2.考虑通过地图服务使用LayerStatus创建临时图层的方法实现,但目前遇到问题,无论怎么设置过滤条件,都无法实现过滤效果,创建的临时图层会展示所有数据,应该怎样正确实现过滤展示?另外展示的数据都是默认颜色,怎样手动更改样式配色?

1个回答

① 升级iServer到最新版本,升级到11.3.0或者12.0.0

② 数据优化
1)创建字段索引和创建空间索引
当需要对地图服务、数据服务进行 SQL 字段查询时,建议在发布服务前,使用iDesktopX 对数据源内需要查询的字段先行设置字段索引和空间索引从而提高查询效率
2)对矢量数据进行抽稀简化
有时候返回的面数据数量只有1条,但是节点数超过10万个,使用 iDesktopX 对原始数据进行抽稀处理,减少节点数量
3)根据业务场景,删除项目中不需要属性字段
4)根据业务场景对数据分块存储(如全省数据,按市进行分表存储)
5)数据库类型数据集,通过iDesktopX性能诊断工具(右图3),相同环境对比 iDesktopX 查询速率与数据库客户端查询效率

③ 前端代码优化
1)返回格式优化
      例如iClient JavaScript,支持返回FlatGeobuf、GeoJSON、JSON格式,推荐使用FlatGeobuf
      相同数据量返回,体积由小到大:FlatGeobuf > GeoJSON > JSON
      FlatGeobuf(11.1.1及以上版本),采用了二进制编码,可以显著减小文件大小,这使得数据的传输和存储更加快速和高效,需要iClient前端设置,使用方式可以参考https://blog.csdn.net/supermapsupport/article/details/131807166 

2)返回数量优化
      例如一次性返回10万条数据,通常前端不需要一次性返回10万条记录进行渲染,我们可以通过前端的代码控制,利用startRecord(开始查询的记录号)和expectCount(希望得到的记录数量)来实现分页查询。

3)不返回无用字段
     通过iClient JavaScript代码中FilterParameter,设置返回字段fields,只返回业务需要字段,从而减少查询返回体积

4)不返回几何对象
      有时候只需要属性信息,不需要几何对象的话,
      地图服务可以将queryOption设置为ATTRIBUTE,只返回属性信息
      数据服务可以设置hasGeometry属性为false,只返回属性信息

 

1,366EXP 2025年09月02日
生成的.fgb的newResourceLocation是否会占用iserver的资源?每次查询都会生成一个会不会导致内存积压等问题?有没有生命周期和销毁相关的参考呢
...