SuperMap iServer新增支持FlatGeobuf数据格式,查询渲染性能提升2-3倍

news2024/11/26 3:37:09

导语

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)地图查询

返回记录GeoJSONFlatGeobuf(全量加载)FlatGeobuf(按需加载)
5千面(145万节点)57.9 MB24.4MB11.2 MB
1万面(198万节点)80.9 MB34.7 MB15.7 MB
5万面(619万节点)264 MB116 MB26.2 MB

2)数据集查询

返回记录GeoJSONFlatGeobuf(全量加载)FlatGeobuf(按需加载)
5千面(145万节点)57.9 MB24.2 MB11.1 MB
1万面(198万节点)81.1 MB34.3 MB15.5 MB
5万面(619万节点)264 MB114 MB25.7 MB

3.2 Web端动态查询到浏览器渲染性能对比

1)地图查询

返回记录GeoJSONFlatGeobuf(全量加载)FlatGeobuf(按需加载)
5千面(145万节点)7.3s3.1s1.9s
1万面(198万节点)10.5s5s3.1s
5万面(619万节点)55s31s21s

2)数据集查询

返回记录GeoJSONFlatGeobuf(全量加载)FlatGeobuf(按需加载)
5千面(145万节点)9.4s2.1s0.96s
1万面(198万节点)12s4.1s1.7s
5万面(619万节点)43s23s12s

3.3 总结

  1. SuperMap iServer 地图查询和数据集查询,返回FlatGeobuf表述相较GeoJSON体积减少42%;
  2. 按需加载FlatGeobuf表述,返回数据量大小视浏览范围内数据量决定,总体较FlatGeobuf全量加载体量更小;
  3. 数据集查询比地图查询性能高,且使用FlatGeobuf 比使用 GeoJSON 效率高;

综上,FlatGeobuf表述在Web端进行地图查询与数据查询较GeoJSON表述,结果数据体量小、加载速度快。建议用户在相似场景中优先选择使用FlatGeobuf表述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/774017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【代码随想录 | Leetcode | 第三天】数组 | 长度最小的子数组

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来滑动窗口的分享✨ 目录 前言209. 长度最小的子数组总结 209. 长度最小的子数组 ✨题目链接点这里 给定一个含有 n 个正整数的数组和一个正整数target。找出该数组中满足其和 ≥ target 的长度…

ubantu下的前后端部署

ubantu 远程ssh连接 通过ssh远程连接服务器,传输文件和执行命令 首先更新软件包保证版本最新 sudo apt update安装ssh sudo apt install openssh-server安装完成后默认开启,也可输入命令查看ssh状态 sudo systemctl status ssh如果输入为下图&#…

warning: ignoring JAVA_HOME=D:\JDK; using bundled JDK报错解决

warning: ignoring JAVA_HOMED:\JDK; using bundled JDK报错原因是因为你JDK版本太低或者你的ElasticSearch版本太高降低版本即可、 我的是JDK1.8我下载的是elasticsearch-8.7.0改成elasticsearch-7.6.1就可以了 elasticsearch-7.6.1地址:弹性搜索 7.6.1 |弹性的 …

【动手学深度学习】--13.使用块的网络 VGG

文章目录 使用块的网络 VGG1.VGG块2.VGG网络3.训练模型 使用块的网络 VGG 学习视频:使用块的网络 VGG【动手学深度学习v2】 官方笔记:使用块的网络(VGG) 1.VGG块 经典卷积神经网络的基本组成部分是下面的这个序列:…

软件测试转车载测试应该怎么做?

1、你要是零基础小白,做车载测试零基础没有经验,可以找到工作吗?没有汽车软件测试经验零基础小白能找到汽车测试的工作吗?对于企业而言,企业比较倾向于录用,就能给公司带来利益的员工来了就能直接上岗&…

公开讲座笔记 | 雷达学报 雷达系统微课 - 第一讲 雷达系统 与 “1+1=2“

原笔记链接:https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486333&idx1&sn05397073a1e645d68e2611c9f9f3aeef&chksmcf51b984f8263092dd4ac6c6fd76817ae022ec8f0cda9a915245156cb4c3eb849091da06fdd1#rd 公开讲座笔记 | 雷达学报 雷达系统…

vue3 和vue2 的插槽写法区别

目录 1. vue2 2. vue3 注意的点: 1. vue2 2. vue3 注意的点: 在data里面定的初值,最好不要直接赋给表格数据。如下: data里面 editRow初始化 给表格tableData 赋值

Spring Boot学习

Spring Boot 配置 同一目录下配置文件优先级:.properties > .yml > .yaml 错误:org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 Caused by: java.nio.charset.MalformedInputException: Inp…

将网页数据读入数据库+将数据库数据读出到网页——基于python flask实现网页与数据库的交互连接【全网最全】

本篇博客的目标是:在网页端输入数据,然后将数据存入数据库。但仅仅“存放”还不满能足需求,因此我们还需要能够取出数据,进行数据的比对分析。 我们将任务分解为4步:第1步用python连接到数据库,第2步用pyt…

ubuntu20.04部署Nessus_pro2023年6月30日版本

这里写目录标题 1. 前期准备2. nessus前期安装2.1. 下载nessus2.2. 安装nessus2.3. 运行nessus 3. 设置nessus3.1. 初始化设置3.2. 无插件3.3. 获取更新插件3.4. 设置目录权限及插件信息3.4.1. 设置plugins目录权限3.4.2. 设置plugin_feed_info.inc权限3.4.3. 查看插件信息3.4.…

如何成为网络安全大牛(黑客)?

网安专业从始至终都是需要学习的,大学是无法培养出合格的网安人才的。这就是为啥每年网安专业毕业生并不少,而真正从事网安岗位的人,寥寥无几的根本原因。 如果将来打算从事网安岗位,那么不断学习是你唯一的途径。 网络安全为什…

C语言 register关键字与“傲娇的编译器”

1.作用: “建议”编译器把变量放到寄存器内,编译器不一定听你的(傲娇)!! 2.速度:寄存器>高速缓存>内存,寄存器空间很宝贵(非常非常少) 3.寄存器不支持取…

JavaScript基础篇(11-20题)

此文章,来源于印客学院的资料【第一部分:基础篇(105题)】,也有一些从网上查找的补充。 这里只是分享,便于学习。 诸君可以根据自己实际情况,自行衡量,看看哪里需要加强。 概述如下: 模块化开…

React和Vue生命周期、渲染顺序

主要就是命名不同 目录 React 组件挂载 挂载前constructor() 挂载时render() 挂载后componentDidMount():初始化节点 更新 更新时render():prop/state改变 更新后componentDidUpdate() 卸载 卸载前componentWillUnmount():清理 V…

利用数据与分析,推动企业数字化发展的路线图

导读 如今,保持数据与分析(D&A)战略与业务发展的统一同步,是助力企业机构成功和推进数字化项目的关键。敏捷的数据与分析能力对于培养感知-响应能力至关重要,可帮助企业机构满足全新的需求,进入前所未…

git页面管理用户账号和密码(新建用户和初始化密码)

本文章适用:没有固定的用户认证(AD域或者LDAP等),git私有仓库单独管理用户(新建用户和初始化密码)。 1.创建新用户 以管理员的身份登录,进入git的管理模式,点击“New user”&…

copilot使用初体验(一)

写函数 1、写一个注释,按下回车,会自动生成函数(函数名函数体),然后按下 tab,接受建议。 // 找出一个数组中houseId等于3的那项 findHouseIdIs3(arr) {return arr.find(item > item.houseId 3) },快捷…

UDP-组播,广播

转自:https://www.cnblogs.com/wangzhilei-src/p/15314315.html UDP是面向非连接的协议,它不与对方建立连接,而是直接把数据报发给对方。UDP无需建立类如三次握手的连接,使得通信效率很高。因此UDP适用于一次传输数据量很少、对可…

python 100以内的质数

可以使用for循环 # 求100以内的质数 i 2 for j in range(1, 101): #如果100以内的数字除以2的余数等于0if (j % i 0): #如果是就跳过,继续下一个循环continueprint(j) 要找出从1到100之间的质数,你可以使用嵌套循环和判断条件来实现。 print("…

硬中断、软中断详解

文章目录 什么是中断? 什么是计算机的中断? 什么叫硬中断、什么叫软中断? 怎么查看硬中断、软中断 查看硬中断的运行情况 cat /proc/interrupts 查看软中断的运行情况 cat /proc/softirqs 怎么排查软中断过高的问题? 软中断注意事…