shp系列(四)——利用C++进行Shx文件的读(打开)
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的写(创建)。
shp系列(四)——利用C++进行Shx文件的读(打开)的更多相关文章
- shp系列(七)——利用C++进行Shx文件的写(创建)
之前介绍了Shp文件和Dbf的写(创建),最后来介绍一下Shx文件的写(创建).Shx文件是三者之中最简单的一个,原因有两个:第一是Shx文件的头文件与Shp文件的头文件几乎一样(除了FileLeng ...
- shp系列(三)——利用C++进行DBF文件的读(打开)
1.DBF文件要点 DBF文件又叫属性文件,也叫dBASE文件,文件后缀是.dbf,实际上ArcGIS打开后的属性表就是DBF的信息.DBF文件遵循以下几个条件: 每个要素在表中必须要包含一个与之相对 ...
- python常识系列07-->python利用xlwt写入excel文件
前言 读书之法,在循序而渐进,熟读而精思.--朱熹 抽空又来写一篇,毕竟知识在于分享! 一.xlwt模块是什么 python第三方工具包,用于往excel中写入数据:(ps:只能创建新表格,不能修改表 ...
- Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解
MainActivity如下: package cc.c; import android.app.Activity; import android.os.Bundle; import android. ...
- Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息
MainActivity例如以下: package cc.c; import android.app.Activity; import android.os.Bundle; import androi ...
- shp系列(五)——利用C++进行shp文件的写(创建)
之前介绍了shp文件.dbf文件和shx文件的的读取,接下来将分别介绍它们的创建过程.一般来说,读和写的一一对应的,写出的文件就是为了保存数据供以后读取的.写的文件要符合shapefile的标准.之前 ...
- shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
博客背景和目的 最近在用C++写一个底层的东西,需要读取和创建shp文件.虽然接触shp文件已经几年了,但是对于shp文件内到底包含什么东西一直是一知半解.以前使用shp文件都是利用软件(如ArcGI ...
- shp系列(二)——利用C++进行shp文件的读(打开)
1.各数据类型及其字节数 BYTE 1; char 1; short 2; int 4; double 8; 2.位序big和little及其转换 对于位序是big的 ...
- C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
C#中的函数式编程:递归与纯函数(二) 在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...
随机推荐
- 【PL/SQL】匿名块、存储过程、函数、触发器
名词解释 子程序:PL/SQL的过程和函数统称为子程序. 匿名块:以DECLARE或BEGIN开始,每次提交都被编译.匿名块因为没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用. ...
- servlet-后台获取form表单传的参数
前台代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> & ...
- Type class-Typeclass-泛型基础上的二次抽象---随意多态
对泛型的类型添加约束,从而使泛型类型的变量具有某种通用操作. 再使用这些操作,参与到其它操作中. In computer science, a type class is a type system ...
- python 处理中文 读取数据库输出全是问号
ref:http://www.cnblogs.com/zhoujie/archive/2013/06/07/problem1.html 1.python连接mssql数据库编码问题 python一直对 ...
- 微信小程序开发常用方法
1.函数中访问data中的数据 _this.setData({ // 日历数据 signList: dataList, // 当前日期 todayDay: str }) 2.if判断 wx:if=&q ...
- javaee utf-8文件的转换
package Zy; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fil ...
- 记Python学习
上周学的Python,感觉有点忘了,现在回顾一下... 一.Python安装及测试:https://www.cnblogs.com/weven/p/7252917.html 例子: Python自带的 ...
- eoLinker GoKu Gateway 开源版 V2.1发布,加入UI管理系统等
GoKu API Gateway 是eoLinker旗下的开源版接口网关,支持OpenAPI与微服务管理,支持私有云部署,实现API转发.请求参数转换.数据校验等功能,提供图形化界面管理,能够快速管理 ...
- 设计模式 第一天 UML图,设计模式原则:开闭原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则,简单工厂模式
1 课程大纲 2 UML的概述 总结: UML unified model language 统一建模语言 一共有十种图: 类图 用例图 时序图 * 对象图 包图 组件图 部署图 协作图 状态图 (最 ...
- css画圆
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...