背景知识:
kiwi趣闻:
kiwi是新西兰的一种鸟的名称,Kiwi鸟是尾巴翅膀极短不会飞的鸟,非常珍贵,只在新西兰僻静的丛林里才能见到,所以成为新西兰的国鸟。Kiwi鸟为新西兰人骄傲,新西兰人也自称为Kiwi. 另外大家熟悉的猕猴桃也和KIWI有关,猕猴桃的英文名称为KIWIFRUIT,我国翻译为奇异果,就是因为外表类似KIWI鸟的羽毛而得名。
其他的数据格式:
HAL98,HAL99, HAL00
地图数据,地图盘,地图格式
地图数据:以某种格式为基础电子化的二进制的数据。
地图盘:存储地图数据的数据盘
地图格式:地图数据保存的标准,必须按照这种格式才能读出正确的数据,格式中说明了数据的组织方式和相互之间的关联
版本:地图格式和地图数据都有版本,它们之间不是一一对应的,一对多的关系,一个版本的格式可能对应多个版本的数据,一个版本的数据必要能够找到和其相对应的格式。
kiwi数据盘中的数据和用途:
alldata.kwi:主要存储描画数据,探索数据,诱导数据---MAP,DG, RP,VP使用
guidsrch.kwi: 检索数据的管理数据—NOTE使用
guide文件夹:下面保存的都是检索数据 ---NOTE使用
picture.kwi:画像数据---DG使用
voicedata.kwi:声音数据---DG使用
index.kwi:描画参数数据的管理文件 ---MAP使用
land.kwi:landmark数据---MAP使用
para.kwi:描画参数数据---MAP使用
kiwi数据的主要分类.
Parcel数据:主要用于描画,也被称作描画数据,数据的存储主要的一些坐标的记录,和相关的属性。根据所存的点,线,面的信息,进行显示其中包括背景,道路,文字。这些数据是构成地图的基本元素。
Region数据:主要用于经路探索,这些数据的组织形式也是为了方便最优路的探索。所谓最优路探索就是如何从地图上任意两点中找到一条最近的能够通行的路。在探索的过程中需要设定一定的条件,比如距离优先,费用优先等等,最优路探索的实现依赖于道路数据的连通性,道路的通行规则和道路的Cost值和其他条件的限制,region数据中主要强调了道路的接续,交通规制,通行方向等属性,因此能够应用于经路探索中
诱导数据:主要用于经路诱导,就是在车走行过程中提供一些信息,比如交叉点名称,道路名称,前方交叉的道路的目的地,等等,通过这些信息,提供行车途中走行的各种信息。
画像数据:提供高速道路上主要交叉点的一些情况,表示各个方向上的目的地。
声音数据:保存在经路诱导过程中所能提供的所有的声音信息。
检索数据:保存了地图数据中主要的点的信息,能够提供这个点上具有的地图要素的详细信息。
描画参数数据:保存地图描画时各种要素描画的参数信息,比如某某道路需要描画多宽,某个背景需要使用什么颜色来描画,某种文字需要描画成什么颜色等等,虽然landmark的数据单独保存成一个文件,但把描画参数和landmark统一称为描画参数数据。
数据的分层存储和分块存储.
地图的分层存储:
地图的分层存储可以理解为分不同的比例尺存储,地图最一般的特点,是以缩小的图形显示制图区域的物体和现象,这势必导致对其进行综合。大家都知道这样一个最简单的事实:实地25平方公里在1:10万,1:25万和1:50万比例尺地图上,分别为25平方厘米,4平方厘米,1平方厘米。很明显,欲在上述各种比例尺地图上以相同的详细程度显示实地25平方公里范围内的制图物体和现象是不可能的。即使是很大比例尺的地图(例如1:1000或更大),也不可能将实地的全部物体(现象)毫无遗漏地表示出来。显然,在编制较小比例尺地图时,不加任何选取、化简和概括地将资料地图上的全部内容都表示到新编地图上,那也是不可能的。
这样一来,当所编地图上单位面积内的地物数量过多时,就要对其进行取舍,即选取一部分,舍去另一部分;当地物轮廓图形的弯曲太小太多时,就要予以化简,即删除一些小弯曲;当制图物体(现象)的数量、质量特征过于详细时,就要减少其数量、质量的差别。
地图比例尺标志着地图对地面的缩小程度,直接影响着地图内容表示的可能性,即选取、化简和概括地图内容的详细程度;它决定着地图的几何精度,影响着各要素相互关系处理的难度;它决定着地图表示的空间范围,影响着对制图物体(现象)重要性的评价。
为了满足对于不同比例尺条件下数据处理或检索的需要,把地图分层(Level)存储。一般在最底层存储最详细的数据,而上层逐渐进行数据的抽取。比如目前中国地图数据分为7层,0到6层,最高层6层可能就只描画整个中国的版图,中间标注主要的都市,而到了0层就有可能详细到某个市镇的道路。
参考下面的两个图
6层的数据:
0层数据
地图的分块存储:
分层存储能够将地图数据划分为很小的单元,但是即使这样取得每层的数据也是比较困难,因此在分层存储的基础上对每层的数据分块进行存储,这样为数据的取得和管理也提供了很大的便利条件,因为每层的数据量不同,因此不同层的数据块的个数也是不相同的,低层的数据量较大,划分的数据块较多,高层的数据量小,划分的数据块也少。
parcel数据和region数据
parcel数据:
parcel数据的组织:
parcel数据就是我们上面提到的描画数据,parcel是描画数据的最小单位,它的组织方式就是level层---blockset---block---parcel。每层的数据首先划分为m*m个blockset, 每个blockset又划分为n*n个block, 每个block又划分为p*p个parcel, 如果某个parcel的数据太大,也有可能将parcel划分为q*q个分割parcel. 其中每层的parcel的个数都是2的幂数,比如2的0次幂,就是1*1分割,因此每层的分割都是非0值。另外每层数据的parcel的分割都是相同的,比如0层有4个blockset, 一个blockset划分为4个block, 其他的blockset也划分为4个block, 每个block下的parcel的分割也是相同的,但是同一层的分割parcel是不相同的,有的分割parcel是2*2分割,有的parcel是4*4分割,这时因为分割parcel的划分是根据数据量划分的缘故。
Parcel数据中还存储了诱导信息,它的组织也是按照parcel来进行的。每个parcel都是规则的四边形,描画信息中存储的信息包括背景,道路,文字。在地图数据的每一层都存在parcel数据。地图层越低,parcel数越多。Parcel数据中保存的都是坐标信息,并没有规定各种不同的数据描画成什么颜色等,这些参数的规定都在描画参数数据中规定。
- 相关的概念:
显示class: 是指数据的各种分类,比如背景数据中存在绿地,岛,铁道等显示class,通过描画不同class的背景数据,可以显示不同类别的数据。
正规化坐标:每个parcel内的坐标划分,每个parcel内的最大正规化坐标为4096*4096,通过正规化坐标和每个parcel的左下坐标能够计算parcel内所有点的实际坐标。正规化坐标的使用可以减少很大的数据量
经纬度:和现实中的经纬度的含义相同,kiwi数据中的经纬度的单位是1/8秒,提高了一定的精确度
缩尺scale:每层的数据显示的都是一个scale的数据,比如0层的比例尺是1/25000,实际上在每层又分了多个比例尺,这样的比例尺称为缩尺scale,每层最多允许有5个scale, 实际上0层的scale最多,有3个缩尺scale.每层的数据只有一份,可以通过缩尺scale的控制描画在不同的比例尺下。
- 背景数据:
背景数据是包括点,线,面,点就是地图上的mark, mark的坐标信息保存在背景数据中,mark的形状信息保存在landmark数据中。线是指地图上显示的铁道,区域线,比较窄的河流等等,面是指地图上的绿地,比较宽的河流,建筑物等等。见下图所示:
背景数据是按照下面的方式进行组织的:
显示class->data的排列->地图要素(点,线,面)
相关的概念:
- offset:背景数据中的形状点相对于前一个形状点的偏移量,使用offset可以大大的减少数据的存储容量。
- penup, pendown: 在背景数据的描画过程中,可能需要中断某一部分的描画,比如一个背景线可能会不描画中间的部分,这样就需要描画到某一位置时抬笔,到另外一个位置时落笔,记录这样位置的坐标点称为penup点,pendown点。penup点,pendown点指出现在背景线和背景面中,背景面中一般出现在parcel边界上的面中。
- polyline:背景线,比如铁道,行政边界等等,和道路线不同的是,背景中的线是不能用来走车的。
- polygon:背景面,比如绿地,建筑物等
道路数据:
道路数据中保存的就是车能走行的道路信息,和实际的道路的意义相似,地图中的道路使用点和线来表示。道路数据如下所示:
道路数据是按照下面的方式组织的:道路显示classàlink列àlink,node
相关的概念:
- Node:两条以上的Link的交叉点。
- 形状补间点:两个node点之间的形状点,主要用于描述道路的实际形状。
- ShapeLink:两个形状补间点之间的线段。
- Link列:某些属性相同的一系列Link和Node。
- Linkid:数据中的每个link的番号,对于一层数据保存的所有link,linkid是唯一的。
- 差分linkid:每个link并不直接的记录对应的linkid, 只在link列中记录起始link的linkid, 其他link都记录相对于起始link的差分linkID, 从而间接的求出linkid.
- 幅员:道路宽度
- 顺,逆方向:link的方向和node出现的顺序一致为顺方向,否则为逆方向。
- 通行规制:就是link是否能够走行的信息
文字数据:
地图上显示的各种文字,见下图
- 文字的排列:文字的排列分为横排和纵排两种。横排如上面的“中山大道东“,纵排如上面的“东环高速公路“
- 文字的转行:文字有可能不在一行显示,这样就需要保存转行的文字,比如上面的“广州本田汽车有限公司”
- 文字的类型:文字主要分为重心型,指示pointer型。
重心型
指示pointer型
region数据:
经路计算数据也被称作region数据,region数据的存储也是分块进行,不过它的组织就简单得多,在每层的基础上直接分为若干个region,也就是level层---region号。Region数据中只保存道路的相关信息,随着地图层的降低,region的个数会增加。Region的划分基本上和行政区域的划分相关,region不存在分割region,region就是最小的组织单位。下层region是由上层region数据进行细化得来的。上下层的region存在父子关系。
Region中虽然保存的也是道路信息,但是和parcel数据不同的是,它不保存道路的坐标信息,只有一些道路的通行条件等内容,它和parcel数据的唯一联系就是linkID, 同样的link不管是在parcel中还是在region中,它的linkId都是相同的。
Parcel数据和region数据的关系:
在同时保存了parcel数据和region数据的地图层中,两者的关系如下图所示
- Parcel数据的大小可以使用左下,右上的经纬度范围来定义,它是标准的矩形,在每一层所有parcel的大小都是相同的
- Region也是一个矩形,但是即使在同一层,region的大小也是不相同的,region数据的范围用包含的数据的最大,最小范围表示。
Kiwi格式的读取
Kiwi格式表结构
name[主要地图parcel管理记录]
项番 | Offset | Data长 | Data形式 | 项目名 | 备注 | 识别 |
1 | 0 | 4 | DSA | 主要地图DataFrame的先头Address | (1) | B |
2 | 4 | 2 | BS | 主要地图DataFrame的Size | (2) | B |
- […] 表的名称;
- 项番:给每个项目赋予的项目番号;
- Offset:描述该项目在所属表中的相对位置(用字节表示);
- Data长: 相应项目的data容量,不固定长时,用B表示;
- Data形式:相应项目的数据类型;
- 项目名:相应项目的名称,如暂时未使用,用Reserved 表示;
- 备注 :相应项目的解释;
- 识别:表示是否是有意义的值或是可以省略的值;
- 总是保存有意义的值;
- 根据情况保存,可以保存无意义的值;
- 如果不需要的话省略。
Kiwi格式中的基本概念:
Field : 保存数据的最小单位;
Record: 由多个Field组成的一组数据;
Table : 由相同种类的固定长Record 组成的数据;
List: 由相同种类的不固定长Record 组成的数据
Frame: 由多个Table 或List组成的Data;
Distribution Head:一般配置在一个Frame的先头部分,记载此Frame中各Table 或List的位置和大小的部分。
Kiwi格式中的数据类型:
N:自然数型,0~filed 所规定的最大长,如是两个字节的N型,则表示的范围是0~65536;
I:整数型,补码型表示的整型范围;
C:字符串型;
CC:字符串型,用来表示日文字符;日文字符一般由两个字节组成;
D:表示从0到Field长规定的最大值的2倍。如果是两个字节的D型,则表示的值得最大可能是131068(值为0~65534)。
SWS:表示从0到Field长规定的最大值的2倍。如果是两个字节的D型,则表示的值得最大可能是131070。
LWS:表示从0到Field长规定的最大值的4倍。如果是两个字节的LWS型,则表示的值得最大可能是262140。
PID:ParcelID 番号