这是一个获取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;
}
};