CN104778212A - 地图数据生成方法和装置、地图数据读取方法和装置 - Google Patents
地图数据生成方法和装置、地图数据读取方法和装置 Download PDFInfo
- Publication number
- CN104778212A CN104778212A CN201510119624.XA CN201510119624A CN104778212A CN 104778212 A CN104778212 A CN 104778212A CN 201510119624 A CN201510119624 A CN 201510119624A CN 104778212 A CN104778212 A CN 104778212A
- Authority
- CN
- China
- Prior art keywords
- index
- tile
- preposition
- existence
- entrance
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了地图数据生成方法和装置、地图数据读取方法和装置,涉及地图技术领域。所述方法包括:将地图数据中的各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引中的第一索引位置按序一一对应;针对每个瓦片生成对应的瓦片栅格数据,并分别将瓦片栅格数据的存在状态写入前置索引中的与所述第一索引标识对应的第一索引位置;根据所述前置索引中各第一索引位置记录的存在状态,确定入口索引中与所述第一索引标识对应的第二索引位置,并在第二索引位置记录所述瓦片栅格数据在目标存储空间中的存储地址。本发明避免了构建过程中的哈希冲突,并且降低读取过程中查找耗用,提高了读取效率。
Description
技术领域
本发明涉及地图技术领域,特别是涉及地图数据生成方法和装置、地图数据读取方法和装置。
背景技术
在网络地图服务中,界面中显示的图幅内容是由显示级数和坐标范围决定的,显示级数相当于放大和缩小的功能,不同级数显示的比例尺不同。在实际应用中,往往用地图瓦片技术将图幅内容切分成瓦片进行存储和展现的。
地图瓦片技术,是将某个范围的空间数据渲染为不同分辨率的图片,并对其进行分块,从包括某个范围的数据地图图片的左上角开始,从左至右、从上到下进行切割,分割成相同大小(通常为256x256像素)的正方形地图瓦片。通常,将全世界范围的空间数据缩放在一个瓦片范围内的比例尺级别,称之为0级,是最小分辨率级别。下一比例尺级别为第1级别,分辨率为0级的2倍,即2*2个瓦片表达全世界范围。以此类推,形成0~N级地图瓦片。那么,给定一个级数和x、y坐标就可以唯一确定一个瓦片。
在实际生成可以线上使用的地图包文件时,首先将实际的地图数据按层级的空间范围划分瓦片,比如将0级的地图数据划分为N个瓦片,每个瓦片对应一个源数据;将1级的地图数据分为N个瓦片,每个瓦片对应一个源数据,依此类推。在存储瓦片的源数据时以瓦片key和源数据的对应关系进行存储。其中,如果地图数据中比如海洋等地理特征,在地图数据中的是以单一颜色设置的,其也会切分为一个瓦片。然后以每个源数据为基础生成一个瓦片栅格数据,并构建每个瓦片栅格数据的索引,从而构建地图包文件。那么在后续用户发送地图查询请求时,就通过索引查找到相关的瓦片栅格数据进行展示。
但是,在传统的地图包文件的生成过程中,采用哈希算法对瓦片栅格数据构建索引,如果出现哈希冲突,其处理过程会变得繁琐,计算效率低,打包过程效率也低。并且地图包文件的生成过程中,会对所有源数据生成瓦片栅格数据,但是如果地图的源数据是类似海洋等地理特征,其以单一颜色表示的瓦片,对其生成瓦片栅格数据实际上是没有意义的,并不需要进行存储,但是传统的构建过程也对其进行了存储,也导致打包效率低。
而基于上述包文件,在瓦片栅格数据的读取过程中,由于哈希算法是散列的,在后续读取地图数据的过程中需要遍历哈希表,其查询瓦片栅格数据效率也很低。并且由于地图包文件的索引对所有的瓦片栅格数据均进行记录,查询时也会进行查询,导致查询效率低。
发明内容
本发明提供了一种地图数据生成方法和装置、地图数据读取方法和装置,以解决采用哈希算法打包地图数据的情况下,打包效率低,并且导致后续读取地图数据的效率也低的问题。
为了解决上述问题,本发明实施例公开了一种地图数据生成的方法,包括:
将地图数据中的各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引中的第一索引位置按序一一对应;
针对每个瓦片生成对应的瓦片栅格数据,并分别将瓦片栅格数据的存在状态写入前置索引中的与所述第一索引标识对应的第一索引位置;
根据所述前置索引中各第一索引位置记录的存在状态,确定入口索引中与所述第一索引标识对应的第二索引位置,并在第二索引位置记录所述瓦片栅格数据在目标存储空间中的存储地址。
本发明还公开了一种地图数据读取的方法,包括:
获取被请求的各瓦片的瓦片定位标识;
将各瓦片定位标识分别映射为连续有序的第一索引标识;
针对每个第一索引标识,分别查找前置索引中与所述第一索引标识所对应的第一索引位置记录的存在状态是否为存在;所述前置索引的各第一索引位置按序与由所有瓦片定位标识映射得到的连续有序的第一索引标识一一对应;所述前置索引用于记录所述第一索引标识对应瓦片栅格数据的存在性;
如果所述第一索引位置记录的存在状态为存在,则根据前置索引中每个第一索引标识对应的第一索引位置,分别确定入口索引中与所述第一索引位置对应的第二索引位置;所述入口索引用于记录瓦片数据在目标存储空间的存储地址;
从所述第二索引位置分别读取各瓦片定位标识各自对应的瓦片栅格数据在包文件数据区的存储地址,并根据所述存储地址分别提取瓦片栅格数据。
本发明还公开了一种地图数据生成的装置,包括:
瓦片映射模块,适于将地图数据中各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引的第一索引位置按序一一对应;
前置索引构建模块,适于依次针对每个瓦片生成瓦片栅格数据时,逐个将瓦片栅格数据的存在状态写入前置索引中与所述瓦片的第一索引标识对应的第一索引位置;
入口索引构建模块,适于根据所述前置索引中各第一索引位置记录的存在状态,确定入口索引中与所述第一索引标识对应的第二索引位置,并在第二索引位置记录所述瓦片栅格数据在目标存储空间中的存储地址。
本发明还公开了一种地图数据读取的装置,包括:
请求接收模块,适于获取被请求的各瓦片的瓦片定位标识;
瓦片映射模块,适于将各瓦片定位标识分别映射为连续有序的第一索引标识;
前置索引检索模块,适于针对每个第一索引标识,分别查找前置索引中与所述第一索引标识所对应的第一索引位置的存在状态是否为存在;所述前置索引的各第一索引位置按序与由所有瓦片定位标识映射得到的连续有序的第一索引标识一一对应;所述前置索引记录所述第一索引标识对应瓦片栅格数据的存在性;
入口索引检索模块,适于如果所述第一索引位置的存在状态为存在,则根据前置索引中每个第一索引标识对应的第一索引位置,分别确定入口索引中与所述第一索引位置对应的第二索引位置;所述入口索引记录瓦片数据在目标存储空间的存储地址;
提取模块,适于从所述第二索引位置读取所述瓦片栅格数据在目标存储空间中的存储地址,并根据所述存储地址提取瓦片栅格数据。
与背景技术相比,本发明包括以下优点:
1、本发明通过将所有地图数据的所有瓦片的瓦片定位标识映射为连续有序的第一索引标识,然后在瓦片栅格数据时,按序在前置索引第一索引位置和后置索引的第二索引位置中进行记录,不会存在哈希冲突的问题。比如将瓦片的瓦片定位标识(层级,在该层级下的坐标)映射为0、1、2……的第一索引标识,然后以这种连续的第一索引标识逐个记录,不会存在哈希冲突。
2、本发明由于前置索引中的第一索引位置与所有第一索引标识按序一一对应,不为空的第一索引位置与入口索引的第二索引位置也可按序对应,在查询时,可以不用遍历等繁琐的查询方式即可很简单的查到入口索引中与第一索引标识下对应的第二索引位置,从而提取存储地址。
3、本发明的前置索引记录所述第一索引标识对应瓦片栅格数据的存在性,入口索引记录瓦片数据在目标存储空间的存储地址。前置索引对瓦片栅格数据是否存在进行记录,然后再根据前置索引中记录的存在状态,在入口索引中对应位置记录瓦片栅格数据在包文件数据区中的存储地址,将瓦片栅格数据的存在状态和具体瓦片栅格数据存储地址的两者通过前置索引和入口索引分开,在查询时直接根据前置索引的记录将不需要读取瓦片栅格数据的,可以不再进入入口索引中进行查找,降低查找耗用,降低了磁盘的寻址代价,从而提高了读取效率。
附图说明
图1是本发明实施例的一种地图数据生成的方法的流程示意图;
图1A是本发明实施例的前置索引的示例;
图1B是本发明实施例的前置索引-入口索引-数据区的逻辑示例;
图1C是本发明实施例图1B的前置索引-入口索引-数据区的详细逻辑示例;
图1D是本发明实施例另一种的前置索引-入口索引-数据区的逻辑示例;
图2是对应本发明图1实施例的一种地图数据读取的方法的流程示意图;
图3是本发明实施例的另一种地图数据生成的方法的流程示意图;
图4是对应本发明图2实施例的一种地图数据读取的方法的流程示意图;
图5是本发明实施例的另一种地图数据生成的方法的流程示意图;
图5A是本发明实施例的另一种前置索引-入口索引-数据区的详细逻辑示例;
图6是本发明实施例的另一种地图数据生成的方法的流程示意图;
图7是对应本发明图5、6实施例的一种地图数据读取的方法的流程示意图;
图8是本发明实施例的另一种地图数据生成的方法的流程示意图;
图8A和图8B是本发明实施例的分段统计示例;
图9是对应本发明图8实施例的一种地图数据读取的方法的流程示意图;
图9A是本发明实施例bitset和sum_stub的示例;
图10是本发明实施例的另一种地图数据生成的装置的结构示意图;
图11是本发明实施例的另一种地图数据读取的装置的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明的核心思想之一是:对于将地图数据进行瓦片划分后的所有瓦片标识,将所有瓦片的定位标识映射为连续的第一索引标识,该连续的第一索引标识与前置索引的各第一索引位置按序一一对应,然后对于每个第一索引标识,在针对每个瓦片生成瓦片栅格数据时,逐个将该瓦片栅格数据的存在状态写入前置索引中与所述瓦片的第一索引标识对应的第一索引位置,然后再根据前置索引的记录,确定入口索引中的第二索引位置,在第二索引位置存储该瓦片栅格数据在包文件数据区中的存储地址。如此按序对瓦片栅格数据构建索引的过程,不会产生哈希冲突,并且由于前置索引和入口索引均是按序存储的,后续对索引的检索效率高,读取地图数据的效率也相应提高。
实施例一
在本发明实施例中,为了方便描述,前置索引可以用bitset序列表示,用于记录所述第一索引标识对应瓦片栅格数据的存在性;入口索引可以用entry索引数组表示,用于记录瓦片数据在目标存储空间的存储地址。其中bitset:用来管理一系列bit位的数据结构,bit位有0和1两种状态;entry索引数组:用于记录数据位于数据区的偏移量及大小,每个entry中的元素占64位,前44bit为offset,后20bit为length。
参照图1,其示出本发明实施例的一种地图数据生成的方法的流程示意图,具体可以包括:
步骤110,将地图数据中各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引的第一索引位置按序一一对应;
在本发明实施例中,在生成地图数据的包文件之前,需要先获取地图的原始数据,然后将其切分成瓦片形式的元数据。对于地图瓦片技术,是将某个范围的空间数据渲染为不同分辨率的图片,并对其进行分块,从包括某个范围的数据地图图片的左上角开始,从左至右、从上到下进行切割,分割成相同大小(通常为256x256像素)的正方形地图瓦片,不同层级的原始数据均需要切分成瓦片形式。那么对于一个瓦片,其所处层级,以及其在当前层级的地图中的坐标(x,y),因此由(层级,坐标)作为的瓦片定位标识(或者说瓦片key)可以唯一确定该瓦片的位置。那么由于瓦片是按层级和横纵轴划分的,具有明确的规则性,因此可以将所有的瓦片key映射成唯一的连续有序的第一索引标识集合(或者说ID集合),所述第一索引标识为整型数据。
比如,一个地图数据将所有层级的地图均进行瓦片切分,最后得到1万张瓦片。那么本发明可以遍历所有的瓦片key,得到1万个瓦片key,然后可以1万个瓦片key通过映射函数映射到[0,1,2,3……9999]。
那么本发明则将前置索引bitset中的各第一索引位置按序与[0,1,2,3……9999]进行对应。
其中,所述前置索引用于记录瓦片定位标识对应的瓦片栅格数据存在状态。即对于瓦片key的源数据不为矢量数据(或者说为单色数据)的情况,本发明在创建地图数据包文件时,对于不会其生成瓦片栅格数据,则在前置索引对应的第一索引位置中记录该瓦片对应不存在瓦片栅格数据。反之,对于存在瓦片栅格数据的瓦片,则在前置索引对应的的第一索引位置中记录其存在瓦片栅格数据。
优选的,本发明实施例还包括:
步骤100,在内存空间中申请一块地址连续的存储空间作为前置索引;所述连续有序的第一索引标识逐个与所述存储空间的每个bit位地址的下标一一对应,所述bit位的值对应所述瓦片栅格数据的存在状态。
比如前述将bitset中序列的各第一索引位置按序与[0,1,2,3……9999]进行对应的例子中,bitset的第一个第一索引位置的下标为0,然后逐个增加,那么各个第一索引位置即与所有ID按序对应上。
进一步的,对于地图的原始数据,由于地图中很多地理位置可以不用矢量数据表示,那么其切分得到的瓦片也不会用矢量数据标识,比如海洋可以直接用单色数据进行表示,那么本发明对于该种瓦片的源数据来说,不会对其生成瓦片栅格数据,其瓦片栅格数据在逻辑上是不存在的。那么对于各个索引位置,本发明设置了两种可记录的值,一种值为存在,一种为值不存在。
而在本发明实施例中,由于在内存空间中申请一块地址连续的存储空间作为前置索引,内存空间最小的存储位为bit位,而bit位的值正好只能为1或者为0,那么在每个bit位按序与所有瓦片的ID对应上之后,每个bit位的1或者0正好能表示对应瓦片是否存在瓦片栅格数据。比如bit位值为1表示瓦片栅格数据存在,比如bit位值为0表示瓦片栅格数据不存在。
当然,在本发明实施例中,对于前置索引bitset序列和入口索引entry数组,在生成地图数据开始时,就会在内存中对各自申请一块内存空间,进行初始化,以等待存入数据。比如调用createIndex(long size)函数创建bitset和entry索引,为bitset和entry分配内存空间,并都初始化为0,在后续构建时在对其值进行更改。
当然,在本发明实施例中,可以预先根据瓦片的数量,定义前置索引bitset序列大小和入口索引entry数组大小,然后创建时即可初始化相应大小的内存空间。
步骤120,针对每个瓦片生成对应的瓦片栅格数据时,并分别将瓦片栅格数据的存在状态写入前置索引中的与所述瓦片的第一索引标识对应的第一索引位置;
在本发明实施例中具体存入地图数据的包文件数据区中的瓦片栅格数据需要由瓦片的源数据分别生成,那么如果瓦片的源数据为空,即不存在该瓦片的矢量数据,则本发明中不会生成瓦片栅格数据,那么也不会存入包文件的数据区。
优选的,所述依次针对每个瓦片分别生成瓦片栅格数据,包括:
子步骤S121,依次针对每个瓦片的瓦片定位标识,分别判断对应的源数据是否为空;
本发明实施例根据该瓦片key从原始数据库中查找对应的源数据,判断该源数据是否为空。在本发明中即判断瓦片key对应的矢量数据是否存在,如果矢量数据不存在,则分别判断所述瓦片key对应的源数据为空;如果矢量数据存在,则分别判断所述瓦片key对应的源数据不为空。
子步骤S122,如果所述瓦片定位标识对应的源数据为空,则不生成瓦片栅格数据;
对于不存在矢量数据的瓦片key,不用生成瓦片栅格数据,直接把前置索引bitset中相应ID的bit位值设为0,当然对于初始化为0的前置索引,可以不改变对应bit位的值。
子步骤S123,如果所述瓦片定位标识对应的源数据不为空,则根据所述源数据生成瓦片栅格数据。
对于在矢量数据的瓦片key,生成瓦片栅格数据,直接把bitset中相应ID的bit位值设为1。
通过上述步骤,前置索引构建后的逻辑示意图如图1A,图1A标识总共有N个瓦片,由该N个瓦片key分别映射到[0、1、2、……n]的连续整型ID,在相应ID下的bit位根据矢量数据的存在状态分别将值写为1或者0。
步骤130,根据所述前置索引中各第一索引位置记录的存在状态,确定入口索引中与所述第一索引标识对应的第二索引位置,并在第二索引位置记录所述瓦片栅格数据在目标存储空间中的存储地址。
在本发明实施例中,所述目标存储空间可以为地图数据包文件的文件数据区。前述入口索引entry数组的第二索引位置可以与前置索引bitset序列的第一索引位置按序一一对应,其索引逻辑结构可以如图1B。其中,entry的索引位置分别与bitset的索引位置一一对应,其中bitset为图1所示的记录,在entry索引中与第一索引位置为0的对应的第二索引位置记录可以设置为NULL,相对应的目标存储空间中对应的value值可为空。当然entry索引的具体结构可以如图1C,其具体存储地址的offset和length均可以设置为NULL。
当然,本发明的entry数组还可以由如下的逻辑形式,如图1D所示,只有前置索引bitset序列中记录为1(即表示瓦片栅格数据存在)的第一索引位置,才能在entry数组中有一个第二索引位置存储其存储地址,其第二索引位置的第二索引标识分别与其在前置索引中对应第一索引位置及之前的记录为1的第一索引位置的总个数对应。比如bitset第1个第一索引位置,当前位置及之前为1的个数为1个,那么其第二索引位置的第二索引标识为1,即对应entry[1];对于第5个第一索引位置,当前位置及之前为1的个数为2个,那么其对应entry[2];对于第6个第一索引位置,当前位置及之前为1的个数为3个,那么其对应entry[3],依次类推。
而前置索引中记录为0的则在entry数组中没有相应的第二索引位置。
在本发明实施例中,前置索引记录了瓦片定位标识对应的瓦片栅格数据的存在状态,入口索引记录了存在状态为存在的瓦片定位标识的瓦片栅格数据在目标存储空间中的存储地址。在查询某个瓦片定位标识的瓦片栅格数据时,则首先在前置索引对应所述瓦片定位标识的第一索引位置的记录,判断其瓦片栅格数据是否存在,如果不存在,则不继续查找,如果存在,则进入入口索引从与第一索引位置对应的第二索引位置查找相应的存储地址。
本发明将需要生成包文件的地图数据,对于其进行瓦片切分后的所有瓦片,将所有瓦片的定位标识映射为连续的第一索引标识,该连续的第一索引标识与前置索引的各第一索引位置按序一一对应,然后对于每个第一索引标识,在针对每个瓦片生成瓦片栅格数据时,逐个将该瓦片栅格数据的存在状态写入前置索引中与所述瓦片的第一索引标识对应的第一索引位置,然后再根据前置索引的记录,确定入口索引中的第二索引位置,在第二索引位置存储该瓦片栅格数据在包文件数据区中的存储地址。如此按序对瓦片栅格数据构建索引的过程,不会产生哈希冲突,并且由于前置索引和入口索引均是按序存储的,后续对索引的检索效率高,读取地图数据的效率也相应提高。
实施例二
本发明是对应图1实施例的一种地图数据读取的方法过程。
参照图2,其示出本发明实施例的一种地图数据读取的方法的流程示意图,具体可以包括:
步骤210,获取被请求的各瓦片的瓦片定位标识;
在地图包文件使用时,本发明可先将实施例一构建的前置索引和入口索引加载至内存中。
在接收到地图查询请求后,则可从所述地图查询请求中提取各其请求的各瓦片的瓦片key。
其中,所述前置索引为内存空间中一块地址连续的存储空间;所述连续有序的第一索引标识逐个与所述存储空间的每个bit位地址的下标一一对应,所述bit位的值对应所述瓦片栅格数据的存在状态。前置索引bitset序列的逻辑架构如图1A。
步骤220,将各瓦片定位标识分别映射为连续有序的第一索引标识;
以图1实施例中同样的映射函数将被请求的各瓦片key映射为ID。
步骤230,针对每个第一索引标识,分别查找前置索引中与所述第一索引标识所对应的第一索引位置的存在状态是否为存在;所述前置索引的各第一索引位置按序与由所有瓦片定位标识映射得到的连续有序的第一索引标识一一对应;
步骤240,如果所述第一索引位置的存在状态为存在,则根据前置索引中每个第一索引标识对应的第一索引位置,分别确定入口索引中与所述第一索引位置对应的第二索引位置;
如果所述第一索引位置的存在状态为不存在,则不再到包文件中查找瓦片栅格数据,可以直接从指定位置提取单色图片返回给客户端。比如,图1A中,如果ID为3,查找bitset序列中bit位下标为3处记录为0,不再到包文件中查找数据。如果ID为0,查找bitset序列中bit位下标为0处记录为1,则需要再到包文件中查找瓦片栅格数据。
步骤250,从所述第二索引位置读取所述瓦片栅格数据在目标存储空间中的存储地址,并根据所述存储地址提取瓦片栅格数据。
根据前置索引bitset序列中记录的1的元素,分别确定入口索引entry数组中对应所述ID的entry[i],然后从该entry[i]中提取存储地址,即可从包文件的数据区中提取数据。
在本发明实施例中,由于瓦片key映射为连续的ID,可以直接根据ID与bitset序列中第一索引位置的下标的对应关系去读取其中的值,然后即可判断包文件中是否存储了该ID的瓦片栅格数据,然后再直接根据bitset序列与入口索引entry数组中第二索引位置的对应关系,直接找到该ID的entry[i],提取存储地址,即可从包文件中提取数据。上述过程不需要遍历,节省遍历时间,并且对于空的数据不再进行后续查询,降低系统资源耗用。
实施例三
本实施例是在图1实施例的基础之上的图1A和图1B的构建过程实施例。
参照图3,其示出本发明实施例的一种地图数据生成的方法的流程示意图,具体可以包括:
步骤310,将地图数据中各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引的第一索引位置按序一一对应;
在本发明实施例中遍历生成地图数据包文件的原始数据中所有的瓦片key,然后将所有的瓦片key通过映射函数映射为连续有序的ID,比如从0开始的连续整数。
步骤312;将前置索引中第一索引位置与入口索引中第二索引位置按序一一对应;
在本发明实施例中,创建前置索引bitset序列和入口索引entry数组。Bitset序列为连续的bit位内存空间,每个bit位为第一索引位置,其bit位的个数至少等于瓦片的总数。entry数组为以64位bit位为单元的内存空间,每个单元连续排列,每个64位bit位的内存空间为第二索引位置,每个单元前44bit为offset,后20bit为length。第一索引位置分别与第二索引位置一一对应,即第一索引位置的下标分别与第二索引位置的下标一一对应。
步骤320,依次针对每个瓦片的瓦片定位标识,判断对应的源数据是否为空;如果所述瓦片定位标识对应的源数据为空,则进入步骤330;如果所述瓦片定位标识对应的源数据不为空,则进入步骤340;
针对每个瓦片key,分别查找其源数据,判断其源数据是否为矢量数据,如果是矢量数据,则确定其源数据不为空,如果不是矢量数据,则确定其源数据为空。
步骤330,不生成瓦片栅格数据,进入步骤332;
步骤332,对于不存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为不存在;进入步骤342;
步骤334;对于前置索引的第一索引位置中存在状态为不存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录为空;
步骤330至步骤334为依次对瓦片key查找源数据为矢量数据时,前置索引和入口索引的构建过程。比如图1中第二个生成的瓦片key的不存在矢量数据,在bitset序列中将地址下标为1的bit位置为0,则将对应地址下标为2的entry数组元素中置为空。
步骤340,根据所述源数据生成瓦片栅格数据,并存入目标存储空间,进入步骤342;
比如将生成的瓦片栅格数据写入到硬盘中地图数据包文件的文件数据区中。
步骤342,对于存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为存在;进入步骤244;
步骤344;对于前置索引的第一索引位置中存在状态为存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录所述瓦片栅格数据在包文件数据区中的存储地址。
步骤340至步骤344为依次对瓦片key查找源数据为矢量数据时,前置索引和入口索引的构建过程。比如图1中第一个生成的瓦片key的存在矢量数据,在bitset序列中地址下标为0的bit位中置为1,则将对应地址下标为1的entry数组元素中写入瓦片栅格数据在包文件中的存储地址。
本发明实施例可以在前置索引和入口索引进行构建时,在内存中将两者的存储地址简单的进行对应,构建过程方便,不会产生哈希冲突。在查询时,可以不用遍历等繁琐的查询方式即可很简单的查到入口索引中与第一索引标识下对应的第二索引位置,从而提取存储地址。并且将瓦片栅格数据的存在状态和具体瓦片栅格数据存储地址的两者通过前置索引和入口索引分开,在查询时直接根据前置索引的记录将不需要读取瓦片栅格数据的,可以不再进入入口索引中进行查找,降低查找耗用,降低了磁盘的寻址代价,从而提高了读取效率。
实施例四
本发明是对应图3实施例的一种地图数据读取的方法过程。
参照图4,其示出本发明实施例的一种地图数据读取的方法的流程示意图,具体可以包括:
步骤400,预先加载入口索引和前置索引;所述入口索引中的第二索引位置按序与前置索引中第一索引位置一一对应;
步骤410,获取被请求的各瓦片的瓦片定位标识;
步骤420,将各瓦片定位标识分别映射为连续有序的第一索引标识;
步骤430,判断前置索引中与所述第一索引标识对应所述第一索引位置的记录是否为存在;
如果前置索引中与所述第一索引标识对应所述第一索引位置的存在状态为不存在,则不进入入口索引中查询。
步骤440,如果前置索引中与所述第一索引标识对应所述第一索引位置的存在状态为存在,则根据前置索引中第一索引位置与入口索引中第二索引位置的一一对应关系,查找入口索引中与所述第一索引标识对应的第二索引位置;
步骤450,从所述第二索引位置读取所述瓦片栅格数据在目标存储空间中的存储地址,并根据所述存储地址提取瓦片栅格数据。
本发明的前置索引bitset序列和入口索引entry数组的架构如图1B,那么对于一个bitset中bit为0的ID,不进入入口索引查找。对于bitset序列中bit值为1的一个ID,比如ID为4,直接查找entry索引中第5个索引位置的entry[5],即可从entry[5]中的offset和length中提取数据。
在本发明实施例中,由于所有瓦片key与ID的一一映射关系,ID与bitset序列中各元素有序的一一对应关系,则bitset序列中每个位置与entry数组中每个位置有序的一一对应关系映射为连续的ID。对于任意一个瓦片key的ID,可以直接根据ID与bitset序列中第一索引位置的下标的对应关系去读取其中的值,然后即可判断包文件中是否存储了该ID的瓦片栅格数据,然后再直接根据bit序列中各元素分别与entry数组中各元素的一一对应关系,不用通过复杂的计算确定bit序列中具体与哪个entry数组中的元素对应,上述过程不需要遍历,查找简单,节省遍历时间,并且对于空的数据不再进行后续查询,降低系统资源耗用。
实施例五
本实施例是在图1实施例的基础之上的图1C所示的entry索引的构建过程实施例,其是在图1B的基础上进行的一种入口索引entry数组的优化方案。
参照图5,其示出本发明实施例的一种地图数据生成的方法的流程示意图,具体可以包括:
步骤510,将地图数据中各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引的第一索引位置按序一一对应;
在本发明实施例中遍历生成地图数据包文件的原始数据中所有的瓦片key,然后将所有的瓦片key通过映射函数映射为连续有序的ID,比如从0开始的连续整数。
步骤512;将前置索引中第一索引位置与入口索引中第二索引位置按序一一对应;
在本发明实施例中,创建前置索引bitset序列和入口索引entry数组。bitset为连续的bit位内存空间,每个bit位为第一索引位置,其bit位的个数至少等于瓦片的总数。entry索引为以64位bit位为单元的内存空间,每个单元连续排列,每个64位bit位的内存空间为第二索引位置,每个单元前44bit为offset,后20bit为length。第一索引位置与第二索引位置一一对应,即第一索引位置的下标与第二索引位置的下标一一对应。
步骤514,依次针对每个瓦片的瓦片定位标识,判断对应的源数据是否为空;如果所述瓦片定位标识对应的源数据为空,则进入步骤530;如果所述瓦片定位标识对应的源数据不为空,则进入步骤540;
针对每个瓦片key,查找其源数据,判断其源数据是否为矢量数据,如果是矢量数据,则确定其源数据不为空,如果不是矢量数据,则确定其源数据为空。
步骤530,不生成瓦片栅格数据,进入步骤532;
步骤532,对于不存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为不存在;进入步骤534;
步骤534;对于前置索引的第一索引位置中存在状态为不存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录为空;
步骤530至步骤534为依次对瓦片key查找源数据为矢量数据时,前置索引和入口索引构建过程。比如图1中第二个生成的瓦片key的不存在矢量数据,在bitset序列中下标为1的bit位中置为0,然后将对应下标为2的entry数组元素中置为空。
步骤540,根据所述源数据生成瓦片栅格数据,并存入目标存储空间,进入步骤542;
比如,将生成的瓦片栅格数据写入到硬盘的地图数据包文件的文件数据区中。
步骤542,对于存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为存在;进入步骤544;
步骤544;对于前置索引的第一索引位置中存在状态为存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录所述瓦片栅格数据在包文件数据区中的存储地址。
步骤540至步骤544为依次对瓦片key查找源数据为矢量数据时,前置索引和入口索引构建过程。比如图1中第一个生成的瓦片key的存在矢量数据,在bitset序列中下标为0的bit位中置为1,然后将对应下标为1的entry数组元素中写入瓦片栅格数据在包文件中的存储地址。
步骤550,根据前置索引的第一索引位置中存在状态为存在的记录,将所述入口索引中对应的第二索引位置的索引下标按序转换为连续的第二索引标识,并将入口索引中记录为空第二索引位置去除,以将入口索引压缩为连续记录存储地址的入口索引。
即在entry索引中,只对前置索引中记录为1的情况,将相应第二索引位置的entry[i]中的下标i按序转换为连续的第二索引标识,如图1B和图5A,件图1B中entry[1]的下标保留,将entry[5]的下标修改为2,将entry[6]的下标修改为3,对应于在前置索引中从前往后的相应为1的bit位。其他依次类推。然后将图5A中的为null的索引去除,得到图1D的索引逻辑结构。
步骤550是对图5A的索引进行压缩,去掉为NULL的索引,得到连续的存储了实际存储地址的入口索引。然后在使用地图数据包文件时,加载入口索引时,即可以连续的内存空间加载所述入口索引,即以64位bit位为单元的连续M个单元,将入口索引的每个entry数组元素按序写入对应的单元中,
本发明实施例可以在前置索引和入口索引构建时,在内存中将两者的存储地址简单的进行对应,构建过程方便,不会产生哈希冲突。本发明实施例中使用bitset表示数据存在性,并且只对非空瓦片栅格数据建立entry索引,在不影响查找效率的前提下明显减少索引数据的大小。节省了背景技术中遍历所花费的时间,且将非空的索引数据连续存储,降低了磁盘的寻址代价,从而提高了读取效率。
实施例六
本实施例是在图1实施例的基础之上的图1C所示的入口索引entry数组的构建过程实施例,其是在图1B的基础上进行的另一种entry索引的优化方案。
参照图6,其示出本发明实施例的一种地图数据生成的方法的流程示意图,具体可以包括:
步骤610,将地图数据中各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引的第一索引位置按序一一对应;
在本发明实施例中遍历生成地图数据包文件的原始数据中所有的瓦片key,然后将所有的瓦片key通过映射函数映射为连续有序的ID,比如从0开始的连续整数。
在本发明实施例中,也会初始化前置索引bitset序列和入口索引entry数组,但是其bitset是连续的bit位,entry索引连续的以64位为单元的内存空间。
步骤620,依次针对每个瓦片的瓦片定位标识,判断对应的源数据是否为空;如果所述瓦片定位标识对应的源数据为空,则进入步骤630;如果所述瓦片定位标识对应的源数据不为空,则进入步骤640;
针对每个瓦片key,分别查找其源数据,判断其源数据是否为矢量数据,如果是矢量数据,则确定其源数据不为空,如果不是矢量数据,则确定其源数据为空。
步骤630,不生成瓦片栅格数据,进入步骤632;
步骤632,对于不存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为不存在,并且不进入入口索引的处理;
步骤630至步骤632为依次对瓦片key查找源数据为矢量数据时,前置索引和入口索引的构建过程。比如图1中第二个生成的瓦片key的不存在矢量数据,在bitset序列中将地址下标为1的bit位置为0,然后在entry索引中不对该ID的瓦片栅格数据做任何处理,即不为ID保留一个entry索引,进而也不会将该保留的entry数组元素置为Null。
步骤640,根据所述源数据生成瓦片栅格数据,并存入目标存储空间,进入步骤642;
比如将生成的瓦片栅格数据写入到硬盘中地图数据包文件的文件数据区中。
步骤642,对于存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为存在;进入步骤544;
步骤644;对于前置索引的第一索引位置中存在状态为存在的记录,将对应的瓦片栅格数据在包文件数据区中的存储地址按序分别写入入口索引的第二索引位置中;所述第二索引位置的索引下标为连续有序的第二索引标识。
步骤640至步骤644为依次对瓦片key查找源数据为矢量数据时,前置索引和入口索引的构建过程。比如图1中第一个生成的瓦片key的存在矢量数据,在bitset序列中地址下标为0的bit位中置为1,则将对应地址下标为1的entry数组元素中写入瓦片栅格数据在包文件中的存储地址。在本步骤中,即每生成一个不为空的瓦片栅格数据,将其存储地址按序分别写入entry数组的对应元素entry[i]中,每个entry[i]中i为连续有序的第二索引标识。如图1D中,对于ID=0的bit为1,则在entry[1]中记录ID=0的瓦片栅格数据地址;对于ID=2的bit为0,则entry索引中不为其保留任何存储空间;对于ID=3的bit为0,则entry索引中不为其保留任何存储空间;对于ID=4的bit为0,则entry索引中不为其保留任何存储空间;对于ID=5的bit为1,则在entry[2]中记录ID=0的瓦片栅格数据地址;对于ID=6的bit为1,则在entry[3]中记录ID=0的瓦片栅格数据地址。其他依次类推。
本发明实施例中使用前置索引bitset序列表示数据存在性,并且只对非空瓦片栅格数据建立入口索引entry数组,在不影响查找效率的前提下明显减少索引数据的大小。节省了背景技术中遍历所花费的时间,且将非空的索引数据连续存储,降低了磁盘的寻址代价,从而提高了读取效率。并且使用前置索引bitset序列和入口索引entry数组把数据存在性和存储信息隔离,有效的压缩了数据空间。
实施例五和实施例六构建的索引结构最终均类似图1D,两者的最近索引结构是一致的,只是中间过程不同。
实施例七
本发明是对应图5、图6实施例的索引结构的一种地图数据读取的方法过程。
参照图7,其示出本发明实施例的一种地图数据读取的方法的流程示意图,具体可以包括:
步骤700,加载前置索引和入口索引;所述入口索引的第二索引位置中记录的存储地址,为前置索引中第一索引位置记录为存在的瓦片栅格数据的存储地址;所述第二索引位置的第二索引标识,根据前置索引的第一索引位置中存在状态为存在的记录,将所述入口索引中对应的第二索引位置的索引下标分别按序转换得到;
其索引结构即图1D所示,bitset序列与entry数组中的各元素所有并不是一一对应的,而是bitset序列中值为1的bit位分别与entry数组中的元素一一对应,即入口索引entry中的每个元素entry[i]由bitset中位置为1的记录确定。
对于bitset的前置索引,可以调用getBitsetState(long ID)函数找到该ID下标对应的bit值。
步骤710,获取被请求的各瓦片的瓦片定位标识;
在地图包文件使用时,本发明可先将实施例一构建的前置索引和入口索引加载至内存中。
在接收到地图查询请求后,则可从所述地图查询请求中提取各其请求的各瓦片的瓦片key。
其中,所述前置索引为内存空间中一块地址连续的存储空间;所述连续有序的第一索引标识逐个与所述存储空间的每个bit位地址的下标分别一一对应,所述bit位的值对应所述瓦片栅格数据的存在状态。bitset的的逻辑架构如图1A。
步骤720,将各瓦片定位标识分别映射为连续有序的第一索引标识;
以图1实施例中同样的映射函数将被请求的各瓦片key映射为ID。
步骤730,针对每个第一索引标识,分别查找前置索引中与所述第一索引标识所对应的第一索引位置的存在状态是否为存在;所述前置索引的各第一索引位置按序与由所有瓦片定位标识映射得到的连续有序的第一索引标识分别一一对应;
步骤740,如果所述第一索引位置的存在状态为存在,则根据前置索引中对应所述第一索引标识的第一索引位置之前,记录为存在的第一索引位置的总个数,确定入口索引中与第一索引标识对应的第二索引标识,以查找与第二索引标识对应的第二索引位置。
如果所述第一索引位置的存在状态为不存在,则不再到包文件中查找瓦片栅格数据。可以直接返回单色数据给请求地图数据的客户端。
比如,图1D中,如果ID为3,查找bitset中bit位下标为3处记录为0,不再到包文件中查找数据。如果ID为5,查找bitset中bit位下标为5处记录为1,则需要再到包文件中查找瓦片栅格数据,那么本步骤对根据bit位的记录,确定entry索引中的第二索引标识;通过计算得到ID=5的1是bitset的第2个1,即ID=5的1是bitset中的第几个1,即在当前ID=5位置及之前的1总个数为2,那么第二索引标识为2,则其对应的第二索引位置为entry[2]。
当然,在读取过程中,针对对应于每个第一索引位置的第一索引标识,根据所述第一索引位置之前记录为不存在的总数,确定第一索引标识在入口索引中对应的第二索引标识。
比如前置索引为的记录按序为“100011001110”,entry数组按序为“entry[1]entry[2]entry[3]entry[4]entry[5]entry[6]”,比如ID=10的时候,其前置索引对应ID=10的bit位为1,那么其瓦片栅格数据存储,在ID=10之前包括其本身记录为1的总个数为5,那么第二索引标识为5,即可确定入口索引entry数组中的元素为entry[5]。
步骤750,从所述第二索引位置读取所述瓦片栅格数据在目标存储空间中的存储地址,并根据所述存储地址提取瓦片栅格数据。
确定entry数组中对应所述ID的元素entry[i]后,即可从该entry[i]中提取存储地址,即可从包文件的数据区中提取数据,然后返回给请求地图数据的客户端。
在本发明实施例中,由于瓦片key映射为连续的ID,可以直接根据ID与bitset中第一索引位置的下标的对应关系去读取其中的值,然后即可判断包文件中是否存储了该ID的瓦片栅格数据,然后再直接根据bitset与entry数组中第二索引位置的对应关系,直接在入口索引中找到该ID对应的entry[i],提取存储地址,即可从包文件中提取数据。上述过程不需要遍历,节省遍历时间,并且对于空的数据不再进行后续查询,降低系统资源耗用。并且本发明实施例中只对非空瓦片栅格数据建立入口索引entry数组,在不影响查找效率的前提下明显减少索引数据的大小,降低了索引的存储空间,进一步节省了背景技术中遍历所花费的时间,且将非空的索引数据连续存储,降低了磁盘的寻址代价,从而提高了读取效率。
实施例八
本实施例是在图1实施例的基础之上的图1C所示的entry数组的构建过程实施例,其是在图1B的基础上进行的另一种entry数组的优化方案。为了方便理解和描述,将后续用到的技术术语在此进行罗列:
bitset:用来管理一系列bit位的数据结构,bit位有0和1两种状态。一个bitset由多个stub组成。
word:一个stub有多个word组成,每个word占用32位存储空间。
sum_stub:用来保存每个stub中状态为1的bit数。
参照图8,其示出本发明实施例的一种地图数据生成的方法的流程示意图,具体可以包括:
步骤810,将地图数据中各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引的第一索引位置按序一一对应;
步骤812;将前置索引中第一索引位置与入口索引中第二索引位置按序一一对应;
步骤820,依次针对每个瓦片的瓦片定位标识,判断对应的源数据是否为空;如果所述瓦片定位标识对应的源数据为空,则进入步骤830;如果所述瓦片定位标识对应的源数据不为空,则进入步骤840;
步骤830,不生成瓦片栅格数据,进入步骤832;
步骤832,对于不存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为不存在;进入步骤842;
步骤834;对于前置索引的第一索引位置中存在状态为不存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录为空;
步骤840,根据所述源数据生成瓦片栅格数据,并存入目标存储空间,进入步骤842;
步骤842,对于存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为存在;进入步骤844;
步骤844;对于前置索引的第一索引位置中存在状态为存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录所述瓦片栅格数据在包文件数据区中的存储地址。
步骤850,所述前置索引中的各第一索引位置以预定数量按序进行分段,并按分段统计记录为存在的第一索引位置的第一总数;
本发明中可将预先在bitset创建时即将前置索引进行分段。那么在每个分段的bit位存储完之后即可统计该分段中记录为存在的第一总数。比如以32个bit位为一段,如果其中有20个bit值为1,那么该分段的第一总数为20。
即在本发明可以stub对其进行分段,每个stub包含32位bit。当然,对于bitset最后的一个分段,如果其bit位个数不够分段阈值数,比如以32位bit进行分段,最后剩余20bit,那么其也可以直接作为一个stub。
当然在本发明中,对于每个分段还可以进行再次分段,比如初始分段后得到第一分段1、第一分段2……,那么可以对这些分段按指定个数进行再次分段得到个第二分段,每个第二分段包括N各第一分段。比如首先对bitset以word为单位进行分段,每个word为32位bit,在对各个word以stub分段,每个stub包括至少一个word。当然,word的个数不够再次分段的个数,比如以每个stub包括两个word为例,按序分完段后,最后剩余一个word,那么其也可以直接作为一个stub。
那么对bitset分段后按顺序即为stub0、stub1……stubn,统计后即可得到每个分段的第一总数为:sum_stub0、sum_stub1……sum_stubn。
在本发明实施例中是首先对bitset以word为分段,然后由word组合成stub分段。根据word为单位统计每个stub中1的个数:
本发明实施例中首先通过如下公式统计每个word的个数:
上述公式为根据word中每个bit位的值进行统计。然后以word[i]为单位进行记录,最后根据word与stub的包含关系,即可分别计算每个stub的第一总数sum_stub。
比如,一个stub由一个word组成,那么如图8A,stub与word重合,bitset被分成如图8A的分段,每个stub下面有32个bit。Stub0下的bit有16个1,16个0;Stub1下的bit有20个1,12个0;Stub2下的bit有9个1,23个0。那么统计后得到图8B的结果。其他情况以此类推。
步骤860,针对对应于每个第一索引位置的第一索引标识,根据所述第一索引位置所属的当前分段中所述第一索引位置之前存在状态为存在的第二总数,以及所述当前分段之前的各分段各自对应的第一总数,确定第一索引标识在入口索引中对应的第二索引标识。
对于一个ID,可以除以分段的预定数量,然后取整即可。比如70除以32,得到商数2并余5,则其所属分段为2+1=3。那么如果余0,则商数即为其所属分段的标识,如果余数不为0,则商数+1即为其所属的分段的标识。即可确定其分段。进一步即可计算第二索引标识。
比如前述分段例子中,一个ID=70的瓦片key,bitset中ID=70的bit位为1,那么该ID属于stub2中,在stub2中65-70bit位的1的个数为3个,那么其之前的分段为stub0和stub1,其总数sum_stub0=16,sum_stub1=20,那么第二索引标识为16+20+3=39,那么即可确定作为入口索引的entry数组中第二索引位置为entry[39]。
步骤870,将入口索引中记录为空第二索引位置去除,以将入口索引压缩为连续记录存储地址的入口索引。
对于初始化的与前置索引的每个bit一一对应的64位的entry元素,将未存储瓦片栅格数据的存储地址的entry元素进行去除,分别释放内存中对应的存储单元,然后按序将非空的entry索引压缩为连续的entry数组,那么在后续使用使时,将所有非空的entry数组元素加载到内存空间中,各个entry元素即在内存空间中连续存在。
本发明实施例中使用bitset表示数据存在性,并且只对非空瓦片栅格数据建立entry数组,在不影响查找效率的前提下明显减少索引数据的大小。使用前置索引bitset和入口索引entry把数据存在性和存储信息隔离,有效的压缩了数据空间。节省了背景技术中遍历所花费的时间,且将非空的索引数据连续存储,降低了磁盘的寻址代价,从而提高了读取效率。并且对于以sumstub记录各个分段中记录为存在的第一索引位置的第一总数,那么在后续读取过程中可以直接利用第一总数快速定位与ID对应的入口索引元素entry[i],降低计算量,提升检索效率。
实施例九
本发明是对应图8实施例的索引结构的一种地图数据读取的方法过程。
参照图9,其示出本发明实施例的一种地图数据读取的方法的流程示意图,具体可以包括:
步骤900,加载前置索引和入口索引;所述入口索引的第二索引位置中记录的存储地址,为前置索引中第一索引位置记录为存在的瓦片栅格数据的存储地址;所述第二索引位置的第二索引标识,根据前置索引的第一索引位置中存在状态为存在的记录,将所述入口索引中对应的第二索引位置的索引下标按序转换得到;所述前置索引的各第一索引位置按序与由所有瓦片定位标识映射得到的连续有序的第一索引标识一一对应;所述前置索引中的各第一索引位置以预定数量按序进行分段,并按分段统计记录为存在的第一索引位置的第一总数。
其索引结构即图1D所示,前置索引bitset序列和入口索引entry中的各元素所有并不是一一对应的,而是bitset序列中值为1的bit位与entry元素一一对应,entry数组中的entry[i]由bitset中位置为1的记录确定。
步骤910,获取被请求的各瓦片的瓦片定位标识;
步骤920,将各瓦片定位标识分别映射为连续有序的第一索引标识;
步骤930,针对每个第一索引标识,分别查找前置索引中与所述第一索引标识所对应的第一索引位置的存在状态是否为存在;
步骤940,如果所述第一索引位置的存在状态为存在,则针对对应于每个第一索引位置的第一索引标识,根据所述第一索引位置所属的当前分段中所述第一索引位置之前存在状态为存在的第二总数,以及所述当前分段之前的各分段各自对应的第一总数,确定第一索引标识在入口索引中对应的第二索引标识,从而确定第二索引位置。
如果所述第一索引位置的存在状态为不存在,则不再到入口索引中查找瓦片栅格数据的存储地址,可直接从指定存储位置提取单色数据返回。
如图8A和图8B的分段例子,比如接收到的瓦片key映射后,得到ID=70,那么在bitset序列中查找ID=70的bit位为1,以70除以那么该ID属于的当前分段为stub2,在stub2中65-70bit位的1的第二总数为3个,其之前的分段为stub0和stub1,其各自对应的第一总数sum_stub0=16,sum_stub1=20,那么第二索引标识为16+20+3=39,那么即可确定entry数组中第二索引位置为entry[39]。
步骤950,从所述第二索引位置读取所述瓦片栅格数据在目标存储空间中的存储地址,并根据所述存储地址提取瓦片栅格数据。
确定entry数组中对应所述ID的元素entry[39]后,即可从该entry[39]中提取存储地址,即可从对应包文件的数据区中提取数据。
下面再举一个具体实例说明读取过程,如图9A,通过前述步骤构建得到的前置索引bitset序列和sum_tub如图9A的描述,bitset由两个stub组成,每个stub由一个word组成。word1统计的sum_stub0=17,word2统计的sum_stub1=16。其中1、0的布尔序列对应标识对应ID的瓦片栅格数据是否存在。1表示存在,0表示不存在。
那么对于读取过程如下:
A911,接收地图查询请求;
A912,从所述地图查询请求中获取瓦片key;
A913,将所述瓦片key映射为ID,ID=46;
A914,在前置索引bitset序列中查找第46位的bit值;所述值为1,表示瓦片数据存在;
另外,当某个ID的值为0时,到该步骤即结束,不进入后续查询。
A915,计算第46位所述word,确定第46位属于word2,确定word2之前的各word包括word1;
A916,计算word1中1的个数为17个,word2中第46位及之前的bit位中1的个数为7。
A917,将17+7=24得到ID=46对应的entry索引的第二索引标识为24,从而确定在入口索引中确定entry[24].
A918,根据元素entry[24]中的存储地址即可到地图数据包文件的文件数据区便可取到正确的瓦片数据。
本发明实施例中使用bitset表示数据存在性,并且只对非空瓦片栅格数据建立entry索引数组,在不影响查找效率的前提下明显减少索引数据的大小。使用前置索引bitset和入口索引entry索引把数据存在性和存储信息隔离,有效的压缩了数据空间。节省了背景技术中遍历所花费的时间,且将非空的索引数据连续存储,降低了磁盘的寻址代价,IO吞吐量大幅提高,从而提高了读取效率。并且对于以sumstub记录各个分段中记录为存在的第一索引位置的第一总数,那么在后续读取过程中可以直接利用第一总数快速定位与ID对应的入口索引元素entry[i],降低计算量,提升检索效率。
实施例十
参照图10,其示出本发明实施例的一种地图数据生成的装置的结构示意图,具体可以包括:
瓦片映射模块1010,适于将地图数据中各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引的第一索引位置按序一一对应;
前置索引构建模块1020,适于依次针对每个瓦片生成瓦片栅格数据时,逐个将瓦片栅格数据的存在状态写入前置索引中与所述瓦片的第一索引标识对应的第一索引位置;
优选的,所述前置索引构建模块1020包括:
第一前置索引构建模块,适于依次针对每个瓦片的瓦片定位标识,判断对应的地图源数据是否为空;是则不生成瓦片栅格数据;否则根据所述地图源数据生成瓦片栅格数据,并将所述瓦片栅格数据存入包文件的数据区。
优选的,所述前置索引构建模块1020包括:
第一前置索引记录模块,适于对于不存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为不存在;
第二前置索引记录模块,适于对于存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为存在。
入口索引构建模块1030,适于根据所述前置索引中各第一索引位置记录的存在状态,确定入口索引中与所述第一索引标识对应的第二索引位置,并在第二索引位置记录所述瓦片栅格数据在目标存储空间中的存储地址。
优选的,所述入口索引构建模块1030包括:
位置对应模块,适于将前置索引中第一索引位置与入口索引中第二索引位置按序一一对应;
第一入口索引记录模块,适于对于前置索引的第一索引位置中存在状态为不存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录为空;
第二入口索引记录模块,适于对于前置索引的第一索引位置中存在状态为存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录所述瓦片栅格数据在包文件数据区中的存储地址。
优选的,还包括:
前置索引申请模块,适于在内存空间中申请一块地址连续的存储空间作为前置索引;所述连续有序的第一索引标识逐个与所述存储空间的每个bit位地址的下标一一对应,所述bit位的值对应所述瓦片栅格数据的存在状态。
优选的,还包括:
索引压缩模块,适于根据前置索引的第一索引位置中存在状态为存在的记录,将所述入口索引中对应的第二索引位置的索引下标按序转换为连续的第二索引标识,并将入口索引中记录为空第二索引位置去除,以将入口索引压缩为连续记录存储地址的入口索引。
优选的,还包括:
第三入口索引存储模块,适于对于前置索引的第一索引位置中存在状态为存在的记录,将对应的瓦片栅格数据在包文件数据区中的存储地址按序写入入口索引的第二索引位置中;所述第二索引位置的索引下标为连续有序的第二索引标识;
第四入口索引存储模块,适于对于前置索引的第一索引位置中存在状态为不存在的记录,不进入入口索引的处理。
优选的,还包括:
分段统计模块,适于将前置索引的各第一索引位置,以预定数量按序进行分段,并分别按分段统计存在状态为存在的第一索引位置的第一总数;
第二索引标识确定模块,适于针对对应于每个第一索引位置的第一索引标识,根据所述第一索引位置所属的当前分段中所述第一索引位置之前存在状态为存在的第二总数,以及所述当前分段之前的各分段各自对应的第一总数,确定第一索引标识在入口索引中对应的第二索引标识。
实施例十一
参照图11,其示出本发明实施例的一种地图数据读取的装置的结构示意图,具体可以包括:
请求接收模块1110,适于获取被请求的各瓦片的瓦片定位标识;
瓦片映射模块1120,适于将各瓦片定位标识分别映射为连续有序的第一索引标识;
前置索引检索模块1130,适于针对每个第一索引标识,分别查找前置索引中与所述第一索引标识所对应的第一索引位置的存在状态是否为存在;所述前置索引的各第一索引位置按序与由所有瓦片定位标识映射得到的连续有序的第一索引标识一一对应;所述前置索引记录所述第一索引标识对应瓦片栅格数据的存在性;
优选的,所述前置索引为内存空间中一块地址连续的存储空间;所述连续有序的第一索引标识逐个与所述存储空间的每个bit位地址的下标一一对应,所述bit位的值对应所述瓦片栅格数据的存在状态。
入口索引检索模块1140,适于如果所述第一索引位置的存在状态为存在,则根据前置索引中每个第一索引标识对应的第一索引位置,分别确定入口索引中与所述第一索引位置对应的第二索引位置;所述入口索引记录瓦片数据在目标存储空间的存储地址;
优选的,所述入口索引中的第二索引位置按序与前置索引中第一索引位置一一对应;
进一步的,所述入口索引检索模块1140包括:
第一入口确定模块,适于根据前置索引中第一索引位置与入口索引中第二索引位置的一一对应关系,查找入口索引中与所述第一索引标识对应的第二索引位置。
优选的,所述入口索引的第二索引位置中记录的存储地址,为前置索引中第一索引位置记录为存在的瓦片栅格数据的存储地址;所述第二索引位置的第二索引标识,根据前置索引的第一索引位置中存在状态为存在的记录,将所述入口索引中对应的第二索引位置的索引下标按序转换得到;
进一步的,所述入口索引检索模块1140包括:
第二入口确定模块,适于根据前置索引中对应所述第一索引标识的第一索引位置之前,记录为存在的第一索引位置的总个数,确定入口索引中与第一索引标识对应的第二索引标识,以查找与第二索引标识对应的第二索引位置。
优选的,还包括:
于所述前置索引中的各第一索引位置以预定数量按序进行分段,并按分段统计记录为存在的第一索引位置的第一总数。
优选的,所述入口索引检索模块1140包括:
第三入口确定模块,适于针对对应于每个第一索引位置的第一索引标识,根据所述第一索引位置所属的当前分段中所述第一索引位置之前存在状态为存在的第二总数,以及所述当前分段之前的各分段各自对应的第一总数,确定第一索引标识在入口索引中对应的第二索引标识,从而确定第二索引位置。
提取模块1150,从所述第二索引位置读取所述瓦片栅格数据在目标存储空间中的存储地址,并根据所述存储地址提取瓦片栅格数据。
对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
Claims (15)
1.一种地图数据生成的方法,其特征在于,包括:
将地图数据中的各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引中的第一索引位置按序一一对应;
针对每个瓦片生成对应的瓦片栅格数据,并分别将瓦片栅格数据的存在状态写入前置索引中的与所述第一索引标识对应的第一索引位置;
根据所述前置索引中各第一索引位置记录的存在状态,确定入口索引中与所述第一索引标识对应的第二索引位置,并在第二索引位置记录所述瓦片栅格数据在目标存储空间中的存储地址。
2.根据权利要求1所述的方法,其特征在于,还包括:
在内存空间中申请一块地址连续的存储空间作为前置索引;所述连续有序的第一索引标识逐个与所述存储空间的每个bit位地址的下标一一对应,所述bit位的值对应所述瓦片栅格数据的存在状态。
3.根据权利要求1所述的方法,其特征在于,所述依次针对每个瓦片生成瓦片栅格数据,包括:
依次针对每个瓦片的瓦片定位标识,判断对应的地图源数据是否为空;是则不生成瓦片栅格数据;否则根据所述地图源数据生成瓦片栅格数据,并将所述瓦片栅格数据存入包文件的数据区。
4.根据权利要求3所述的方法,其特征在于,分别将瓦片栅格数据的存在状态写入前置索引中与所述瓦片的第一索引标识对应的第一索引位置包括:
对于不存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为不存在;
对于存在瓦片栅格数据的瓦片,在前置索引中在与所述瓦片的第一索引标识对应的第一索引位置记录为存在。
5.根据权利要求1所述的方法,其特征在于,所述根据所述前置索引中各第一索引位置记录的存在状态,确定入口索引中与所述第一索引标识对应的第二索引位置,并在第二索引位置记录所述瓦片栅格数据在目标存储空间中的存储地址包括:
将前置索引中第一索引位置与入口索引中第二索引位置按序一一对应;
对于前置索引的第一索引位置中存在状态为不存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录为空;
对于前置索引的第一索引位置中存在状态为存在的记录,在入口索引中与所述第一索引标识对应的第二索引位置,记录所述瓦片栅格数据在包文件数据区中的存储地址。
6.根据权利要求1所述的方法,其特征在于,还包括:
根据前置索引的第一索引位置中存在状态为存在的记录,将所述入口索引中对应的第二索引位置的索引下标按序转换为连续的第二索引标识,并将入口索引中记录为空第二索引位置去除,以将入口索引压缩为连续记录存储地址的入口索引。
7.根据权利要求1所述的方法,其特征在于,还包括:
对于前置索引的第一索引位置中存在状态为存在的记录,将对应的瓦片栅格数据在包文件数据区中的存储地址按序写入入口索引的第二索引位置中;所述第二索引位置的索引下标为连续有序的第二索引标识;
对于前置索引的第一索引位置中存在状态为不存在的记录,不进入入口索引的处理。
8.根据权利要求6或7所述的方法,其特征在于,还包括:
将前置索引的各第一索引位置,以预定数量按序进行分段,并分别按分段统计存在状态为存在的第一索引位置的第一总数;
针对对应于每个第一索引位置的第一索引标识,根据所述第一索引位置所属的当前分段中所述第一索引位置之前存在状态为存在的第二总数,以及所述当前分段之前的各分段各自对应的第一总数,确定第一索引标识在入口索引中对应的第二索引标识。
9.一种地图数据读取的方法,其特征在于,包括:
获取被请求的各瓦片的瓦片定位标识;
将各瓦片定位标识分别映射为连续有序的第一索引标识;
针对每个第一索引标识,分别查找前置索引中与所述第一索引标识所对应的第一索引位置记录的存在状态是否为存在;所述前置索引的各第一索引位置按序与由所有瓦片定位标识映射得到的连续有序的第一索引标识一一对应;所述前置索引用于记录所述第一索引标识对应瓦片栅格数据的存在性;
如果所述第一索引位置记录的存在状态为存在,则根据前置索引中每个第一索引标识对应的第一索引位置,分别确定入口索引中与所述第一索引位置对应的第二索引位置;所述入口索引用于记录瓦片数据在目标存储空间的存储地址;
从所述第二索引位置分别读取各瓦片定位标识各自对应的瓦片栅格数据在包文件数据区的存储地址,并根据所述存储地址分别提取瓦片栅格数据。
10.根据权利要求9所述的方法,其特征在于,所述前置索引为内存空间中一块地址连续的存储空间;所述连续有序的第一索引标识逐个与所述存储空间的每个bit位地址的下标一一对应,所述bit位的值对应所述瓦片栅格数据的存在状态。
11.根据权利要求9所述的方法,其特征在于,
所述入口索引中的第二索引位置按序与前置索引中第一索引位置一一对应;
进一步的,所述根据前置索引中每个第一索引标识对应的第一索引位置,分别确定入口索引中与所述第一索引位置对应的第二索引位置,包括:
根据前置索引中第一索引位置与入口索引中第二索引位置的一一对应关系,分别查找入口索引中与所述第一索引标识对应的第二索引位置。
12.根据权利要求9所述的方法,其特征在于,
所述入口索引的第二索引位置中记录的存储地址,为前置索引中第一索引位置的存在状态为存在的瓦片栅格数据对应的存储地址;所述第二索引位置的第二索引标识,根据前置索引的第一索引位置中的存在状态为存在的记录,将所述入口索引中对应的第二索引位置的索引下标按序转换得到;
进一步的,所述根据前置索引中每个第一索引标识对应的第一索引位置,分别确定入口索引中与所述第一索引位置对应的第二索引位置,包括:
根据前置索引中对应所述第一索引标识的第一索引位置之前,记录第一索引位置中存在状态为存在的第一索引位置的总个数,确定入口索引中与第一索引标识对应的第二索引标识,以查找与第二索引标识对应的第二索引位置。
13.根据权利要求12所述的方法,其特征在于,还包括:
所述前置索引中的各第一索引位置以预定数量按序进行分段,并分别按分段统计存在状态为存在的第一索引位置的第一总数;
针对对应于每个第一索引位置的第一索引标识,根据所述第一索引位置所属的当前分段中所述第一索引位置之前存在状态为存在的第二总数,以及所述当前分段之前的各分段各自对应的第一总数,确定第一索引标识在入口索引中对应的第二索引标识,从而确定第二索引位置。
14.一种地图数据生成的装置,其特征在于,包括:
瓦片映射模块,适于将地图数据中各瓦片所属空间范围的瓦片定位标识映射为连续有序的第一索引标识;所述第一索引标识与前置索引的第一索引位置按序一一对应;
前置索引构建模块,适于依次针对每个瓦片生成瓦片栅格数据时,逐个将瓦片栅格数据的存在状态写入前置索引中与所述瓦片的第一索引标识对应的第一索引位置;
入口索引构建模块,适于根据所述前置索引中各第一索引位置记录的存在状态,确定入口索引中与所述第一索引标识对应的第二索引位置,并在第二索引位置记录所述瓦片栅格数据在目标存储空间中的存储地址。
15.一种地图数据读取的装置,其特征在于,包括:
请求接收模块,适于获取被请求的各瓦片的瓦片定位标识;
瓦片映射模块,适于将各瓦片定位标识分别映射为连续有序的第一索引标识;
前置索引检索模块,适于针对每个第一索引标识,分别查找前置索引中与所述第一索引标识所对应的第一索引位置的存在状态是否为存在;所述前置索引的各第一索引位置按序与由所有瓦片定位标识映射得到的连续有序的第一索引标识一一对应;所述前置索引记录所述第一索引标识对应瓦片栅格数据的存在性;
入口索引检索模块,适于如果所述第一索引位置的存在状态为存在,则根据前置索引中每个第一索引标识对应的第一索引位置,分别确定入口索引中与所述第一索引位置对应的第二索引位置;所述入口索引记录瓦片数据在目标存储空间的存储地址;
提取模块,适于从所述第二索引位置读取所述瓦片栅格数据在目标存储空间中的存储地址,并根据所述存储地址提取瓦片栅格数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510119624.XA CN104778212B (zh) | 2014-12-19 | 2015-03-18 | 地图数据生成方法和装置、地图数据读取方法和装置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2014108052080 | 2014-12-19 | ||
CN201410805208 | 2014-12-19 | ||
CN201510119624.XA CN104778212B (zh) | 2014-12-19 | 2015-03-18 | 地图数据生成方法和装置、地图数据读取方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104778212A true CN104778212A (zh) | 2015-07-15 |
CN104778212B CN104778212B (zh) | 2018-08-07 |
Family
ID=53619676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510119624.XA Active CN104778212B (zh) | 2014-12-19 | 2015-03-18 | 地图数据生成方法和装置、地图数据读取方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104778212B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108286975A (zh) * | 2017-01-09 | 2018-07-17 | 北京四维图新科技股份有限公司 | 地图数据的自动化生成方法和装置、以及混合导航系统 |
CN109002452A (zh) * | 2017-06-07 | 2018-12-14 | 杭州海康威视系统技术有限公司 | 地图瓦片更新方法、装置及计算机可读存储介质 |
CN110765138A (zh) * | 2019-10-31 | 2020-02-07 | 北京达佳互联信息技术有限公司 | 数据查询方法、装置、服务器及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030055832A1 (en) * | 1999-10-25 | 2003-03-20 | Oracle Corporation | Storing multidimensional data in a relational database management system |
CN103279487A (zh) * | 2013-04-25 | 2013-09-04 | 中国科学院遥感与数字地球研究所 | 一种地图瓦片缓存的组织和管理方法 |
CN103412962A (zh) * | 2013-09-04 | 2013-11-27 | 国家测绘地理信息局卫星测绘应用中心 | 一种海量瓦片数据的存储方法及读取方法 |
CN103488760A (zh) * | 2013-09-26 | 2014-01-01 | 中国测绘科学研究院 | 地理信息瓦片服务的提供方法及实现该方法的装置 |
-
2015
- 2015-03-18 CN CN201510119624.XA patent/CN104778212B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030055832A1 (en) * | 1999-10-25 | 2003-03-20 | Oracle Corporation | Storing multidimensional data in a relational database management system |
CN103279487A (zh) * | 2013-04-25 | 2013-09-04 | 中国科学院遥感与数字地球研究所 | 一种地图瓦片缓存的组织和管理方法 |
CN103412962A (zh) * | 2013-09-04 | 2013-11-27 | 国家测绘地理信息局卫星测绘应用中心 | 一种海量瓦片数据的存储方法及读取方法 |
CN103488760A (zh) * | 2013-09-26 | 2014-01-01 | 中国测绘科学研究院 | 地理信息瓦片服务的提供方法及实现该方法的装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108286975A (zh) * | 2017-01-09 | 2018-07-17 | 北京四维图新科技股份有限公司 | 地图数据的自动化生成方法和装置、以及混合导航系统 |
CN108286975B (zh) * | 2017-01-09 | 2020-10-27 | 北京四维图新科技股份有限公司 | 地图数据的自动化生成方法和装置以及混合导航系统 |
CN109002452A (zh) * | 2017-06-07 | 2018-12-14 | 杭州海康威视系统技术有限公司 | 地图瓦片更新方法、装置及计算机可读存储介质 |
CN109002452B (zh) * | 2017-06-07 | 2020-10-23 | 杭州海康威视系统技术有限公司 | 地图瓦片更新方法、装置及计算机可读存储介质 |
CN110765138A (zh) * | 2019-10-31 | 2020-02-07 | 北京达佳互联信息技术有限公司 | 数据查询方法、装置、服务器及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104778212B (zh) | 2018-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6032467B2 (ja) | 時空間データ管理システム、時空間データ管理方法、及びそのプログラム | |
US8099421B2 (en) | File system, and method for storing and searching for file by the same | |
CN103412962A (zh) | 一种海量瓦片数据的存储方法及读取方法 | |
JP6262874B2 (ja) | データベース実現方法 | |
CN108255415A (zh) | 建立多重命名空间方法与存取多重命名空间的数据的方法 | |
CN103345469B (zh) | 号码集合的存储、查询方法及其装置 | |
CN104217023A (zh) | 一种利用打包技术解决地图瓦片存储的方法 | |
US11860846B2 (en) | Methods, systems and apparatus to improve spatial-temporal data management | |
CN104778212A (zh) | 地图数据生成方法和装置、地图数据读取方法和装置 | |
CN102542041A (zh) | 栅格数据处理方法及系统 | |
CN115495429A (zh) | 一种基于Hadoop集群的海量空间数据质检方法和系统 | |
CN113835639B (zh) | 一种i/o请求处理方法、装置、设备及可读存储介质 | |
US7650345B2 (en) | Entity lookup system | |
CN107451271A (zh) | 一种哈希表处理方法、装置、设备及存储介质 | |
CN103838766B (zh) | 防空缓存方法和装置 | |
CN111506682B (zh) | 地图数据处理方法、数据查询方法、装置、电子设备 | |
CN102270179B (zh) | 用于cad系统的基于片元的数据存储和处理方法及其系统 | |
CN105354310B (zh) | 基于MapReduce的地图瓦片存储布局优化方法 | |
CN102495902B (zh) | 一种同时实现空间数据和属性数据etl过程的方法及系统 | |
CN110221778A (zh) | 酒店数据的处理方法、系统、存储介质以及电子设备 | |
CN104537023A (zh) | 一种反向索引记录的存储方法及装置 | |
CN109597865B (zh) | 基于嵌入式平台的海量地理信息数据的存储与检索方法 | |
CN115878612B (zh) | 一种数据库结构及其检索方法 | |
CN117540056B (zh) | 数据查询的方法、装置、计算机设备和存储介质 | |
CN109213905A (zh) | 地图数据作业方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |