用dem数据 c语言 填挖方算法
时间: 2024-02-12 13:02:47 浏览: 68
DEM.rar_DEM_dem qt_dem数据_dem格式
5星 · 资源好评率100%
要使用DEM数据进行填挖方算法,需要先读取DEM数据文件,然后根据DEM数据计算每块土地的深度来确定是挖掉土方还是填方。下面是使用C语言实现填挖方算法并利用DEM数据的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int rows; // 行数
int cols; // 列数
float cellSize; // 栅格单元大小
float nodataValue; // 无效值
float *data; // DEM数据数组
} DEM;
// 读取DEM数据
void readDEM(char* fileName, DEM* dem)
{
FILE* fp = fopen(fileName, "rb");
if (fp == NULL)
{
printf("无法打开DEM数据文件 %s\n", fileName);
exit(1);
}
// 读取DEM文件头信息
fread(&(dem->cols), sizeof(int), 1, fp);
fread(&(dem->rows), sizeof(int), 1, fp);
fread(&(dem->cellSize), sizeof(float), 1, fp);
fread(&(dem->nodataValue), sizeof(float), 1, fp);
// 读取DEM数据
dem->data = (float*)malloc(sizeof(float) * dem->rows * dem->cols);
fread(dem->data, sizeof(float), dem->rows * dem->cols, fp);
fclose(fp);
}
// 计算每块土地的挖填方量
void calculateExcavationAndEmbankment(DEM* dem, float depth, float* excavation, float* embankment)
{
int i, j;
float V, sum = 0.0;
for (i = 0; i < dem->rows - 1; i++)
{
for (j = 0; j < dem->cols - 1; j++)
{
float z1 = dem->data[i * dem->cols + j];
float z2 = dem->data[i * dem->cols + j + 1];
float z3 = dem->data[(i + 1) * dem->cols + j];
float z4 = dem->data[(i + 1) * dem->cols + j + 1];
float zmin = z1;
if (z2 < zmin) zmin = z2;
if (z3 < zmin) zmin = z3;
if (z4 < zmin) zmin = z4;
float d = depth - zmin;
if (d > 0) // 深度为正表示挖掉了土方
{
V = dem->cellSize * dem->cellSize * d;
sum -= V;
}
else if (d < 0) // 深度为负表示填方
{
V = dem->cellSize * dem->cellSize * (-d);
sum += V;
}
}
}
*excavation = -sum;
*embankment = sum;
}
int main()
{
DEM dem;
float depth, excavation, embankment;
char fileName[256];
printf("请输入DEM数据文件名:");
scanf("%s", fileName);
readDEM(fileName, &dem);
printf("请输入深度:");
scanf("%f", &depth);
calculateExcavationAndEmbankment(&dem, depth, &excavation, &embankment);
printf("挖方量为:%.2f,填方量为:%.2f\n", excavation, embankment);
free(dem.data);
return 0;
}
```
该代码首先提示用户输入DEM数据文件名,然后读取DEM数据文件并将其存储在DEM结构体中。接下来提示用户输入深度,然后根据DEM数据计算每块土地的深度来确定是挖掉土方还是填方,并计算总的挖填方量。最后输出挖填方量并释放DEM数据数组所占用的内存。
阅读全文