DEM数据转成ascii码之后,求填挖方的C代码或C++代码
时间: 2023-11-30 08:03:03 浏览: 71
以下是计算DEM数据转换为ASCII码之后的填挖方的C++代码示例:
```cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main() {
// 读取文件
ifstream inFile("DEM_data.asc");
if (!inFile) {
cerr << "Error: cannot open file!" << endl;
return 1;
}
// 读取DEM数据的头文件信息
string line;
getline(inFile, line); // 忽略第一行
getline(inFile, line);
int numCols, numRows;
double xllCorner, yllCorner, cellSize, noDataValue;
stringstream ss(line);
ss >> numCols >> numRows >> xllCorner >> yllCorner >> cellSize >> noDataValue;
// 计算填挖方
double cutVolume = 0.0;
double fillVolume = 0.0;
double elevation, baseElev;
for (int i = 0; i < numRows; ++i) {
for (int j = 0; j < numCols; ++j) {
inFile >> elevation;
if (elevation != noDataValue) { // 如果不是缺失值
if (i == 0 && j == 0) { // 如果是左下角
baseElev = elevation; // 基准高程为左下角高程
} else {
double deltaElev = elevation - baseElev; // 计算高程差
if (deltaElev > 0) { // 如果高程差为正,则为填方
fillVolume += deltaElev * cellSize * cellSize; // 计算填方体积
} else { // 否则为挖方
cutVolume += (-deltaElev) * cellSize * cellSize; // 计算挖方体积
}
}
}
}
}
inFile.close();
// 输出结果
cout << "The cut volume of the DEM data in ASCII format is " << cutVolume << endl;
cout << "The fill volume of the DEM data in ASCII format is " << fillVolume << endl;
return 0;
}
```
其中,"DEM_data.asc"是DEM数据转换为ASCII码后的文件名。代码中,首先读取了DEM数据的头文件信息,包括栅格列数、行数、左下角坐标、栅格单元大小和缺失值等信息。然后,对于每个栅格单元,读取其高程值,计算其与左下角高程的高程差,如果高程差为正,则为填方,计算填方体积;否则为挖方,计算挖方体积。最后输出结果。
阅读全文