获取shapefile文件小包围矩形的c++程序
作者:网络转载 发布时间:[ 2014/2/28 9:35:56 ] 推荐标签:c++ shapefile
这是一个获取shapefile图形小包围盒的c++程序。这个程序不仅读取了shapefile,还然你明白如何读取其他文件。例如.dbf, .exe, .png等。在此之前你应该了解位、字节顺序以及字节向其他数据类型转换并且更为重要的是你要读取的文件的格式。
一个shapefile存储了非拓扑几何图形。ESRI shapfile主要包含3 个文件,即,shp, .shx 和.dbf文件。为了获取文件中记录的图形的小包围盒我们要考虑shp的格式。具体参看ESRI Shapefile的技术文档。 .shp 有3个部分,即文件头、记录的头、记录的内容。文件头保存了小包围盒的内容。你可以用C++程序去读取文件头,以下是实现代码:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cstdint>
using namespace std;
class ByteConverter
{
public:
//以BigEndian格式存储的32个位域转换为正数。需要位操作运算支持,例如:左移和按位或操作
static int32_t bigEndianIntRead(char *fileBuf, int startIndex)
{
return (((fileBuf[startIndex+0]&0xff)<<24)|
((fileBuf[startIndex+1]&0xff)<<16)|
((fileBuf[startIndex+2]&0xff)<<8)|
((fileBuf[startIndex+3]&0xff)));
}
// 以BigEndian格式存储的32位数值转换为整型。
static int32_t littleEndianIntRead(char *fileBuf, int startIndex)
{
return (((fileBuf[startIndex+3]&0xff)<<24)|
((fileBuf[startIndex+2]&0xff)<<16)|
((fileBuf[startIndex+1]&0xff)<<8)|
((fileBuf[startIndex+0]&0xff)));
}
// 以BigEndian格式存储的64位或8个字节转换为整型
static double littleEndianDoubleRead(char *fileBuf, int startIndex)
{
double convert;
char *add;
int j;
add = new char();
j=-1;
for (int i=startIndex; i<startIndex+8; i++)
{
j++;
add[j] = fileBuf[i];
}
convert = *reinterpret_cast<double *const>(add);
return convert;
}
};
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11