没有合适的资源?快使用搜索试试~ 我知道了~
ShapeFile文件解析
5星 · 超过95%的资源 需积分: 50 104 下载量 161 浏览量
2012-07-10
10:04:44
上传
评论 2
收藏 57KB DOCX 举报
温馨提示
试读
17页
shapefile文件解析 .shp、.shx、.dbf 文件头及文件主体
资源推荐
资源详情
资源评论
数据说明
是 提供的一种矢量数据格式,它没有拓扑信息,一个 由一组文
件组成,其中必要的基本文件包括坐标文件( )、索引文件( )和属性文件(
)三个文件。
坐标文件的结构说明
坐标文件 用于记录空间坐标信息。它由头文件和实体信息两部分构成(如图 所
示)。
坐标文件的文件头
坐标文件的文件头是一个长度固定 的记录段,一共有 个 型和 个
型数据,主要记录内容见表 。
文件头
记录头 记录内容
记录头 记录内容
记录头 记录内容
记录头 记录内容
图 坐标文件的结构
起始位置 名称 数值 类型 位序
! "# $"
! % "# $"
& % "# $"
% "# $"
' % "# $"
% "# $"
!
文件长度 文件实际长度
"# $"
&
版本号
"# ()
*
几何类型 表 示 这 个
文件所
记录的空间数据
的几何类型
"# ()
*' +,
空间数据所占空
间范围的 +方向
最小值
- ()
!! .,
空间数据所占空
间范围的 .方向
最小值
- ()
/ +,
空间数据所占空
间范围的 +方向
最大值
- ()
' .,
空间数据所占空
间范围的 . 方向
最大值
- ()
'&0 1,
空间数据所占空
间范围的 1方向
- ()
最小值
'0 1,
空间数据所占空
间范围的 1方向
最大值
- ()
&!0 2,
最 小 2#
值
- ()
0 2,
最 大 2#
值
- ()
表 头文件表
注:最后 !个加星号特别标示的四个数据只有当这个 文件包含 1方向 坐标或者
具有 2#值时才有值,否则为 。所谓 2#值,是用于存储需要的 附加数据,
可以用来记录各种数据,例如权值、道路长度等信息。
位序
细心的读者会注意到表 中的数值的位序有 ()和 "的区别,对于位序是 "的数据
我们在读取时要小心。通常,数据的位序都是 (),但在有些情况下可能会是 ",二者
的区别在于它们位序的顺序相反。一个位序为 "的数据,如果我们想得到它的真实数值,
需要将它的位序转换成 ()即可。转换原理非常简单,就是交换字节顺序,下面是作者实
现的在两者间进行转换的程序,代码如下:
33位序转换程序
""4 "$4##
5
6#7&89
6#7&89
"":;""9
<:=='933将十六进制的数 :转到一个字符串 中
9
";#9
">;&
5
#;9?&@"9AA
78;BB9
#;9?"9AA
7A&@"8;789
#;9?&9AA
78;789
}
////****** 进行倒序
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] =ss[4];
ss[4] =t;
t =ss[3];
ss[3] =ss[5];
ss[5] =t;
////******
//****** 将存有十六进制数 (val) 的字符串 (ss) 中的十六进制数转成十进制数
int value=0;
for(i=0;i<8;i++)
{
int k;
CString mass;
mass=ss[i];
if(ss[i]=='a' ||
ss[i]=='b' ||
ss[i]=='c' ||
ss[i]=='d' ||
ss[i]=='e' ||
ss[i]=='f')
k=10+ss[i]-'a';
else
sscanf(mass,"%d",&k);
value=value+int(k*pow(16,7-i));
}
return (value);
}
Shapefile 文件支持的几何类型( ShapeType )
Shapefile 文件所支持的几何类型如表 2.3 所示:
编号 几何类型
Null Shape (表示这个 Shapefile 文件不含坐标)
Point (表示 Shapefile 文件记录的是点状目标,但
不是多点)
*
PolyLine (表示 Shapefile 文件记录的是线状目
标)
/
Polygon (表示 Shapefile 文件记录的是面状目
标)
&
MultiPoint (表示 Shapefile 文件记录的是多点,
即点集合)
PointZ (表示 Shapefile 文件记录的是三维点状目
标)
*
PolyLineZ (表示 Shapefile 文件记录的是三维线
状目标)
/
PolygonZ (表示 Shapefile 文件记录的是三维面状
目标)
&
MultiPointZ (表示 Shapefile 文件记录的是三维点
集合目标)
PointM (表示含有 Measure 值的点状目标)
*
PolyLineM (表示含有 Measure 值的线状目标)
/
PolygonM (表示含有 Measure 值的面状目标)
*&
MultiPointM (表示含有 Measure 值的多点目标)
*
MultiPatch (表示复合目标)
表 2.3shapefiles 文件支持的几何类型
对于一个不是记录 Null Shape 类型的 Shapefile 文件,它所记录的空间目标的几何类型必须一致,不能
在一个 Shapefile 文件中同时记录两种不同类型的几何目标。
读取坐标文件( .shp )的文件头的代码 如下:
void OnReadShp ( CString ShpFileName )
{
FILE* m_ShpFile_fp; //****Shp 文件指针
// 打开坐标文件
if((m_ShpFile_fp=fopen(ShpFileName,"rb"))==NULL)
{
return;
}
// 读取坐标文件头的内容开始
int FileCode;
int Unused;
int FileLength;
int Version;
int ShapeType;
double Xmin;
double Ymin;
double Xmax;
double Ymax;
double Zmin;
double Zmax;
double Mmin;
double Mmax;
fread(&FileCode, sizeof(int), 1,m_ShpFile_fp);
FileCode= OnChangeByteOrder(FileCode);
for(i=0;i<5;i++)
fread(&Unused,sizeof(int), 1,m_ShpFile_fp);
fread(&FileLength, sizeof(int), 1,m_ShpFile_fp);
FileLength = OnChangeByteOrder(FileLength);
fread(&Version, sizeof(int), 1,m_ShpFile_fp);
剩余16页未读,继续阅读
c2606050113
- 粉丝: 2
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页