导语
FlatGeobuf是一种地理数据存储格式,采用了二进制编码,相比其他文本或XML格式更高效,可以显著减小文件大小,这使得数据的传输和存储更加快速和高效。
SuperMap iServer 11i(2023) (以下简称SuperMap iServer11.1)新增对FlatGeobuf表述支持,可实现分段传输和按需加载效果,下文将详细介绍如何实现。
一、FlatGeobuf简介
1.1 什么是FlatGeobuf
FlatGeobuf是一种用于存储地理要素的坐标、类型的二进制编码格式,能够存储简单要素规范下的要素数据(如点、线、面等)。
FlatGeobuf 格式与传统的 Shapefile、GeoJSON 等文件格式类似,均支持地理空间矢量数据的存储,但 FlatGeobuf 格式具有更高的存储效率和更快的读写速度,适用于大量静态数据的编码与传输。使用 FlatGeobuf 格式存储和传输数据,可以加快网络传输速度,缩短矢量要素的渲染时间,从而优化用户的使用体验。
1.2 FlatGeobuf优缺点
优点
- 紧凑性,FlatGeobuf使用二进制编码,可以将数据存储为更小的文件,从而节省磁盘空间和网络带宽。
- 快速读取,采用二进制编码,FlatGeobuf能够以更高的速度进行读取和解析,加快了数据访问的效率。
- 跨平台支持,FlatGeobuf可以被多个GIS软件和工具所支持,并且提供了多种语言的API,允许在不同平台上进行数据转换和处理。
- 分段传输和按需加载,FlatGeobuf支持分段传输和按需加载,可以仅加载需要的数据块,而无需加载整个数据集,提高了数据查询和展示的效率。
缺点
- 几何与属性数据并未分离。
- 文件体积较之于 GeoPackage 格式无明显优势。
- 难以直接编辑,与文本格式相比,FlatGeobuf的二进制编码方式使得直接手动编辑数据变得困难。
关于FlatGeobuf更多信息:https://github.com/flatgeobuf/flatgeobuf
1.3 FlatGeobuf适用场景
- 大规模静态数据编码与传输,使用FlatGeobuf格式可以有效地存储和传输大规模的地理数据。采用紧凑的二进制编码,可以显著减小数据文件的大小,并提高数据的加载速度。
- 跨平台数据共享,FlatGeobuf格式具有跨平台的特性,可以被不同GIS软件和工具所支持和解析(例如:GeoServer、QGIS、GeoTools、PostGIS等)。这使得不同GIS系统之间的数据共享更加便捷,无需进行复杂的数据转换和兼容性处理。
- 分段传输和按需加载,FlatGeobuf格式支持将地理数据进行分段传输和按需加载。这意味着只需加载需要的数据块,而无需一次性加载整个数据集,从而提高数据的查询和展示效率。
二、如何使用FlatGeobuf
2.1 SuperMap iServer
SuperMap iServer 11.1默认支持对地图查询(queryResults)、数据查询(featureResults)等资源返回 FlatGeobuf 格式,文件格式*.fgb。
如下图所示,地图查询结果可以使用fgb表述返回。
SuperMap iServer 11.1支持输出 FlatGeobuf 格式的服务能力如下:
2.2 SuperMap iClient
SuperMap iClient 11.1(Leaflet、Openlayer、MapboxGL)支持直接访问云存储.fgb文件或通过SuperMap iServer 11.1 服务返回的FlatGeoBuf格式文件,并支持流式传输和渲染(关于FlatGeoBuf示范程序请访问https://iclient.supermap.io/站点进行查看)
FlatGeoBuf 数据有全量加载和按需加载两种加载策略,可以通过修改前端代码中FGBLayer的加载策略参数 strategy,选择all(全量加载)和bbox(按需加载)来优化浏览体验。
全量加载FlatGeoBuf 2500万点数据效果:
按需加载FlatGeoBuf 2500万点数据效果:
三、FlatGeobuf与GeoJSON性能对比
测试环境 | CPU:Intel® Core™ i7-10875H |
---|---|
内存 | 16G |
浏览器 | Chrome 113 |
测试数据 | 5万地类图斑面数据(619万节点,每条记录含26个属性字段)udbx存储 |
测试版本 | supermap-iserver-11.1.0-windows-x64.zip |
测试方法 | 1.地图查询、数据查询返回GeoJSON表述与FlatGeobuf表述文件大小对比; 2.地图查询、数据集查询从Web端查询到浏览器渲染GeoJSON表述与FlatGeobuf表述性能对比; |
3.1 文件大小
1)地图查询
返回记录 | GeoJSON | FlatGeobuf(全量加载) | FlatGeobuf(按需加载) |
---|---|---|---|
5千面(145万节点) | 57.9 MB | 24.4MB | 11.2 MB |
1万面(198万节点) | 80.9 MB | 34.7 MB | 15.7 MB |
5万面(619万节点) | 264 MB | 116 MB | 26.2 MB |
2)数据集查询
返回记录 | GeoJSON | FlatGeobuf(全量加载) | FlatGeobuf(按需加载) |
---|---|---|---|
5千面(145万节点) | 57.9 MB | 24.2 MB | 11.1 MB |
1万面(198万节点) | 81.1 MB | 34.3 MB | 15.5 MB |
5万面(619万节点) | 264 MB | 114 MB | 25.7 MB |
3.2 Web端动态查询到浏览器渲染性能对比
1)地图查询
返回记录 | GeoJSON | FlatGeobuf(全量加载) | FlatGeobuf(按需加载) |
---|---|---|---|
5千面(145万节点) | 7.3s | 3.1s | 1.9s |
1万面(198万节点) | 10.5s | 5s | 3.1s |
5万面(619万节点) | 55s | 31s | 21s |
2)数据集查询
返回记录 | GeoJSON | FlatGeobuf(全量加载) | FlatGeobuf(按需加载) |
---|---|---|---|
5千面(145万节点) | 9.4s | 2.1s | 0.96s |
1万面(198万节点) | 12s | 4.1s | 1.7s |
5万面(619万节点) | 43s | 23s | 12s |
3.3 总结
- SuperMap iServer 地图查询和数据集查询,返回FlatGeobuf表述相较GeoJSON体积减少42%;
- 按需加载FlatGeobuf表述,返回数据量大小视浏览范围内数据量决定,总体较FlatGeobuf全量加载体量更小;
- 数据集查询比地图查询性能高,且使用FlatGeobuf 比使用 GeoJSON 效率高;
综上,FlatGeobuf表述在Web端进行地图查询与数据查询较GeoJSON表述,结果数据体量小、加载速度快。建议用户在相似场景中优先选择使用FlatGeobuf表述。