CN113760917B - 一种矢量瓦片存储构建方法及系统 - Google Patents
一种矢量瓦片存储构建方法及系统 Download PDFInfo
- Publication number
- CN113760917B CN113760917B CN202111057461.9A CN202111057461A CN113760917B CN 113760917 B CN113760917 B CN 113760917B CN 202111057461 A CN202111057461 A CN 202111057461A CN 113760917 B CN113760917 B CN 113760917B
- Authority
- CN
- China
- Prior art keywords
- vector
- grid
- tile
- vector tile
- tiles
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/29—Geographical information databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Remote Sensing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Image Processing (AREA)
Abstract
本发明提出了一种矢量瓦片存储构建方法及系统,涉及地理信息技术领域。该方法包括:将矢量数据空间按照行列形式迭代划分为网格。若任一网格中节点数量nHid小于nε,则网格停止迭代划分。若nHid大于nε,则网格继续迭代划分,以得到“稠密‑稀疏”网络。对“稠密‑稀疏”网络中所有网格进行GeoHash编码,以得到空间编码。对矢量瓦片进行时间编码。根据时间编码和空间编码得到各矢量瓦片对应的时空编码。将矢量瓦片存储至Redis数据库。该方法及系统考虑了矢量数据空间分布的差异,避免了所存储的不同矢量瓦片的数据量存在较大差异而引发矢量瓦片加载速度慢、矢量瓦片传输慢、矢量瓦片显示“卡顿”等问题,满足了Web端对矢量瓦片快速访问的需求。
Description
技术领域
本发明涉及地理信息技术领域,具体而言,涉及一种矢量瓦片存储构建方法及系统。
背景技术
随着GIS(地理信息系统)应用越来越普遍,基于Web的地图可视化需求日益凸显。受限于网络带宽、高并发数据请求、数据库I/O能力等因素,桌面端GIS应用直接操作矢量数据本身进行可视化应用的模式无法解决WebGIS的可视化需求。由此,Google公司提出了一种栅格瓦片技术,其实现了大规模数据在浏览器端的快速显示。传统的矢量瓦片地图借鉴了栅格瓦片金字塔模型,采用“自顶向下”瓦片组织方法,以规则网格进行瓦片的划分和<显示层级,行列号>的组织方式。但是其忽略了矢量数据空间分布的差异和空间对象图形复杂度的差异,导致了所存储的不同矢量瓦片的数据量存在较大差异,最终引发矢量瓦片加载速度慢、矢量瓦片传输慢、矢量瓦片显示“卡顿”等问题,无法满足Web端对矢量瓦片快速访问的需求。
发明内容
本发明的目的在于提供一种矢量瓦片存储构建方法及系统,用以改善现有技术中由于忽略了矢量数据空间分布的差异和空间对象图形复杂度的差异,导致了所存储的不同矢量瓦片的数据量存在较大差异,最终引发矢量瓦片加载速度慢、矢量瓦片传输慢、矢量瓦片显示“卡顿”等问题,无法满足Web端对矢量瓦片快速访问的需求。
本发明的实施例是这样实现的:
第一方面,本申请实施例提供一种矢量瓦片存储构建方法,其包括如下步骤:将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。若任一网格中节点数量nHid小于nε,则网格停止迭代划分,其中,nε为预设单个矢量瓦片中的点数量阈值。若任一网格中节点数量nHid大于nε,则网格继续迭代划分,直至所有网格中节点数量均小于nε,以得到“稠密-稀疏”网络。以Z-order填充曲线方式对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到空间编码。根据预设编码方法对矢量瓦片进行时间编码。根据时间编码和空间编码得到各矢量瓦片对应的时空编码。将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。
在本发明的一些实施例中,上述将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值的步骤之前,还包括:利用HBase存储原始矢量瓦片数据,以建立矢量数据库。获取矢量数据库中的对应矢量瓦片数据,并将对应矢量瓦片数据的GeoJson格式转化为PBF格式,以生成对应的二进制MVT文件。
在本发明的一些实施例中,上述将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库的步骤之后,还包括:当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取区域的变更矢量瓦片。根据变更矢量瓦片的显示级别、新旧标识、生成时间、前趋瓦片时间编码生成对应时空编码。将对应时空编码作为Key键,将变更了的矢量瓦片数据的二进制MVT文件作为Value值,按照变更矢量瓦片的生成时间依次以<Key,Value>的存储格式将变更矢量瓦片存储至Redis数据库。
在本发明的一些实施例中,上述当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取区域的变更矢量瓦片的步骤包括:当前端矢量瓦片数据编辑完成触发矢量瓦片更新时,获取当前矢量瓦片,并对比当前矢量瓦片与原始矢量瓦片,得到变更的矢量瓦片对应的第一网格区域。根据第一网格区域获取变更矢量瓦片。
在本发明的一些实施例中,上述当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取区域的变更矢量瓦片的步骤包括:当后端矢量瓦片数据更新完成触发矢量瓦片更新时,对比后端矢量瓦片数据和原始矢量瓦片数据,得到变更的矢量瓦片数据对应的第二网格区域。检测第二网格区域中各网格的节点数量,将节点数量超过了预设网格点数量阈值的网格按照行列形式迭代划分为子网格,并计算各子网格中的节点数量。若任一子网格中节点数量小于预设网格点数量阈值,则子网格停止迭代划分。若任一子网格中节点数量大于预设网格点数量阈值,则子网格继续迭代划分,直至所有子网格中节点数量均小于预设网格点数量阈值,以得到当前网格划分。根据当前网格划分得到变更矢量瓦片。
在本发明的一些实施例中,上述根据预设编码方法对矢量瓦片进行时间编码的步骤包括:根据矢量瓦片的新旧标识、生成时间、前趋瓦片时间对矢量瓦片进行时间编码。
在本发明的一些实施例中,上述将矢量数据空间按照行列形式迭代划分为网格的同时,对网格进行编码。
第二方面,本申请实施例提供一种矢量瓦片存储构建系统,其包括:网格划分模块,用于将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。停止划分网格模块,用于若任一网格中节点数量nHid小于nε,则网格停止迭代划分,其中,nε为预设单个矢量瓦片中的点数量阈值。继续划分网格模块,用于若任一网格中节点数量nHid大于nε,则网格继续迭代划分,直至所有网格中节点数量均小于nε,以得到“稠密-稀疏”网络。空间编码模块,用于以Z-order填充曲线方式对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到空间编码。时间编码模块,用于根据预设编码方法对矢量瓦片进行时间编码。时空编码模块,用于根据时间编码和空间编码得到各矢量瓦片对应的时空编码。数据库存储模块,用于将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。
在本发明的一些实施例中,上述矢量瓦片存储构建系统还包括:矢量数据库建立模块,用于利用HBase存储原始矢量瓦片数据,以建立矢量数据库。格式转化模块,用于获取矢量数据库中的对应矢量瓦片数据,并将对应矢量瓦片数据的GeoJson格式转化为PBF格式,以生成对应的二进制MVT文件。
在本发明的一些实施例中,上述矢量瓦片存储构建系统还包括:变更矢量瓦片获取模块,用于当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取区域的变更矢量瓦片。时空编码模块,用于根据变更矢量瓦片的显示级别、新旧标识、生成时间、前趋瓦片时间编码生成对应时空编码。Redis数据库存储模块,用于将对应时空编码作为Key键,将变更了的矢量瓦片数据的二进制MVT文件作为Value值,按照变更矢量瓦片的生成时间依次以<Key,Value>的存储格式将变更矢量瓦片存储至Redis数据库。
在本发明的一些实施例中,上述变更矢量瓦片获取模块包括:前端矢量瓦片触发更新单元,用于当前端矢量瓦片数据编辑完成触发矢量瓦片更新时,获取当前矢量瓦片,并对比当前矢量瓦片与原始矢量瓦片,得到变更的矢量瓦片对应的第一网格区域。获取第一网格区域瓦片单元,用于根据第一网格区域获取变更矢量瓦片。
在本发明的一些实施例中,上述变更矢量瓦片获取模块包括:后端矢量瓦片触发更新单元,用于当后端矢量瓦片数据更新完成触发矢量瓦片更新时,对比后端矢量瓦片数据和原始矢量瓦片数据,得到变更的矢量瓦片数据对应的第二网格区域。子网格节点数量计算单元,用于检测第二网格区域中各网格的节点数量,将节点数量超过了预设网格点数量阈值的网格按照行列形式迭代划分为子网格,并计算各子网格中的节点数量。迭代划分停止单元,用于若任一子网格中节点数量小于预设网格点数量阈值,则子网格停止迭代划分。继续迭代划分单元,用于若任一子网格中节点数量大于预设网格点数量阈值,则子网格继续迭代划分,直至所有子网格中节点数量均小于预设网格点数量阈值,以得到当前网格划分。获取当前网格划分瓦片单元,用于根据当前网格划分得到变更矢量瓦片。
在本发明的一些实施例中,上述时间编码模块包括:时间编码单元,用于根据矢量瓦片的新旧标识、生成时间、前趋瓦片时间对矢量瓦片进行时间编码。
在本发明的一些实施例中,上述网格划分模块包括:编码单元,用于将矢量数据空间按照行列形式迭代划分为网格的同时,对网格进行编码。
第三方面,本申请实施例提供一种电子设备,其包括存储器,用于存储一个或多个程序;处理器。当一个或多个程序被处理器执行时,实现如上述第一方面中任一项的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述第一方面中任一项的方法。
相对于现有技术,本发明的实施例至少具有如下优点或有益效果:
本发明提供一种矢量瓦片存储构建方法及系统,其包括如下步骤:将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。若任一网格中节点数量nHid小于nε,则网格停止迭代划分,其中,nε为预设单个矢量瓦片中的点数量阈值。若任一网格中节点数量nHid大于nε,则网格继续迭代划分,直至所有网格中节点数量均小于nε,以得到“稠密-稀疏”网络。以Z-order填充曲线方式对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到空间编码。根据预设编码方法对矢量瓦片进行时间编码。根据时间编码和空间编码得到各矢量瓦片对应的时空编码。将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。考虑到矢量数据空间中对象的个体复杂度差异和空间分布不均匀的特点,将单个矢量瓦片中包含对象的点的总数量设置一个阈值nε,并将nε与任一网格中节点数量nHid进行对比。若任一网格中节点数量nHid>nε,则对该网格继续迭代划分,直至任一网格中节点数量nHid<nε,以此完成对矢量数据空间的划分。避免了按照规则的网格对矢量数据空间进行矢量划分后,由于矢量数据空间分布的差异和空间对象图形复杂度的差异导致出现矢量瓦片中数据量不均衡的情况,也就避免了由于矢量瓦片的数据量不均衡而导致矢量瓦片包传递到浏览器时瓦片显示速度不同,甚至个别瓦片无法显示的问题。当所有网格迭代划分结束后,形成与矢量数据空间分布差异、空间对象图形复杂度相适应的“稠密-稀疏”网络。“稠密-稀疏”网络中各网格中的数据量都很均衡,且都小于nε,避免了由于网格不均衡划分而造成过多的碎瓦片。而且减少了各网格中需要存储的瓦片数量,节约了存储空间。通过Z-order填充曲线可以对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到矢量瓦片对应的空间编码。根据预设编码方法对矢量瓦片进行时间编码,结合时间编码和空间编码可以得到各矢量瓦片对应的时空编码。并将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。利用Redis数据库对矢量瓦片数据和矢量瓦片进行索引存储,可以极大提升对矢量瓦片数据和矢量瓦片的访问效率,利用Redis数据库特有的强大的I/O性能可以满足Web端对矢量瓦片快速访问的需求。
因此,一种矢量瓦片存储构建方法及系统考虑了矢量数据空间分布的差异和空间对象图形复杂度的差异,避免了所存储的不同矢量瓦片的数据量存在较大差异而引发矢量瓦片加载速度慢、矢量瓦片传输慢、矢量瓦片显示“卡顿”等问题,满足了Web端对矢量瓦片快速访问的需求。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提供的一种矢量瓦片存储构建方法的流程图;
图2为本发明实施例提供的一种矢量数据空间分布图;
图3为本发明实施例提供的一种矢量瓦片时间编码的编码示意图;
图4为本发明实施例提供的一种矢量瓦片空间编码的编码示意图;
图5为本发明实施例提供的一种矢量瓦片时空编码的编码示意图;
图6为本发明实施例提供的一种变更矢量瓦片的存储示意图;
图7为本发明实施例提供的一种T0时刻矢量瓦片的存储示意图;
图8为本发明实施例提供的一种T1时刻矢量瓦片的存储示意图;
图9为本发明实施例提供的一种前端矢量数据触发更新的流程图;
图10为本发明实施例提供的一种后端矢量数据触发更新的流程图;
图11为本发明实施例提供的一种矢量瓦片存储构建系统的结构框图;
图12为本发明实施例提供的一种电子设备的示意性结构框图。
图标:100-矢量瓦片存储构建系统;110-网格划分模块;120-停止划分网格模块;130-继续划分网格模块;140-空间编码模块;150-时间编码模块;160-时空编码模块;170-数据库存储模块;101-存储器;102-处理器;103-通信接口。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,若出现术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,若出现由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
在本申请的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该申请产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
在本申请的描述中,还需要说明的是,除非另有明确的规定和限定,若出现术语“设置”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的各个实施例及实施例中的各个特征可以相互组合。
实施例
请参照图1-图5,图1所示为本申请实施例提供的一种矢量瓦片存储构建方法的流程图,图2所示为本申请实施例提供的一种矢量数据空间分布图,图3所示为本申请实施例提供的一种矢量瓦片时间编码的编码示意图,图4所示为本申请实施例提供的一种矢量瓦片空间编码的编码示意图,图5所示为本申请实施例提供的一种矢量瓦片时空编码的编码示意图。一种矢量瓦片存储构建方法,其包括如下步骤:
S110:将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid;
示例性的,可以将矢量数据空间迭代划分为2m×2m的网格,其中m表示迭代划分的次数。计算每个网格中的节点数量nHid,若任一网格中节点数量nHid>nε,则对该网格继续迭代划分,直至任一网格中节点数量nHid<nε,以此完成对矢量数据空间的划分。避免了按照规则的网格对矢量数据空间进行矢量划分后,由于矢量数据空间分布的差异和空间对象图形复杂度的差异导致出现矢量瓦片中数据量不均衡的情况,也就避免了由于矢量瓦片的数据量不均衡而导致矢量瓦片包传递到浏览器时瓦片显示速度不同,甚至个别瓦片无法显示的问题。
S120:若任一网格中节点数量nHid小于nε,则网格停止迭代划分,其中,nε为预设单个矢量瓦片中的点数量阈值;
具体的,充分考虑矢量数据空间中对象的个体复杂度差异和空间分布不均匀的特点,将单个矢量瓦片中包含对象的点的总数量设置一个阈值nε,并将nε与任一网格中节点数量nHid进行对比。
S130:若任一网格中节点数量nHid大于nε,则网格继续迭代划分,直至所有网格中节点数量均小于nε,以得到“稠密-稀疏”网络;
具体的,若任一网格中节点数量nHid>nε,则继续对该网格迭代划分,直至每个网格包含对象的点的总数量均小于nε。当所有网格迭代划分结束后,形成与矢量数据空间分布差异、空间对象图形复杂度相适应的“稠密-稀疏”网络。“稠密-稀疏”网络中各网格中的数据量都很均衡,且都小于nε,避免了由于网格不均衡划分而造成过多的瓦片。而且减少了各网格中需要存储的瓦片数量,节约了存储空间。由于迭代划分的次数不同,“稠密-稀疏”网络中网格大小也不同。
S140:以Z-order填充曲线方式对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到空间编码;
具体的,Z-order即Z-排序,通过Z-排序可以按照迭代划分顺序对“稠密-稀疏”网络中所有网格进行GeoHash编码。网格越大,网格相应的GeoHash编码长度越短。
示例性的,由于图4中0011网格和1100网格这两个网格中数据量超出了阈值nε,故对0011网格和1100网格继续进行2×2迭代划分,划分结束后,仍然使用GeoHash编码对划分得到的网格进行编码。GeoHash编码采用Base32编码,请参照Base32编码对照图,Base32编码对照图如表1所示:
表1:Base32编码对照图
Decimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
Base32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | b | c | d | e | f | g |
Decimal | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Base32 | h | j | k | m | n | p | q | r | s | t | u | v | w | x | y | z |
其中,GeoHash编码字符串长度与地理范围的关系如表2所示:
表2 GeoHash编码字符串长度与地理范围的关系
字符串长度 | 网格宽度 | 网格高度 |
1 | 5,000km | 5,000km |
2 | 1,250km | 625km |
3 | 156km | 156km |
4 | 39.1km | 19.5km |
5 | 4.89km | 4.89km |
6 | 1.22km | 0.61km |
7 | 153m | 153m |
8 | 38.2m | 19.1m |
9 | 4.77m | 4.77m |
10 | 1.19m | 0.596m |
11 | 149mm | 149mm |
12 | 37.2mm | 18.6mm |
S150:根据预设编码方法对矢量瓦片进行时间编码;
具体的,可以根据新旧标识、生成时间编码、前趋瓦片时间编码生成矢量瓦片的时间编码。
示例性的,若需要对2020年度的矢量瓦片进行时间编码,则对比浏览2019年度最后版本的矢量瓦片和2020年度最后版本的矢量瓦片。使用8位日期表示某个矢量瓦片的生成时间,例如某个矢量瓦片是在2020年4月5日生成的,则该矢量瓦片的生成时间编码可以表示为20200405。当同一区域有多个时间点的矢量瓦片时,可以在时间编码的最前面增加新旧标识g来表示该矢量瓦片是否是最新矢量瓦片,从而减少多个矢量瓦片的查询时间。其中,当g为0时,表示该矢量瓦片不是最新矢量瓦片,当g为1时,表示该矢量瓦片是最新矢量瓦片。且为了快速查找在矢量瓦片生成时间的上一个时间,用yyyy-mm-dd格式的字符表示前趋瓦片时间编码,其中,yyyy表示年,mm表示月,dd表示日。若没有前趋瓦片的时间,则前趋瓦片时间编码表示为“00000000”。
S160:根据时间编码和空间编码得到各矢量瓦片对应的时空编码;
示例性的,矢量瓦片时空编码可以由28位字符组成,依次为两位显示级别编码、十七位时间编码和九位空间编码。其中,时间编码由1位新旧标识、8位生成时间编码和8位前趋瓦片时间编码。空间编码由最长九位GeoHash编码的Base32编码构成。
S170:将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。
具体的,利用Redis数据库对矢量瓦片数据和矢量瓦片进行索引存储,可以极大提升对矢量瓦片数据和矢量瓦片的访问效率,利用Redis数据库特有的强大的I/O性能可以满足Web端对矢量瓦片快速访问的需求。
上述实现过程中,将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。考虑到矢量数据空间中对象的个体复杂度差异和空间分布不均匀的特点,将单个矢量瓦片中包含对象的点的总数量设置一个阈值nε,并将nε与任一网格中节点数量nHid进行对比。若任一网格中节点数量nHid>nε,则对该网格继续迭代划分,直至任一网格中节点数量nHid<nε,以此完成对矢量数据空间的划分。避免了按照规则的网格对矢量数据空间进行矢量划分后,由于矢量数据空间分布的差异和空间对象图形复杂度的差异导致出现矢量瓦片中数据量不均衡的情况,也就避免了由于矢量瓦片的数据量不均衡而导致矢量瓦片包传递到浏览器时瓦片显示速度不同,甚至个别瓦片无法显示的问题。当所有网格迭代划分结束后,形成与矢量数据空间分布差异、空间对象图形复杂度相适应的“稠密-稀疏”网络。“稠密-稀疏”网络中各网格中的数据量都很均衡,且都小于nε,避免了由于网格不均衡划分而造成过多的碎瓦片。而且减少了各网格中需要存储的瓦片数量,节约了存储空间。通过Z-order填充曲线可以对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到矢量瓦片对应的空间编码。根据预设编码方法对矢量瓦片进行时间编码,结合时间编码和空间编码可以得到各矢量瓦片对应的时空编码。并将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。利用Redis数据库对矢量瓦片数据和矢量瓦片进行索引存储,可以极大提升对矢量瓦片数据和矢量瓦片的访问效率,利用Redis数据库特有的强大的I/O性能可以满足Web端对矢量瓦片快速访问的需求。
在本实施例的一些实施方式中,上述将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值的步骤之前,还包括:利用HBase存储原始矢量瓦片数据,以建立矢量数据库。获取矢量数据库中的对应矢量瓦片数据,并将对应矢量瓦片数据的GeoJson格式转化为PBF格式,以生成对应的二进制MVT文件。具体的,使用了GeoJson格式在HBase数据库中进行矢量瓦片数据存储,即矢量数据库中的矢量瓦片数据的存储格式为GeoJson格式。但是矢量瓦片包使用PBF格式表达数据,因此将GeoJson格式转化为PBF格式,可以生成对应矢量瓦片数据的二进制MVT文件。
在本实施例的一些实施方式中,上述将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库的步骤之后,还包括:当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取区域的变更矢量瓦片。根据变更矢量瓦片的显示级别、新旧标识、生成时间、前趋瓦片时间编码生成对应时空编码。将对应时空编码作为Key键,将变更了的矢量瓦片数据的二进制MVT文件作为Value值,按照变更矢量瓦片的生成时间依次以<Key,Value>的存储格式将变更矢量瓦片存储至Redis数据库。具体的,时空矢量瓦片数据通常包括多个时间的矢量瓦片,按照矢量瓦片的生成时间依次将矢量瓦片存储到数据库中。可以采用增量存储的机制对变更矢量瓦片进行存储,即在建立第一时间的所有矢量瓦片后,只有相对于前一时间单元发生数据变更的变更区域的变更矢量瓦片才可以用<显示级别,时间编码,空间编码>的时空编码保存到Redis数据库,从而使得Redis数据库中包含多个时间片的矢量瓦片,进一步支持矢量瓦片的可视化。
请参照图6,图6所示为本申请实施例提供的一种变更矢量瓦片的存储示意图。其中,T0、T1、T2分别表示三个时刻。当T1时刻时,T0时刻的矢量瓦片在A框范围内发生了变更,由于采用了增量存储,则在Redis数据库中新增A框范围内发生数据变更的第一变更矢量瓦片,该第一变更矢量瓦片标注了T1时刻的时间,并且设立了指向与第一变更矢量瓦片同一区域的T0时刻矢量瓦片的指针,该指针即为前趋时间编码,T0时刻和T1时刻分别对应的矢量瓦片共同构成了T1时刻矢量瓦片存储之后的存储快照。当T2时刻时,矢量瓦片在B框范围内发生了变更,由于采用了增量存储,则在Redis数据库中新增B框范围内发生数据变更的第二变更矢量瓦片,该第二变更矢量瓦片标注了T2时刻的时间,并且设立了指向与第二变更矢量瓦片同一区域的T1时刻矢量瓦片的指针,该指针即为前趋时间编码,T0时刻、T1时刻、T2时刻三个时刻分别对应的矢量瓦片存储共同构成了T2时刻矢量瓦片存储之后的存储快照。从而实现了时空矢量瓦片数据的增量存储,并且节省了存储空间。
请参照图7,图7所示为本申请实施例提供的一种T0时刻矢量瓦片的存储示意图。矢量瓦片存储于Redis数据库,且所有网格都用GeoHash编码的Base32码表示。在T0时刻,空间编码whr4j*和whr4n*所表示的区域内,初次存储了生成的矢量瓦片,这些矢量瓦片在Redis数据库中的Key键,即时空编码表示为:Level+1+data(t0)+predate(t0)+whr4**,其中,Level为显示级别,字符1表示该矢量瓦片为该范围的最新矢量瓦片,data(t0)为矢量瓦片的8位生成时间编码,predate(t0)为当前矢量瓦片的8位前趋瓦片时间编码,因当前矢量瓦片为初次创建,故predate(t0)的值为“00000000”,whr4**为矢量瓦片的空间GeoHash编码对应的Base32码。
请参照图8,图8所示为本申请实施例提供的一种T1时刻矢量瓦片的存储示意图。T1时刻,在HBase数据库中A框网格区域的原始矢量数据发生变更,对应在Redis数据库中A框网格区域内矢量瓦片的时空编码表示为:Level+1+data(t1)+predata(t1)+whr4**,即新旧标识为1,当前矢量瓦片生成时间为T1时刻,同时有一个前趋瓦片时间编码指向该矢量瓦片的最近历史矢量瓦片的时间;该A框区域内原有的矢量瓦片表示为:Level+0+data(t0)+predate(t0)+whr4**,即新旧标识改0,表示该范围瓦片已不再是最新的。因此,A框内有T0时刻和T1时刻2个时间的矢量瓦片,而T0时刻的其它范围只有T0时刻这1个时间片的矢量瓦片,瓦片编码仍为:Level+1+data(t0)+predate(t0)+whr4**,即新旧标识还是1,表示矢量瓦片未发生变化。
请参照图9,图9所示为本申请实施例提供的一种前端矢量数据触发更新的流程图。当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取区域的变更矢量瓦片的步骤包括:当前端矢量瓦片数据编辑完成触发矢量瓦片更新时,获取当前矢量瓦片,并对比当前矢量瓦片与原始矢量瓦片,得到变更的矢量瓦片对应的第一网格区域。根据第一网格区域获取变更矢量瓦片。示例性的,当Web端矢量数据编辑完成触发Redis数据库更新时,对比当前矢量瓦片与原始矢量瓦片,得到变更的矢量瓦片对应的第一网格区域以及第一网格编号。按照第一网格编号,对第一网格区域中的矢量瓦片进行遍历,得到不同第一网格编号对应的变更矢量瓦片,也就得到了由前端矢量瓦片数据编辑完成触发矢量瓦片更新时的变更矢量瓦片。然后根据变更矢量瓦片的显示级别、新旧标识、生成时间、前趋瓦片时间编码生成对应时空编码,并利用对应时空编码对变更矢量瓦片进行存储。当第一网格区域中的最后一个矢量瓦片更新完成后,整个矢量瓦片更新工作结束。
上述实现过程中,需要利用变更矢量瓦片对应的矢量瓦片数据替换矢量数据库中对应的原始矢量数据。
请参照图10,图10所示为本申请实施例提供的一种后端矢量数据触发更新的流程图。当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取区域的变更矢量瓦片的步骤包括:当后端矢量瓦片数据更新完成触发矢量瓦片更新时,对比后端矢量瓦片数据和原始矢量瓦片数据,得到变更的矢量瓦片数据对应的第二网格区域。检测第二网格区域中各网格的节点数量,将节点数量超过了预设网格点数量阈值的网格按照行列形式迭代划分为子网格,并计算各子网格中的节点数量。若任一子网格中节点数量小于预设网格点数量阈值,则子网格停止迭代划分。若任一子网格中节点数量大于预设网格点数量阈值,则子网格继续迭代划分,直至所有子网格中节点数量均小于预设网格点数量阈值,以得到当前网格划分。根据当前网格划分得到变更矢量瓦片。具体的,上述后端矢量瓦片数据可以为HBase数据库数据。由于矢量瓦片数据存储在HBase数据库中,当HBase数据库数据更新触发Redis数据库更新时,首先对比后端矢量瓦片数据和原始矢量瓦片数据,得到变更的矢量瓦片数据对应的第二网格区域以及第二网格编号。按照第二网格编号,对第一网格区域中的矢量瓦片数据进行遍历。检测第二网格区域中各网格的节点数量,并判断第二网格区域中各网格的节点数量是否超过了预设网格点数量阈值。若超过了预设网格点数量阈值,则可以将该网格按照行列形式迭代划分为子网格,直至所有子网格中节点数量均小于预设网格点数量阈值,以完成第二网格区域的重新划分,并得到当前网格划分以及当前所有网格的编号。根据当前网格划分可以得到变更矢量瓦片,然后根据变更矢量瓦片的显示级别、新旧标识、生成时间、前趋瓦片时间编码生成对应时空编码,并利用对应时空编码对变更矢量瓦片进行存储。
示例性的,上述网格可以迭代划分为2×2的子网格。
作为本实施例的一种实施方式,对当前网格划分的网格数量进行判断,若网格数量未超过预设网格数量阈值,则使用单线程进行变更矢量瓦片处理并存入Redis数据库,以更新Redis数据库。若网格数量超过预设网格数量阈值,则可以启动Spark并行计算框架同时对变更矢量瓦片进行数据切分、数据化简、瓦片打包后存入Redis数据库,以更新Redis数据库。使用Spark并行计算框架可以同时对变更矢量瓦片进行处理,增快了矢量瓦片更新的进程。
示例性的,上述预设网格数量阈值可以为20个网格。
在本实施例的一些实施方式中,上述根据预设编码方法对矢量瓦片进行时间编码的步骤包括:根据矢量瓦片的新旧标识、生成时间、前趋瓦片时间对矢量瓦片进行时间编码。从而完成对矢量瓦片的时间编码。
在本实施例的一些实施方式中,上述将矢量数据空间按照行列形式迭代划分为网格的同时,对网格进行编码。具体的,编码后的网格可以进一步区别所有网格。
请参照图11,图11所示为本申请实施例提供一种矢量瓦片存储构建系统100的结构框图。一种矢量瓦片存储构建系统100,其包括:网格划分模块110,用于将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。停止划分网格模块120,用于若任一网格中节点数量nHid小于nε,则网格停止迭代划分,其中,nε为预设单个矢量瓦片中的点数量阈值。继续划分网格模块130,用于若任一网格中节点数量nHid大于nε,则网格继续迭代划分,直至所有网格中节点数量均小于nε,以得到“稠密-稀疏”网络。空间编码模块140,用于以Z-order填充曲线方式对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到空间编码。时间编码模块150,用于根据预设编码方法对矢量瓦片进行时间编码。时空编码模块160,用于根据时间编码和空间编码得到各矢量瓦片对应的时空编码。数据库存储模块170,用于将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。具体的,将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。考虑到矢量数据空间中对象的个体复杂度差异和空间分布不均匀的特点,将单个矢量瓦片中包含对象的点的总数量设置一个阈值nε,并将nε与任一网格中节点数量nHid进行对比。若任一网格中节点数量nHid>nε,则对该网格继续迭代划分,直至任一网格中节点数量nHid<nε,以此完成对矢量数据空间的划分。避免了按照规则的网格对矢量数据空间进行矢量划分后,由于矢量数据空间分布的差异和空间对象图形复杂度的差异导致出现矢量瓦片中数据量不均衡的情况,也就避免了由于矢量瓦片的数据量不均衡而导致矢量瓦片包传递到浏览器时瓦片显示速度不同,甚至个别瓦片无法显示的问题。当所有网格迭代划分结束后,形成与矢量数据空间分布差异、空间对象图形复杂度相适应的“稠密-稀疏”网络。“稠密-稀疏”网络中各网格中的数据量都很均衡,且都小于nε,避免了由于网格不均衡划分而造成过多的碎瓦片。而且减少了各网格中需要存储的瓦片数量,节约了存储空间。通过Z-order填充曲线可以对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到矢量瓦片对应的空间编码。根据预设编码方法对矢量瓦片进行时间编码,结合时间编码和空间编码可以得到各矢量瓦片对应的时空编码。并将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。利用Redis数据库对矢量瓦片数据和矢量瓦片进行索引存储,可以极大提升对矢量瓦片数据和矢量瓦片的访问效率,利用Redis数据库特有的强大的I/O性能可以满足Web端对矢量瓦片快速访问的需求。
在本实施例的一些实施方式中,上述矢量瓦片存储构建系统100还包括:矢量数据库建立模块,用于利用HBase存储原始矢量瓦片数据,以建立矢量数据库。格式转化模块,用于获取矢量数据库中的对应矢量瓦片数据,并将对应矢量瓦片数据的GeoJson格式转化为PBF格式,以生成对应的二进制MVT文件。
在本实施例的一些实施方式中,上述矢量瓦片存储构建系统100还包括:变更矢量瓦片获取模块,用于当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取区域的变更矢量瓦片。时空编码模块160,用于根据变更矢量瓦片的显示级别、新旧标识、生成时间、前趋瓦片时间编码生成对应时空编码。Redis数据库存储模块170,用于将对应时空编码作为Key键,将变更了的矢量瓦片数据的二进制MVT文件作为Value值,按照变更矢量瓦片的生成时间依次以<Key,Value>的存储格式将变更矢量瓦片存储至Redis数据库。具体的,时空矢量瓦片数据通常包括多个时间的矢量瓦片,按照矢量瓦片的生成时间依次将矢量瓦片存储到数据库中。可以采用增量存储的机制对变更矢量瓦片进行存储,即在建立第一时间的所有矢量瓦片后,只有相对于前一时间单元发生数据变更的变更区域的变更矢量瓦片才可以用<显示级别,时间编码,空间编码>的时空编码保存到Redis数据库,从而使得Redis数据库中包含多个时间片的矢量瓦片,进一步支持矢量瓦片的可视化。
在本实施例的一些实施方式中,上述变更矢量瓦片获取模块包括:前端矢量瓦片触发更新单元,用于当前端矢量瓦片数据编辑完成触发矢量瓦片更新时,获取当前矢量瓦片,并对比当前矢量瓦片与原始矢量瓦片,得到变更的矢量瓦片对应的第一网格区域。获取第一网格区域瓦片单元,用于根据第一网格区域获取变更矢量瓦片。具体的,当前端矢量数据编辑完成触发Redis数据库更新时,对比当前矢量瓦片与原始矢量瓦片,得到变更的矢量瓦片对应的第一网格区域以及第一网格编号。按照第一网格编号,对第一网格区域中的矢量瓦片进行遍历,得到不同第一网格编号对应的变更矢量瓦片,也就得到了由前端矢量瓦片数据编辑完成触发矢量瓦片更新时的变更矢量瓦片。
在本实施例的一些实施方式中,上述变更矢量瓦片获取模块包括:后端矢量瓦片触发更新单元,用于当后端矢量瓦片数据更新完成触发矢量瓦片更新时,对比后端矢量瓦片数据和原始矢量瓦片数据,得到变更的矢量瓦片数据对应的第二网格区域。子网格节点数量计算单元,用于检测第二网格区域中各网格的节点数量,将节点数量超过了预设网格点数量阈值的网格按照行列形式迭代划分为子网格,并计算各子网格中的节点数量。迭代划分停止单元,用于若任一子网格中节点数量小于预设网格点数量阈值,则子网格停止迭代划分。继续迭代划分单元,用于若任一子网格中节点数量大于预设网格点数量阈值,则子网格继续迭代划分,直至所有子网格中节点数量均小于预设网格点数量阈值,以得到当前网格划分。获取当前网格划分瓦片单元,用于根据当前网格划分得到变更矢量瓦片。具体的,上述后端矢量瓦片数据可以为HBase数据库数据。由于矢量瓦片数据存储在HBase数据库中,当HBase数据库数据更新触发Redis数据库更新时,首先对比后端矢量瓦片数据和原始矢量瓦片数据,得到变更的矢量瓦片数据对应的第二网格区域以及第二网格编号。按照第二网格编号,对第一网格区域中的矢量瓦片数据进行遍历。检测第二网格区域中各网格的节点数量,并判断第二网格区域中各网格的节点数量是否超过了预设网格点数量阈值。若超过了预设网格点数量阈值,则可以将该网格按照行列形式迭代划分为子网格,直至所有子网格中节点数量均小于预设网格点数量阈值,以完成第二网格区域的重新划分,并得到当前网格划分以及当前所有网格的编号。根据当前网格划分可以得到变更矢量瓦片。
在本实施例的一些实施方式中,上述时间编码模块150包括:时间编码单元,用于根据矢量瓦片的新旧标识、生成时间、前趋瓦片时间对矢量瓦片进行时间编码。从而完成对矢量瓦片的时间编码。
在本实施例的一些实施方式中,上述网格划分模块110包括:编码单元,用于将矢量数据空间按照行列形式迭代划分为网格的同时,对网格进行编码。编码后的网格可以进一步区别所有网格。
请参阅图12,图12为本申请实施例提供的电子设备的一种示意性结构框图。电子设备包括存储器101、处理器102和通信接口103,该存储器101、处理器102和通信接口103相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器101可用于存储软件程序及模块,如本申请实施例所提供的一种矢量瓦片存储构建系统100对应的程序指令/模块,处理器102通过执行存储在存储器101内的软件程序及模块,从而执行各种功能应用以及数据处理。该通信接口103可用于与其他节点设备进行信令或数据的通信。
其中,存储器101可以是但不限于,随机存取存储器101(Random Access Memory,RAM),只读存储器101(Read Only Memory,ROM),可编程只读存储器101(ProgrammableRead-Only Memory,PROM),可擦除只读存储器101(Erasable Programmable Read-OnlyMemory,EPROM),电可擦除只读存储器101(Electric Erasable Programmable Read-OnlyMemory,EEPROM)等。
处理器102可以是一种集成电路芯片,具有信号处理能力。该处理器102可以是通用处理器102,包括中央处理器102(Central Processing Unit,CPU)、网络处理器102(Network Processor,NP)等;还可以是数字信号处理器102(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可以理解,图12所示的结构仅为示意,电子设备还可包括比图12中所示更多或者更少的组件,或者具有与图12所示不同的配置。图12中所示的各组件可以采用硬件、软件或其组合实现。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器101(ROM,Read-Only Memory)、随机存取存储器101(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
综上所述,本申请实施例提供的一种矢量瓦片存储构建方法及系统,其包括如下步骤:将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。若任一网格中节点数量nHid小于nε,则网格停止迭代划分,其中,nε为预设单个矢量瓦片中的点数量阈值。若任一网格中节点数量nHid大于nε,则网格继续迭代划分,直至所有网格中节点数量均小于nε,以得到“稠密-稀疏”网络。以Z-order填充曲线方式对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到空间编码。根据预设编码方法对矢量瓦片进行时间编码。根据时间编码和空间编码得到各矢量瓦片对应的时空编码。将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。将矢量数据空间按照行列形式迭代划分为网格,并计算各网格中的节点数量nHid。考虑到矢量数据空间中对象的个体复杂度差异和空间分布不均匀的特点,将单个矢量瓦片中包含对象的点的总数量设置一个阈值nε,并将nε与任一网格中节点数量nHid进行对比。若任一网格中节点数量nHid>nε,则对该网格继续迭代划分,直至任一网格中节点数量nHid<nε,以此完成对矢量数据空间的划分。避免了按照规则的网格对矢量数据空间进行矢量划分后,由于矢量数据空间分布的差异和空间对象图形复杂度的差异导致出现矢量瓦片中数据量不均衡的情况,也就避免了由于矢量瓦片的数据量不均衡而导致矢量瓦片包传递到浏览器时瓦片显示速度不同,甚至个别瓦片无法显示的问题。当所有网格迭代划分结束后,形成与矢量数据空间分布差异、空间对象图形复杂度相适应的“稠密-稀疏”网络。“稠密-稀疏”网络中各网格中的数据量都很均衡,且都小于nε,避免了由于网格不均衡划分而造成过多的碎瓦片。而且减少了各网格中需要存储的瓦片数量,节约了存储空间。通过Z-order填充曲线可以对“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到矢量瓦片对应的空间编码。根据预设编码方法对矢量瓦片进行时间编码,结合时间编码和空间编码可以得到各矢量瓦片对应的时空编码。并将时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将矢量瓦片存储至Redis数据库。利用Redis数据库对矢量瓦片数据和矢量瓦片进行索引存储,可以极大提升对矢量瓦片数据和矢量瓦片的访问效率,利用Redis数据库特有的强大的I/O性能可以满足Web端对矢量瓦片快速访问的需求。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其它的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
Claims (10)
1.一种矢量瓦片存储构建方法,其特征在于,包括如下步骤:
将矢量数据空间按照行列形式迭代划分为网格,并计算各所述网格中的节点数量nHid;
若任一所述网格中节点数量nHid小于nε,则所述网格停止迭代划分,其中,nε为预设单个矢量瓦片中的点数量阈值;
若任一所述网格中节点数量nHid大于nε,则所述网格继续迭代划分,直至所有所述网格中节点数量均小于nε,以得到“稠密-稀疏”网络;
以Z-order填充曲线方式对所述“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到空间编码;
根据预设编码方法对所述矢量瓦片进行时间编码;
根据所述时间编码和所述空间编码得到各所述矢量瓦片对应的时空编码;
将所述时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将所述矢量瓦片存储至Redis数据库。
2.根据权利要求1所述的矢量瓦片存储构建方法,其特征在于,将所述时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值的步骤之前,还包括:
利用HBase存储原始矢量瓦片数据,以建立矢量数据库;
获取所述矢量数据库中的对应矢量瓦片数据,并将所述对应矢量瓦片数据的GeoJson格式转化为PBF格式,以生成对应的二进制MVT文件。
3.根据权利要求2所述的矢量瓦片存储构建方法,其特征在于,将所述时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将所述矢量瓦片存储至Redis数据库的步骤之后,还包括:
当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取所述区域的变更矢量瓦片;
根据所述变更矢量瓦片的显示级别、新旧标识、生成时间、前趋瓦片时间编码生成对应时空编码;
将所述对应时空编码作为Key键,将变更了的矢量瓦片数据的二进制MVT文件作为Value值,按照所述变更矢量瓦片的生成时间依次以<Key,Value>的存储格式将所述变更矢量瓦片存储至Redis数据库。
4.根据权利要求3所述的矢量瓦片存储构建方法,其特征在于,当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取所述区域的变更矢量瓦片的步骤包括:
当前端矢量瓦片数据编辑完成触发矢量瓦片更新时,获取当前矢量瓦片,并对比当前矢量瓦片与原始矢量瓦片,得到变更的所述矢量瓦片对应的第一网格区域;
根据所述第一网格区域获取变更矢量瓦片。
5.根据权利要求3所述的矢量瓦片存储构建方法,其特征在于,当矢量数据库中任一区域的矢量瓦片数据发生变更时,获取所述区域的变更矢量瓦片的步骤包括:
当后端矢量瓦片数据更新完成触发矢量瓦片更新时,对比后端矢量瓦片数据和原始矢量瓦片数据,得到变更的矢量瓦片数据对应的第二网格区域;
检测所述第二网格区域中各网格的节点数量,将节点数量超过了预设网格点数量阈值的所述网格按照行列形式迭代划分为子网格,并计算各所述子网格中的节点数量;
若任一所述子网格中节点数量小于所述预设网格点数量阈值,则所述子网格停止迭代划分;
若任一所述子网格中节点数量大于所述预设网格点数量阈值,则所述子网格继续迭代划分,直至所有所述子网格中节点数量均小于所述预设网格点数量阈值,以得到当前网格划分;
根据所述当前网格划分得到变更矢量瓦片。
6.根据权利要求1所述的矢量瓦片存储构建方法,其特征在于,根据预设编码方法对所述矢量瓦片进行时间编码的步骤包括:
根据所述矢量瓦片的新旧标识、生成时间、前趋瓦片时间对所述矢量瓦片数据进行时间编码。
7.根据权利要求1所述的矢量瓦片存储构建方法,其特征在于,将矢量数据空间按照行列形式迭代划分为网格的同时,对所述网格进行编码。
8.一种矢量瓦片存储构建系统,其特征在于,包括:
网格划分模块,用于将矢量数据空间按照行列形式迭代划分为网格,并计算各所述网格中的节点数量nHid;
停止划分网格模块,用于若任一所述网格中节点数量nHid小于nε,则所述网格停止迭代划分,其中,nε为预设单个矢量瓦片中的点数量阈值;
继续划分网格模块,用于若任一所述网格中节点数量nHid大于nε,则所述网格继续迭代划分,直至所有所述网格中节点数量均小于nε,以得到“稠密-稀疏”网络;
空间编码模块,用于以Z-order填充曲线方式对所述“稠密-稀疏”网络中所有网格进行GeoHash编码,以得到空间编码;
时间编码模块,用于根据预设编码方法对所述矢量瓦片进行时间编码;
时空编码模块,用于根据所述时间编码和所述空间编码得到各所述矢量瓦片对应的时空编码;
数据库存储模块,用于将所述时空编码作为Key键,将对应矢量瓦片数据的二进制MVT文件作为Value值,按照矢量瓦片的生成时间依次以<Key,Value>的存储格式将所述矢量瓦片存储至Redis数据库。
9.一种电子设备,其特征在于,包括:
存储器,用于存储一个或多个程序;
处理器;
当所述一个或多个程序被所述处理器执行时,实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111057461.9A CN113760917B (zh) | 2021-09-09 | 2021-09-09 | 一种矢量瓦片存储构建方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111057461.9A CN113760917B (zh) | 2021-09-09 | 2021-09-09 | 一种矢量瓦片存储构建方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113760917A CN113760917A (zh) | 2021-12-07 |
CN113760917B true CN113760917B (zh) | 2023-09-19 |
Family
ID=78794420
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111057461.9A Active CN113760917B (zh) | 2021-09-09 | 2021-09-09 | 一种矢量瓦片存储构建方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113760917B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114461830A (zh) * | 2022-02-17 | 2022-05-10 | 广东南方数码科技股份有限公司 | 矢量数据的存储方法、高效检索方法、设备及存储介质 |
CN115080680B (zh) * | 2022-07-19 | 2022-11-25 | 高德软件有限公司 | 用于高精地图的激光点云数据处理方法、装置及设备 |
CN116450872B (zh) * | 2023-05-04 | 2024-02-20 | 易智瑞信息技术有限公司 | 基于Spark分布式的矢量转栅格方法、系统及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109635068A (zh) * | 2018-12-20 | 2019-04-16 | 中国地质大学(武汉) | 云计算环境下的海量遥感数据高效组织及快速检索方法 |
KR20200068901A (ko) * | 2018-12-06 | 2020-06-16 | 한국전자통신연구원 | 조건 기반 지도 이미지 인코딩 방법 및 장치 |
CN111737393A (zh) * | 2020-07-01 | 2020-10-02 | 自然资源部四川基础地理信息中心(自然资源部四川测绘资料档案馆) | 一种web环境下矢量数据自适管理方法及系统 |
CN111782742A (zh) * | 2020-06-06 | 2020-10-16 | 中国科学院电子学研究所苏州研究院 | 一种面向大规模地理空间数据的存储和检索方法及其系统 |
CN113032513A (zh) * | 2021-05-21 | 2021-06-25 | 北京数字政通科技股份有限公司 | 一种针对空间地理数据的切片方法及渲染方法 |
-
2021
- 2021-09-09 CN CN202111057461.9A patent/CN113760917B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200068901A (ko) * | 2018-12-06 | 2020-06-16 | 한국전자통신연구원 | 조건 기반 지도 이미지 인코딩 방법 및 장치 |
CN109635068A (zh) * | 2018-12-20 | 2019-04-16 | 中国地质大学(武汉) | 云计算环境下的海量遥感数据高效组织及快速检索方法 |
CN111782742A (zh) * | 2020-06-06 | 2020-10-16 | 中国科学院电子学研究所苏州研究院 | 一种面向大规模地理空间数据的存储和检索方法及其系统 |
CN111737393A (zh) * | 2020-07-01 | 2020-10-02 | 自然资源部四川基础地理信息中心(自然资源部四川测绘资料档案馆) | 一种web环境下矢量数据自适管理方法及系统 |
CN113032513A (zh) * | 2021-05-21 | 2021-06-25 | 北京数字政通科技股份有限公司 | 一种针对空间地理数据的切片方法及渲染方法 |
Non-Patent Citations (1)
Title |
---|
数据粒度均衡的二维矢量瓦片构建方法;应申;王子豪;杜志强;丁火平;李翔翔;地理信息世界;第27卷(第004期);66-74 * |
Also Published As
Publication number | Publication date |
---|---|
CN113760917A (zh) | 2021-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113760917B (zh) | 一种矢量瓦片存储构建方法及系统 | |
US10275479B2 (en) | Sparse matrix storage in a database | |
CN104091301B (zh) | 一种基于MapReduce的瓦片金字塔并行构建方法 | |
CN109165215A (zh) | 一种云环境下时空索引的构建方法、装置及电子设备 | |
CN111090712B (zh) | 一种数据处理方法、装置、设备及计算机存储介质 | |
US9720927B2 (en) | Method and system for database storage management | |
CN111260784B (zh) | 一种城市三维空间网格压缩编码方法、装置及终端设备 | |
WO2016095749A1 (zh) | 电子地图中查询空间对象和建立空间索引的方法及装置 | |
Ladra et al. | Scalable and queryable compressed storage structure for raster data | |
CA2523478A1 (en) | Display data mapping method, system, and program product | |
CN104867402A (zh) | 一种离线的逆地理编码的方法及其装置和终端设备 | |
JP7091375B2 (ja) | エンコーディング方法および装置、コンピュータ記憶媒体 | |
Zou et al. | Performance optimization for relative-error-bounded lossy compression on scientific data | |
KR20230101922A (ko) | 지리적 공간 데이터 분석 및 시각화 플랫폼 | |
CN115546331A (zh) | 一种数据渲染方法、装置、电子设备及计算机可读介质 | |
WO2012166190A1 (en) | Compression match enumeration | |
CN111353008A (zh) | 一种北斗位置流数据实时空间聚合方法 | |
JP2015532489A (ja) | 空間データ圧縮装置及びその方法と、圧縮された空間データ復元装置及びその方法 | |
CN106484753B (zh) | 数据处理方法 | |
CN112332854A (zh) | 霍夫曼编码的硬件实现方法、装置及存储介质 | |
CN110021349B (zh) | 基因数据的编码方法 | |
CN110990188B (zh) | 一种基于Hadamard矩阵的部分重复码的构造方法 | |
CN110765130B (zh) | 一种分布式环境下基于Ripley’s K函数的时空POI数据点模式分析方法 | |
CN107688567B (zh) | 一种索引存储方法及相关装置 | |
Thomas et al. | Lossless address data compression using quadtree clustering of the sensors in a grid based WSN |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |