对shapefile文件进行读写绘制实验报告概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
综合性实验报告
专业地理信息系统年级11级学号201130670225 姓名吴秀春时间2013年7月4日
一、实验名称:
设计程序,实现对ESRI的Shapefile格式文件进行读取和绘制,并实现相应的地图(图形)浏览功能。
二、实验目的:
考察学生对于课程的基础知识掌握程度,以及检验学生综合运用所学课程知识和技能分析问题,解决问题的能力,为后续课程有的放矢地开展与安排提供参考。
三、实验准备(数据与软件):
1.开发环境和测试数据
开发环境采用Visual studio ,开发语言为C#,实验测试数据为.shp 类型文件
2.相关文档阅读:
ESRI公开的Shapefile白皮书《ESRI Shapefile Technical Description》;IBM公开的DBF文件格式。
四、实验原理(方法):
通过进行文件的操作,把.shp文件读取出来,并且通过变量把文件的信息记录下来,通过面向对象的方法,实现对图形的绘制操作,从而实现整一个实验的主要内容。
五、内容与步骤:
1、了解shapefile的文件组织形式,以及各个组成部分的数据结构(1)一个.shp文件由文件头和记录组成。文件头大小为100个字节,其布局如下表:
* Unused, with value 0.0, if not Measured or Z type
注意其中的字节顺序,Big表示大尾(big endian)型字节顺序,即是高低位字节是反序的,主要适用于Sun® or Motorola®平
台,而Little表示小尾(little endian)型字节顺序,高低位字
节顺序不变,主要使用在PC or Intel®平台。在读取的字节为
Big时,需要进行字节顺序交换,才能得出正确的值。一个把
Big顺序转换为Little顺序的函数可以如下:
int Big2LittleEndian(int num)
{
int reverse; //返回结果
char bit0, bit1, bit2, bit3;
bit0 = (num & 0x000000ff);
bit1 = (num & 0x0000ff00) >> 8;
bit2 = (num & 0x00ff0000) >> 16;
bit3 = (num & 0xff000000) >> 24;
reverse = (bit0 << 24) | (bit1 << 16) | (bit2 << 8) | (bit3);
return reverse;
}
文件头中第32-35位字节为一个整型,其值反映了shapefile的图形对象类型,具体值对应含义如下:
第36-67个字节包含了图幅的范围大小。
(2)、每条记录由记录头和实体内容组成,记录头格式固定,具体组成如下所示:
记录头包含8个字节,0-3表示记录的顺序号,4-7表示记录实体自身的大小。
实体的内容根据对象类型不同而变化,需根据具体情况处理。
关于Shapefile的.shx文件的说明
.shx文件由文件头和记录组成,文件头与前述.shp文件一致,但需注意File Length字段的值不一样。而每条记录由2个整型组成,具体内容如下:
其中,offset表示该条记录在.shp文件中的字节位置,而Content Length 说明了记录的大小。
关于.DBF文件的说明
标准的DBF文件,是由头文件和实体信息两部分构成(如图1所示)。
……
……
图1 DBF文件的结构
(1)、文件头部分
文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(表),其中最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。
文件(.dbf)的文件头
记录项信息描述
dbf文件中的数据类型
注意:记录项的数目在文件头中没有明确给出,但是可以根据第8-9字节的整型知道文件头的大小,减去其他的固定的字节数
(32),然后除以32就可以得出其值n。
(2)、实体信息
实体信息部分就是一条记录,每条记录都是由若干个记录项构成,因此只要依次循环读取每条记录就可以了。
2、系统功能需求分析:
根据要求,该程序必须满足最基本的三个功能,一个是能够对shpefile文件进行读取,另外两个分别是对文件属性的浏览还有就是绘制图形文件,所以在程序设计的过程之中,必须要让自己的系统能够满足这三个最基本的要求。
3、整个程序一共有六个模块,系统图如图所示:
本程序系统设计六个模块,分别是读取文件,查看文件属性信息,绘制图形,修改颜色,修改线宽和清空图形。模块图如图所示:
4、打开软件,新建windows 窗体项目,如图所示:
5、在FORM窗体上添加1个menustrip控件,6个label控件,1个penul控件,1个textbook控件,3个button控件,2个groupbox 控件并相应的修改部分控件enabled属性,将之初始化为flase。
如图所示:
6、为项目添加一个新的窗体form2,用来实现改变线条宽度的功能,结果如图所示:
7、为项目添加一个新的类,取名为helperclass。为即将开展的工作流程做好基础准备。如图所示:
8、编写代码,完善程序的功能。
(1)、heleperclass程序代码段设计,主要函数部分如图所示: