shp系列(四)——利用C++进行Shx文件的读(打开)
发布日期:2022-02-10 11:37:02 浏览次数:44 分类:技术文章

本文共 2084 字,大约阅读时间需要 6 分钟。

1.shx文件的基本情况

shx文件又叫索引文件,主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件的初始位置的偏移量。通过索引文件可以很方便地在坐标文件中定位到指定目标的坐标信息。

 

2.shx文件的组成

索引文件也是由头文件和实体信息两部分构成,其中文件头部分是一个长度固定(100 bytes)的记录段,其内容与坐标文件的文件头基本一致(FileLength指shx文件的FileLength)。它的实体信息以记录为基本单位,每一条记录包括偏移量(offset)和记录段长度(Content Length)两个记录项。

2.1.shx文件文件头

索引文件文件头的组织形式与主文件文件头的描述是一样的,除了FileLength,其他的和shp文件文件头一样。

 

2.2 shx文件实体信息

它的实体信息以记录为基本单位,每一条记录包括偏移量(offset)和记录段长度(Content Length)两个记录项,它们的位序都是big,两个记录项都是int型。

  • 第一条记录的位移量就是头文件的长度,头文件字节数为100,所以第一个位移量为100/2 = 50。
  • 记录长度与shp文件中记录一一对应。

3.读取shx的代码

void readShx(CString filename){	//****读取shp、dbf之后打开shx文件	int n = filename.ReverseFind('.');	filename = filename.Left(n);	filename = filename + ".shx";	FILE* m_ShxFile_fp;       //Shx文件指针  	if ((m_ShxFile_fp = fopen(filename, "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_ShxFile_fp);	FileCode = OnChangeByteOrder(FileCode);	for (int i = 0; i<5; i++)		fread(&Unused, sizeof(int), 1, m_ShxFile_fp);	fread(&FileLength, sizeof(int), 1, m_ShxFile_fp);	FileLength = OnChangeByteOrder(FileLength);       //FileLength为shx文件的长度	fread(&Version, sizeof(int), 1, m_ShxFile_fp);	fread(&ShapeType, sizeof(int), 1, m_ShxFile_fp);	fread(&Xmin, sizeof(double), 1, m_ShxFile_fp);	fread(&Ymin, sizeof(double), 1, m_ShxFile_fp);	fread(&Xmax, sizeof(double), 1, m_ShxFile_fp);	fread(&Ymax, sizeof(double), 1, m_ShxFile_fp);	fread(&Zmin, sizeof(double), 1, m_ShxFile_fp);	fread(&Zmax, sizeof(double), 1, m_ShxFile_fp);	fread(&Mmin, sizeof(double), 1, m_ShxFile_fp);	fread(&Mmax, sizeof(double), 1, m_ShxFile_fp);	//****读取索引文件头的内容 结束	//****读取实体信息	int Offset, ContentLength;	while ((fread(&Offset, sizeof(int), 1, m_ShxFile_fp) != 0)) {		fread(&ContentLength, sizeof(int), 1, m_ShxFile_fp);		Offset = OnChangeByteOrder(Offset);                   //转化为十进制		ContentLength = OnChangeByteOrder(ContentLength);     //转化为十进制	}}

4.总结

至此,Shx文件读取方式也介绍完了。接下来三篇分别介绍Shp、Dbf、Shx的写(创建)。

转载地址:https://blog.csdn.net/Fan_z_0802/article/details/85130592 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:shp系列(三)——利用C++进行DBF文件的读(打开)
下一篇:shp系列(五)——利用C++进行shp文件的写(创建)

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月05日 10时28分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

如何实现java文档注释_JavaDoc注释与帮助说明文档 2019-04-21
Java一亿电话号码去重_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap... 2019-04-21
java判断ipv6地址类型_IPv6地址类型与格式 2019-04-21
linux java jdk_linux安装JDK 2019-04-21
java的showcase_java – 如何在Eclipse中导入ShowcaseView? 2019-04-21
JAVA中math的作用_Java中Random 和 Math 的概述及使用(二十六) 2019-04-21
mysql排序rank_MySQL_实现组内排序-Oracle中的rank()函数的功能 2019-04-21
vim自定义html,html - 寻找一种使用VIM在HTML中直接生成漂亮代码段的方法 - 堆栈内存溢出... 2019-04-21
python时间序列因果检验_用python做时间序列预测八:Granger causality test(格兰杰因果检验)... 2019-04-21
python numpy 函数详解_python使用numpy中的size()函数实例用法详解 2019-04-21
java spring上传文件_Java Spring文件上传,Java文件上传,Java通用文件上传 2019-04-21
linux 模拟键盘输入到进程,Linux 下模拟键盘输入 2019-04-21
linux服务器上已安装R 用户下载R包,R语言安装R package的2种方法 2019-04-21
linux 7 磁盘空间太小,Linux下磁盘保留空间的调整,解决df看到的空间和实际磁盘大小不一致的问题... 2019-04-21
linux下mysql 备份方法,Linux下mysql数据库备份方法小结 2019-04-21
bootstrap 页面垂直居中_iframe中如何让layer提示框显示在垂直居中的位置 2019-04-21
肺部ct重建_胸片检查容易漏诊肺癌,去年正常今年晚期常发生,体检一定要做CT... 2019-04-21
3dmax如何拆分模型_3D建模大佬如何制作出惊艳四方的游戏建模,看完这篇文章我知道了... 2019-04-21
x86so文件装换成arm64位_64位系统正式发布说明及介绍!! 2019-04-21
for循环中取出最大最小 累加_LeetCode之长度最小的子数组 2019-04-21