⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transform.cpp

📁 DEM格式之间的转换
💻 CPP
字号:
#include <stdio.h>
#include <iostream.h>



void findMinMax(double array[],int size,double &min,double &max) //求dem数组的最大最小值 
{
	int i;
	min=max=array[0];
	for(i=1;i<size;i++)
	{
		if(array[i]<min)
		 min=array[i];
		else if(array[i]>max) 
		 max=array[i];
	}
}
void main()
{
	int i,j;
	char dataType[100],dataUnit; //dem格式的文件类型命名
	float dataVer,dataAlpha,dataCom;
	double data_x0,data_y0,data_DX,data_DY;
	int data_Row,data_Col,dataHzoom;
//读dem文件
	FILE *fp;
	fp=fopen("SL50.dem","r");
	if(fp==NULL)
	{
		cout<< "can't open the DEM datafile!" <<endl;
		return;
	}
	fscanf(fp,"%s %f %c %f %f %lf %lf %lf %lf %d %d %d ",
			dataType,&dataVer,&dataUnit,&dataAlpha,&dataCom,
			&data_x0,&data_y0,&data_DX,&data_DY,
			&data_Row,&data_Col,&dataHzoom);
//计算grd格式的各参数
	double DEM_x0,DEM_y0,Xend,Yend;
	double Hmax,Hmin;
	DEM_y0=data_x0;
	Yend=data_x0+data_DX*(data_Col-1);
	DEM_x0=data_y0-data_DY*(data_Row-1);
	Xend=data_y0;
    double *DEM;
	DEM = new double[data_Col*data_Row];
        if(DEM==NULL) 
		{
			cout<<"内存不足!";
			return;
		}
		for(i=0;i<data_Row*data_Col;i++)
		
        {
			Hmin=Hmax=100;
			double tmp;
			fscanf(fp,"%lf",&tmp);
			if(tmp==-99999)
				DEM[i]=-999.99;
			else
		        DEM[i]=tmp/dataHzoom;
       
		} 
		double *DEM_copy;
		DEM_copy = new double[data_Col*data_Row];
		long int size=0;
		for(i=0;i<data_Row*data_Col;i++)
		{
			    
			if(DEM[i]!=-999.99&&DEM[i]>0)
			{
				DEM_copy[size]=DEM[i];
			    size++;
			}
		} 
		findMinMax(DEM_copy,size,Hmin,Hmax); //dem高程最大最小值
		delete DEM_copy;
		fclose(fp);
	//转化到grd格式下输出文件
		FILE *fp1;
		fp1=fopen("SL50.grd","w");
	if(fp1==NULL)
	{
		cout<< "can't open the DEM datafile!" <<endl;
		return;
	}
   

	fprintf(fp1,"%s\n%d %d\n%.4lf %.4lf\n%.4lf %.4lf\n%.2lf %.2lf\n",
            "DSAA",data_Col,data_Row,
            DEM_y0,Yend,
            DEM_x0,Xend,
			Hmin,Hmax);
/*			 for(j=0;j<data_Row*data_Col;j++)
	         
			{
				//int num=1;
				fprintf(fp1,"%.0lf ",DEM[j]);
				if((j+1)%10==0) 
						fprintf(fp1,"\n");
				if((j+1)%data_Col==0) 
						fprintf(fp1,"\n");
			    //num++;
			}
*/
		for(i=0;i<data_Row;i++)
		{
			for(j=0;j<data_Col;j++)
			{
				fprintf(fp1,"%.6lf ",DEM[i*data_Col+j]);
				if((j+1)%10==0) 
						fprintf(fp1,"\n");
			}
		fprintf(fp1,"\n");
		}
		

				delete DEM;
				fclose(fp1);

				printf("Over");
}
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -