- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
shp文件详细格式
2.2.2????????? Shape files数据说明
Shape files是ESRI提供的一种矢量数据格式,它没有拓扑信息,一个Shape files由一组文件组成,其中必要的基本文件包括坐标文件(.shp)、索引文件(.shx)和属性文件(.dbf)三个文件。
1.????????
坐标文件(.shp)用于记录空间坐标信息。它由头文件和实体信息两部分构成(如图2.1所示)。
1)????? 坐标文件的文件头
坐标文件的文件头是一个长度固定(100 bytes)的记录段,一共有9个int型和7个double型数据,主要记录内容见表2.2。
文件头 记录头 记录内容 记录头 记录内容 记录头 记录内容 记录头 记录内容 ……
……
记录头 记录内容 图2.1 坐标文件的结构
起始位置 名称 数值 类型 位序 0 File Code 9994 Integer big 4 Unused 0 Integer big 8 Unused 0 Integer big 12 Unused 0 Integer big 16 Unused 0 Integer big 20 Unused 0 Integer big 24 文件长度 文件的实际长度 Integer big 28 版本号 1000 Integer Little 32 几何类型 表示这个Shapefile文件所记录的空间数据的几何类型 Integer Little 36 Xmin 空间数据所占空间范围的X方向最小值 Double Little 44 Ymin 空间数据所占空间范围的Y方向最小值 Double Little 52 Xmax 空间数据所占空间范围的X方向最大值 Double Little 60 Ymax 空间数据所占空间范围的Y方向最大值 Double Little 68* Zmin 空间数据所占空间范围的Z方向最小值 Double Little 76* Zmax 空间数据所占空间范围的Z方向最大值 Double Little 84* Mmin 最小Measure值 Double Little 92* Mmax 最大Measure值 Double Little 表2.2 shapefiles 头文件表
注:最后4个加星号特别标示的四个数据只有当这个Shapefile文件包含Z方向坐标或者具有Measure值时才有值,否则为0.0。所谓Measure值,是用于存储需要的附加数据,可以用来记录各种数据,例如权值、道路长度等信息。
(1)??? 位序
细心的读者会注意到表2.2中的数值的位序有Little和big的区别,对于位序是big的数据我们在读取时要小心。通常,数据的位序都是Little,但在有些情况下可能会是big,二者的区别在于它们位序的顺序相反。一个位序为big的数据,如果我们想得到它的真实数值,需要将它的位序转换成Little即可。转换原理非常简单,就是交换字节顺序,下面是作者实现的在两者间进行转换的程序,代码如下:
//位序转换程序
unsigned long OnChangeByteOrder (int indata)
{
?????? char ss[8];
?????? char ee[8];
?????? unsigned long val = unsigned long(indata);
?????? _ultoa( val, ss, 16 );//将十六进制的数(val)转到一个字符串(ss)中
?????? int i;
?????? int length=strlen(ss);
?????? if(length!=8)
?????? {
????????????? for(i=0;i8-length;i++)
???????????????????? ee[i]=0;
????????????? for(i=0;ilength;i++)
???????????????????? ee[i+8-length]=ss[i];
????????????? for(i=0;i8;i++)
???????????????????? ss[i]=ee[i];
?????? }
?????? ////******进行倒序
?????? int t;
?????? t????? =ss[0];
?????? ss[0]?????? =ss[6];
?????? ss[6]?????? =t;
?????? t????? =ss[1];
?????? ss[1]?????? =ss[7];
?????? ss[7]?????? =t;
?????? t????? =ss[2];
?????? ss[2]???
文档评论(0)