我在使用C++编写解码shp文件的时候,前面的数据都能正常读取,但到了最后一份数据就出错
使用的解码规则是官方给的,几何类型是13,不带M属性的
bool SHP::readLineZData(ifstream &file, SHPLineZ &line_z)
{
ofstream fout("./out.txt");
file.seekg(100, ios::beg);
while (!file.eof())
{
file.read((char *)&line_z.index, sizeof(int));
line_z.index = bigtolitter(line_z.index);
file.read((char *)&line_z.length, sizeof(int));
line_z.length = bigtolitter(line_z.length);
file.read((char *)&line_z.Geo_Type, sizeof(int));
file.read((char *)&line_z.Xmin, sizeof(double));
file.read((char *)&line_z.Ymin, sizeof(double));
file.read((char *)&line_z.Xmax, sizeof(double));
file.read((char *)&line_z.Ymax, sizeof(double));
file.read((char *)&line_z.NL, sizeof(int));
file.read((char *)&line_z.NP, sizeof(int));
fout << line_z.index << '\t'
<< line_z.length << '\t'
<< line_z.Geo_Type << '\t'
<< line_z.Xmin << '\t'
<< line_z.Ymin << '\t'
<< line_z.Xmax << '\t'
<< line_z.Ymax << '\t'
<< line_z.NL << '\t'
<< line_z.NP << '\n';
line_z.Parts = new int[line_z.NL];
for (auto i = 0; i < line_z.NL; ++i)
{
file.read((char *)&line_z.Parts[i], sizeof(int));
fout << line_z.Parts[i] << '\t';
}
fout << '\n';
line_z.PointsXY = new Point[line_z.NP];
for (auto i = 0; i < line_z.NP; ++i)
{
file.read((char *)&line_z.PointsXY[i].x, sizeof(double));
file.read((char *)&line_z.PointsXY[i].y, sizeof(double));
fout << line_z.PointsXY[i].x << '\t'
<< line_z.PointsXY[i].y << '\n';
}
file.read((char *)&line_z.Zmin, sizeof(double));
file.read((char *)&line_z.Zmax, sizeof(double));
fout << line_z.Zmin << '\t'
<< line_z.Zmax << '\n';
line_z.PointsZ = new double[line_z.NP];
for (auto i = 0; i < line_z.NP; ++i)
{
file.read((char *)&line_z.PointsZ[i], sizeof(double));
fout << line_z.PointsZ[i] << '\n';
}
delete[] line_z.Parts;
delete[] line_z.PointsXY;
}
line_z.Parts = nullptr;
line_z.PointsXY = nullptr;
fout.close();
}
就会出现这样的读取结果,之前的单一的折线类型的读取也出现了这样的结果