shp文件中polyline是什么_shp文件的读取

本文详细介绍了GIS Shapefile格式,包括它的组成部分和文件结构。重点讨论了.shp文件中的polyline类型,以及如何使用C++代码进行读取操作。内容涵盖文件头解析、坐标数据处理和属性信息的DBF文件读取。文章还提供了源代码示例,展示了如何读取和处理线型几何对象。
摘要由CSDN通过智能技术生成

首先了解一下shp文件的一些简单知识

Shapefile文件是美国环境系统研究所(ESRI)所研制的GIS文件系统格式文件,是工业标准的矢量数据文件。

Shapefile将空间特征表中的非拓扑几何对象和属性信息存储在数据集中,特征表中的几何对象存为以坐标点集表示的图形文件—SHP文

件,Shapefile文件并不含拓扑(Topological)数据结构。一个Shape文件包括三个文件:一个主文件(*.shp),一个索引文件

(*.shx),和一个dBASE(*.dbf)表。主文件是一个直接存取,变长度记录的文件,其中每个记录描述构成一个地理特征(Feature)的所

有vertices坐标值。在索引文件中,每条记录包含对应主文件记录距离主文件头开始的偏移量,dBASE表包含SHP文件中每一个Feature的特

征属性,表中几何记录和属性数据之间的一一对应关系是基于记录数目的ID。在dBASE文件中的属性记录必须和主文件中的记录顺序是相同的。图形数据和属

性数据通过索引号建立一一对应的关系。

Shapefile中坐标文件(.shp)由固定长度的文件头和接着的变长度空间数据记录组成。文件头由100字节的说明信息组成的,主要

说明文件的长度、Shape类型、整个Shape图层的范围等等,这些信息构成了空间数据的元数据。在导入空间数据时首先要读入文件头获取Shape文件

的基本信息,并以此信息为基础建立相应的元数据表。而变长度空间数据记录是由固定长度的记录头和变长度记录内容组成,其记录结构基本类似,每条记录都有记

录头和记录内容组成(空间坐标对)。记录头的内容包括记录号(Record Number)和坐标记录长度(Content

Length)两个记录项,Shapefile文件中的记录号都是从1开始的,坐标记录长度是按16位字来衡量的。记录内容包括目标的几何类型

(ShapeType)和具体的坐标记录(X,Y),记录内容因要素几何类型的不同,其具体的内容和格式都有所不同。对于具体的记录主要包括空Shape

记录,点记录,线记录和多边形记录。

属性文件(.dbf)用于记录属性信息。它是一个标准的DBF文件,也是由头文件和实体信息两部分构成。其中文件头部分的长度是不定长的,

它主要对DBF文件作了一些总体说明,其中最主要的是对这个DBF文件的记录项的信息进行了详细的描述,比如对每个记录项的名称,数据类型,长度等信息都

有具体的说明。属性文件的实体信息部分就是一条条属性记录,每条记录都是由若干个记录项构成,因此只要依次循环读取每条记录就可以了。

索引文件(.shx)主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件的文件头的偏移量。通过索引文件可以

很方便地在坐标文件中定位到指定目标地坐标信息。索引文件也是由文件头和实体信息两部分构成的,其中文件头部分是一个长度固定(100

bytes)的记录段,其内容与坐标文件的文件头基本一致。它的实体信息以记录为基本单位,每一条记录包括偏移量(Offset)和记录段长度

(Content Length)两个记录项。

接下来我们再看一下代码(c++):

SHP文件的读取

[cpp:nogutter] view plaincopy

FeatureClass* CGISMapDoc::ImportShapeFileData(FILE* fpShp,FILE* fpDbf )

{

//读Shp文件头开始

intfileCode = -1;

intfileLength = -1;

intversion = -1;

intshapeType = -1;

fread(&fileCode , sizeof(int) , 1 , fpShp) ;

fileCode = ReverseBytes(fileCode) ;

if(fileCode != 9994)

{

CString strTemp ;

strTemp.Format(" WARNING filecode %d ", fileCode );

AfxMessageBox(strTemp);

}

for(inti = 0 ; i 

fread(&fileCode , sizeof(int) , 1 , fpShp) ;

fread(&fileLength , sizeof(int) , 1 , fpShp) ;

fileLength = ReverseBytes(fileLength) ;

fread(&version , sizeof(int) , 1 , fpShp) ;

fread(&shapeType , sizeof(int) , 1 , fpShp) ;

doubletempOriginX , tempOriginY ;

fread( &tempOriginX , sizeof(double) , 1 , fpShp ) ;

fread( &tempOriginY , sizeof(double) , 1 , fpShp ) ;

doublexMaxLayer , yMaxLayer ;

fread( &xMaxLayer , sizeof(double) , 1 , fpShp ) ;

fread( &yMaxLayer , sizeof(do

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值