从图中可以看出,十进制Morton码的顺序就是自下而上合并的顺序。按照自然数顺序扫描即可生成四叉树,关键问题是找到十进制Morton码与具体像素行、列号的关系。一旦找到这种关系,就可以在逐行、逐列时先计算对应的Morton码,就是该格网值对应的线性表下标。可以直接按照下标顺序扫描生成四叉树。
笔者发展了两种计算十进制Morton码的方法,一种是基于数学公式的计算方法;另一种是基于按位操作的计算方法。数学计算的具体公式和过程如下:
计算十进制的Morton码与计算四进制的Morton码相似,首先将行号II转换为一种特殊代码If,计算方法如下:
?
??k?0
??
Ik?II ?当k?0时?? Ik?INT?Ik?1/2? ?当k?0时??
???If?
MOD?Ik,2??4k
同理可以计算列的特殊代码Jf,然后用下式计算十进制的Morton码MD:
MD?2?If?Jf
log2II
1
,M2)表示(本文中以后所有Morton码均
指十进制Morton码)。前一个M1表示该点所在的基本格网的地址码,后一个M2表示该点对应的细分格网的Morton码,即将一对x、y坐标转换为两个Morton码。这种方法可以将栅格数据的精度提高256倍,而存储量仅在有点、线通过的格网上增加2字节。
§4.3 索引方式
在数据库技术中,人们通常使用B树或B+树索引大型文件,
这是提高数据库操作效率的一项重要技术。栅格数据转换成四叉树或二维行程编码以后,也是一个大型的线性表文件,因而索引技术已是非常重要的。B+树是和应用于插入、删除、修改操作比较频繁的数据文件,对于此类操作,一般情况下只需要局部调整,不需要引起整个数据库的大量变化;这是B+树最大的优点。然而,我们需要注意的是:对于B+树,是以数据块的大小建立索引项的。而GIS中是几何数据,尤其是线性四叉树(以下简称LQ)和二维
因篇幅问题不能全部显示,请点此查看更多更全内容