对shapefile文件进行读写绘制实验报告概述

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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程序代码段设计,主要函数部分如图所示:

相关文档
最新文档