用已有DEM数据的ascii码txt文件,求填挖方的C代码或C++代码
时间: 2023-11-30 21:03:03 浏览: 196
以下是计算已有DEM数据的ASCII码txt文件的填挖方的C++代码示例:
```cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main() {
// 读取文件
ifstream inFile("DEM_data.txt");
if (!inFile) {
cerr << "Error: cannot open file!" << endl;
return 1;
}
// 读取DEM数据
vector<vector<double>> elevations; // 保存DEM数据
double elevation;
string line;
while (getline(inFile, line)) {
istringstream iss(line);
vector<double> row;
while (iss >> elevation) {
row.push_back(elevation);
}
elevations.push_back(row);
}
inFile.close();
// 计算填挖方
double cutVolume = 0.0;
double fillVolume = 0.0;
double cellSize = 1.0; // 假设栅格单元大小为1
double noDataValue = -9999.0; // 假设缺失值为-9999
double baseElev;
for (int i = 0; i < elevations.size(); ++i) {
for (int j = 0; j < elevations[i].size(); ++j) {
elevation = elevations[i][j];
if (elevation != noDataValue) { // 如果不是缺失值
if (i == elevations.size() - 1 && j == 0) { // 如果是左下角
baseElev = elevation; // 基准高程为左下角高程
} else {
double deltaElev = elevation - baseElev; // 计算高程差
if (deltaElev > 0) { // 如果高程差为正,则为填方
fillVolume += deltaElev * cellSize * cellSize; // 计算填方体积
} else { // 否则为挖方
cutVolume += (-deltaElev) * cellSize * cellSize; // 计算挖方体积
}
}
}
}
}
// 输出结果
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.txt"是已有DEM数据的ASCII码txt文件名。代码中,首先读取了DEM数据,将其保存在一个二维向量中。然后,对于每个栅格单元,读取其高程值,计算其与左下角高程的高程差,如果高程差为正,则为填方,计算填方体积;否则为挖方,计算挖方体积。最后输出结果。需要注意的是,栅格单元大小和缺失值需要根据实际情况进行设置。
阅读全文