欢迎来到天天文库
浏览记录
ID:37324581
大小:138.31 KB
页数:7页
时间:2019-05-21
《matlab离散点生成dem》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、用Matlab实现移动曲面拟合法生成DEM标签: Matlab 移动曲面拟合法 DEM 分类: [E]【MATLAB】2006-12-2210:02 用Matlab 实现移动曲面拟合法生成DEM杜玉军(武汉大学测绘工程0408班200431610007 武汉 430079) 摘要:移动曲面拟合法是DEM格网点内插常用的一种方法,利用Matlab可以轻松实现该方法生成DEM。关键字:移动曲面拟合法 DEM Matlab 1. 概述为了获取规则格网DEM,内插是必不可少的过程。内插的方法很多,其中移动曲面拟合法由于其方法灵活、计算简便、精度较高、占用内存较少等诸多优点而
2、经常被使用。 2. 实现原理移动曲面拟合法是一种以待定点为中心的逐点内插法,它以每个待定点为中心,定义一个局部函数去拟合周围的数据点。其过程为:(1) 对每个格网点,从数据点中检索出邻近的个(至少6个)数据点。以待定点()为圆心,以选定长为半径作圆,凡落入圆内的数据点都被采用。Xpi=Xi-XYpi=Yi-Ydi2=Xpi2+Ypi2di3、piB+Ypi2C+XpiD+YpiE+F-Zin个数据点列出的误差方程可写为:[]T(3) 计算每一数据点的权。本文选取Pi=1/di2定权。(4) 求解待定点高程。根据平差理论解出二次方程的系数阵:X=(MTPM)-1MTPZ则系数就是待定点内插高程。 3. 实例计算3.1 部分数据说明ptx pty ptz 数据点坐标向量x(i) y(i) z(i,j)第i行j列的格网点坐标值其他数据说明见相应注释。3.2 实现代码·脚本文件%DEM.m%移动曲面拟合法生成DEMclear;clc; %****读入数据****%Pt=4、GetData; %调用GetData函数,读入数据ptn=num2str(Pt(:,1));%取点号ptx=Pt(:,2);%取xpty=Pt(:,3);%取yptz=Pt(:,4);%取z %*****数据预处理*****%msgbox('请在命令窗口输入步长!');step=input('在此输入步长:');%得到网格间距x_max=max(ptx);y_max=max(pty);%计算x,y最大值x_min=min(ptx);y_min=min(pty);%计算x,y最小值x0=floor(x_min/step)*step; y0=floor(y_min/s5、tep)*step;%Grid起始点nx=ceil((x_max-x0)/step); ny=ceil((y_max-y0)/step); %网格数量l_x=nx*step; l_y=ny*step; %网格长宽 fori=1:(nx+1) x(i)=x0+(i-1)*step; %网格横坐标forj=1:(ny+1) y(j)=y0+(j-1)*step; %网格纵坐标 s=l_x*l_y/length(Pt); %单点大致占用面积 z(i,j)=GridZ(Pt(:,[2:4]),x(i),y(j),s);%调用GridZ函数,内插网格点的高6、程endend %****图像输出****%mesh(x,y,z');%hiddenoff;colorbar;holdon;plot3(ptx,pty,ptz,'r.');text(ptx,pty,ptz+0.3,ptn);title('移动曲面拟合法生成DEM模型');xlabel('x');ylabel('y');zlabel('z');contour(x,y,z',V); ·函数文件1functionDt=GetData%读入数据[filename,pathname]=uigetfile('*.txt','Pickafileforread');%打开标准对话框fid7、1=fopen(strcat(pathname,filename),'rt');%以只读形式打开iffid1==-1 %若没有选择文件则警告 msgbox('InputFileorPathisnotcorrect','Warning','warn'); break;endDt=load(filename);%获取数据fclose(fid1); ·函数文件2functionzp=GridZ(pt,x,y,s0)%移动曲面拟合法内插(x,y)处的高程%pt为数据点矩阵,s0为单点平均占用面积 N=length(pt);
3、piB+Ypi2C+XpiD+YpiE+F-Zin个数据点列出的误差方程可写为:[]T(3) 计算每一数据点的权。本文选取Pi=1/di2定权。(4) 求解待定点高程。根据平差理论解出二次方程的系数阵:X=(MTPM)-1MTPZ则系数就是待定点内插高程。 3. 实例计算3.1 部分数据说明ptx pty ptz 数据点坐标向量x(i) y(i) z(i,j)第i行j列的格网点坐标值其他数据说明见相应注释。3.2 实现代码·脚本文件%DEM.m%移动曲面拟合法生成DEMclear;clc; %****读入数据****%Pt=
4、GetData; %调用GetData函数,读入数据ptn=num2str(Pt(:,1));%取点号ptx=Pt(:,2);%取xpty=Pt(:,3);%取yptz=Pt(:,4);%取z %*****数据预处理*****%msgbox('请在命令窗口输入步长!');step=input('在此输入步长:');%得到网格间距x_max=max(ptx);y_max=max(pty);%计算x,y最大值x_min=min(ptx);y_min=min(pty);%计算x,y最小值x0=floor(x_min/step)*step; y0=floor(y_min/s
5、tep)*step;%Grid起始点nx=ceil((x_max-x0)/step); ny=ceil((y_max-y0)/step); %网格数量l_x=nx*step; l_y=ny*step; %网格长宽 fori=1:(nx+1) x(i)=x0+(i-1)*step; %网格横坐标forj=1:(ny+1) y(j)=y0+(j-1)*step; %网格纵坐标 s=l_x*l_y/length(Pt); %单点大致占用面积 z(i,j)=GridZ(Pt(:,[2:4]),x(i),y(j),s);%调用GridZ函数,内插网格点的高
6、程endend %****图像输出****%mesh(x,y,z');%hiddenoff;colorbar;holdon;plot3(ptx,pty,ptz,'r.');text(ptx,pty,ptz+0.3,ptn);title('移动曲面拟合法生成DEM模型');xlabel('x');ylabel('y');zlabel('z');contour(x,y,z',V); ·函数文件1functionDt=GetData%读入数据[filename,pathname]=uigetfile('*.txt','Pickafileforread');%打开标准对话框fid
7、1=fopen(strcat(pathname,filename),'rt');%以只读形式打开iffid1==-1 %若没有选择文件则警告 msgbox('InputFileorPathisnotcorrect','Warning','warn'); break;endDt=load(filename);%获取数据fclose(fid1); ·函数文件2functionzp=GridZ(pt,x,y,s0)%移动曲面拟合法内插(x,y)处的高程%pt为数据点矩阵,s0为单点平均占用面积 N=length(pt);
此文档下载收益归作者所有