
shp系列(四)——利用C++进行Shx文件的读(打开)
发布日期:2022-02-10 11:37:02
浏览次数:31
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2023年05月30日 12时45分14秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
转个简单版JS 简体转繁体
2019-07-27 20:08:52
一些经常用到的Gemfile
2019-07-27 20:08:52
rails api 有用的链接
2019-07-27 20:08:51
linecache.rb:66 no such file to load -- require_relative
2019-07-27 20:08:50
Rails 3 - 3.1 用jquery代替prototype
2019-07-27 20:08:50
rails render partial 参数 变量说明
2019-07-27 20:08:49
Rails 3 的删除方法不能用了 delete put
2019-07-27 20:08:48
有关ruby load path
2019-07-27 20:08:48
Rails get put的一个区别
2021-09-29
ruby使用技巧
2021-09-29
jquery对于checkbox一些处理
2021-09-29
rails 3 generate scaffold 会用到
2021-09-29
ruby导出excel图
2021-09-29
macox mysql 5.5.10
2021-09-29
ruby 1.9 和 mongrel
2021-09-29
处理僵尸进程
2021-09-29
rake aborted! undefined method `task' for
2021-09-29
no such file to load --openssl
2021-09-29