// shapefile 头文件类,实现了描述shapefile头部所有字段的函数
class HeaderShapefile
{
public:
// 该类的函数将计算出shapefile众包围框的坐标
// 如x和y、小和大值同样z和m的大小值也可以获取
static double dimensionXmin(char *fileBuf, int startIndex)
{
return ByteConverter::littleEndianDoubleRead(fileBuf,startIndex);
}
static double dimensionYmin(char*fileBuf, int startIndex)
{
return ByteConverter::littleEndianDoubleRead(fileBuf, startIndex);
}
static double dimensionXmax(char*fileBuf, int startIndex)
{
return ByteConverter::littleEndianDoubleRead(fileBuf, startIndex);
}
static double dimensionYmax(char*fileBuf, int startIndex)
{
return ByteConverter::littleEndianDoubleRead(fileBuf, startIndex);
}
};
class SizeOfFile
{
public:
// 确定文件的大小
static long sizeOfFile(FILE *file)
{
long a,b;
a = ftell(file);
fseek(file, 0, 2);
b = ftell(file);
fseek(file, 1, 0);
return b;
}
};
int main()
{
int32_t filecodes, fileLength,shapeTypes,versions;
double xmin,ymin,xmax,ymax,mmin,mmax,zmin,zmax;
string shape;
char *filePath = "文件所在目录";
char *fileBuf;
FILE *file = NULL;
//rb模式打开,这样还可以测试一下文件是否存在或被读取
if ((file=fopen(filePath,"rb"))==NULL)
{
cout <<"无法打开指定文件"<<endl;
}
else
cout <<"成功打开指定文件"<<endl;
// 获取文件大小
long fileSize = SizeOfFile::sizeOfFile(file);
// 为整个文件分配内存
fileBuf = new char[fileSize];
//将文件读取到缓存中
fread(fileBuf, fileSize, 1, file);
//查看二进制文件的信息
cout<< "文件大小:"<< fileSize;
xmin = HeaderShapefile::dimensionXmin(fileBuf,36);
ymin = HeaderShapefile::dimensionYmin(fileBuf,44);
xmax = HeaderShapefile::dimensionXmax(fileBuf,52);
ymax = HeaderShapefile::dimensionYmax(fileBuf,60);
cout<<" /*************
shapefile的新包围盒***********/ ";
cout<<"X小值="<<xmin<<endl;
cout<<"Y小值="<<ymin<<endl;
cout<<"X大值="<<xmax<<endl;
cout<<"Y大值="<<ymax<<endl;
cin.get();
delete []fileBuf;
fclose(file);// 不要忘记
return 0;
//char keep_window_open = getchar();
}
  程序的输出结果如下: