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://www.cnblogs.com/fan-0802-WHU/p/10150970.html

shp系列(四)——利用C++进行Shx文件的读(打开)相关推荐

  1. Java字节流读取shp_shp系列(四)——利用C++进行Shx文件的读(打开)

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

  2. shp系列(七)——利用C++进行Shx文件的写(创建)

    之前介绍了Shp文件和Dbf的写(创建),最后来介绍一下Shx文件的写(创建).Shx文件是三者之中最简单的一个,原因有两个:第一是Shx文件的头文件与Shp文件的头文件几乎一样(除了FileLeng ...

  3. python常识系列07-->python利用xlwt写入excel文件

    前言  读书之法,在循序而渐进,熟读而精思.--朱熹  抽空又来写一篇,毕竟知识在于分享!  一.xlwt模块是什么 python第三方工具包,用于往excel中写入数据:(ps:只能创建新表格,不能 ...

  4. Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解...

    MainActivity如下: package cc.c;import android.app.Activity; import android.os.Bundle; import android.o ...

  5. shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言

    博客背景和目的 最近在用C++写一个底层的东西,需要读取和创建shp文件.虽然接触shp文件已经几年了,但是对于shp文件内到底包含什么东西一直是一知半解.以前使用shp文件都是利用软件(如ArcGI ...

  6. 【反编译系列】四、反编译so文件(IDA_Pro)

    概述 安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发.使用NDK开发能够编译c/c ...

  7. TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式

    TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式 目录 转换代码 转换后的结果 转换代码 python data_convert2tfr ...

  8. C#不用ArcEngine,生成Shp文件(五)---------读取.shx文件和生成.shx文件

    这一篇来写一下.shx文件的读取跟生成.测试数据下载地址为:http://download.csdn.net/detail/gis0911178/9650967 在第一篇时候有介绍. 索引文件(.sh ...

  9. 【python脚本系列】利用mido库解析midi文件

    [python脚本系列]利用mido库解析midi文件       Hallo大家好~~我是Lampard猿奋       昨天写了关于Midi数字化乐器接口的文章,介绍了midi是一组代表音乐参数( ...

  10. 利用Python读取fasta文件并进行一系列操作(上)

    利用Python读取fasta文件并进行一系列操作(上) 概述 语言:python3.8 模块:pysam collections 可选:jupyter 整体思路:将fasta格式的基因原始数据处理为 ...

最新文章

  1. jquery ajaxSubmit
  2. 机器学习——01、机器学习的数学基础1 - 数学分析
  3. 云计算时代,互联网金融背后的想象空间
  4. [渝粤教育] 西南科技大学 高频电子线路 在线考试复习资料2021版
  5. 【算法图解|4】JavaScript 如何求数组的最大值和最小值
  6. 单/双中括号与测试条件
  7. springcache使用笔记003_注释驱动的 Spring cache 基本原理,注意和限制,@CacheEvict 的可靠性问题
  8. Hadoop 的常用组件一览
  9. paip.jdk1.4 1.5(5.0) 1.6(6.0) 7.0 8.0特点比较与不同
  10. mate7 android升级包下载,华为mate7 刷机包
  11. 重写JavaScript特效大全 | 时钟显示在任意指定位置---01
  12. 数据库三范式和BCNF范式的理解:生动举例
  13. Nordic nRF52832申报要素
  14. PB函数大全【转自 http://blog.csdn.net/xiaoxian8023 】
  15. 博客园技术系列文章目录
  16. 二维数组与指向指针的指针
  17. pip 在windows下的更新升级
  18. 后台接口被访问到,前台控制台却提示404
  19. 夏令时引起的时间问题
  20. 任天堂服务器维护12月1,《怪物猎人:崛起》太火爆!任天堂服务器紧急维护!会是独占游戏么?...

热门文章

  1. Java降落伞_使用DJI Onboard SDK进行降落伞部署
  2. 计算机网络专业运动会入场式,高校运动会方阵入场式花样百出
  3. RK3128-android6.0-关于支持Google DRM Widevine问题
  4. 计算机潮流计算代码,潮流计算代码c++.doc
  5. 聊一聊关于“元宇宙”涉及的前端技术
  6. js中常遇到 切割截取字符串的几种方法
  7. python中文版下载32位-Python 2 32位
  8. lammps建模_lammps建模
  9. 通过Universal Link进行微信分享
  10. 再生核希尔伯特空间和核方法