利用DEM数据计算填方挖方的C++代码
时间: 2023-11-28 12:04:13 浏览: 101
以下是利用DEM数据计算填方挖方的C++代码:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
// 读取DEM数据
vector<vector<double>> dem;
ifstream fin("dem.txt");
if (!fin) {
cout << "Cannot open file." << endl;
return 0;
}
int rows, cols;
fin >> rows >> cols;
dem.resize(rows, vector<double>(cols));
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
fin >> dem[i][j];
}
}
fin.close();
// 计算填方挖方
double cut = 0, fill = 0;
double cellSize = 1.0; // DEM数据单元格大小
for (int i = 0; i < rows - 1; i++) {
for (int j = 0; j < cols - 1; j++) {
double h1 = dem[i][j];
double h2 = dem[i][j + 1];
double h3 = dem[i + 1][j + 1];
double h4 = dem[i + 1][j];
double avgH1 = (h1 + h2 + h3 + h4) / 4.0;
double avgH2 = (h1 + h4) / 2.0;
double dH = avgH1 - avgH2;
if (dH > 0) {
fill += dH * cellSize * cellSize;
} else {
cut += fabs(dH) * cellSize * cellSize;
}
}
}
// 输出结果
cout << "Cut Volume: " << cut << endl;
cout << "Fill Volume: " << fill << endl;
return 0;
}
```
其中,`dem.txt` 是 DEM 数据的文件,格式为:
```
rows cols
h11 h12 h13 ... h1n
h21 h22 h23 ... h2n
...
hm1 hm2 hm3 ... hmn
```
其中,`rows` 和 `cols` 分别表示 DEM 数据的行数和列数,`hi,j` 表示 DEM 数据中第 i 行第 j 列的高程值。
阅读全文