主要内容

取消注入数字高度模型(DEM)

此示例显示如何将USGS DEM转换为具有可比空间分辨率的常规纬度经度网格。U.S.地质调查(USGS)30米数字高度模型(DEM)是使用UTM坐标系的常规网格(光栅数据)。在申请中使用此类DEM可能需要重新采样和重新采样它们。您可以随时应用此方法显示,以投影除UTM之外的地图坐标系和其他DEM和大多数类型的常规数据网格。

首先,将输出显示格式设置为因此,输出显示更多小数位。获取当前输出格式,以便在示例的末尾恢复它。

CurrentFormat = Get(0,“格式”);格式

第1步:导入DEM及其元数据

此示例使用USGS DEM for Quadrangle 7.5弧分钟广场,位于美国新罕布什尔州新罕布什尔州的白色山脉。使用该数据导入数据和地图单元格引用对象ReadgeOraster.函数。属性获取额外的元数据GeorasterInfo.函数。

[z,r] = ReadgeOraster('mtwashington-ft.grd''OutputType''双倍的');Info = GeorasterInfo('mtwashington-ft.grd');

用替换丢失的数据价值观。

m = info.missingDataindicator;z =标准化(z,m);

第2步:获取投影信息

通过查询来获取有关投影坐标参考系统的信息Projectedcrs.参考对象的属性。结果是一个projcrs.目的。然后,获得坐标参考系统的椭圆体。

p = r.projectedcrs;ellipsoid = p.geographiccrs.phoid.
椭球体具有定义属性:代码:7008名称:'Clarke 1866'长度单位:'米'半轴:6378206.4半小轴:6356583.8反压扁:294.978698213898偏心度:0.0822718542230038和附加属性:压扁第三压扁平均半径表面积体积

第3步:确定要使用的UTM区域并构建地图轴

来自名称财产的projcrs.对象,您可以告诉DEM在通用横向符号(UTM)坐标系中网格网。

p.name.
ans =“UTM区19,Northern Hemisphere”

要查找UTM区域,请先定位UTM坐标中的DEM的中心。然后,将坐标转换为纬度 - 经度。

[m,n] =尺寸(z);XcenterIntrinsic =(1 + N)/ 2;ycenterintrinsic =(1 + m)/ 2;[Xcenter,ycenter] = IntrinsictOWORLD(R,Xcenterintrinsic,ycenterIntrinsic);[LatCenter,Loncenter] = Projinv(p,xcenter,ycenter)
LatCenter = 44.3124367104673 LonCenter = -71.3126432693478

通过使用utm为dem找到utm区域Utmzone.函数。

utmZone = utmZone (latCenter lonCenter)
Utmzone ='19t'

使用区域和椭圆体创建地图轴。

图轴('UTM''区',Utmzone,'Geoid',椭圆形)轴离开gridm mlabelplabel弗拉姆姆

注意:如果您可以在线地将新罕布什尔州的大致位置放在世界地图上,那么您可以使用此结果确认此结果utmzoneui吉..

utmzoneui (actualZone)

第4步:在地图轴上显示原始DEM

采用mapshow(而不是地球机Meshm.)为了在地图轴上显示DEM,因为数据在地图(X-Y)坐标中被包装。

Mapshow(z,r,'显示类型''texturemap')demcmap(z)

该DEM涵盖了这一地图的这样的一小部分,可能很难看到(在44到44度北部和72度到71度West中),因为地图限制被设定为覆盖整个UTM区域。您可以重置它们(以及地图网格和标签参数)以仔细看看。

setm (gca),“MapLatLimit”,[44.2 44.4],'maplonlimit',[ -  71.4 -71.2] setm(gca,'mlabellocation',0.05,'mlabelround',-2)setm(gca,'plabellocation',0.05,'plabelround',-2)setm(gca,'plinelocation',0.025,'mlinelocation',0.025)

当它在更大的尺度上观看时,网格的边缘会出现颜色一致的楔形区域。这些地方Z.包含值NaN,表示没有实际数据。默认情况下,它们会收到彩色表中的第一个颜色,在这种情况下,在这种情况下是深绿色的。出现了这些空数据区域,因为虽然DEM以UTM坐标网格网格包装,但其数据限制由纬度经度全栅格定义。每个楔形的窄角度对应于该区域的这部分utm坐标系的非零“网格偏降”。(恒定X行仅沿着区域中央经络沿着南北奔跑。在其他地方,它们相对于当地经络相对于略微的角度。)

步骤5:定义输出纬度-经度网格

下一步是定义纬度 - 经度中的定期间隔的网格点集,其覆盖在DEM内的区域与原始数据集相同的空间分辨率。

首先,您需要确定输入DEM中的行之间的纬度如何变化(即,通过向北移动30米)。

rng = r.cellextentinworldy;%以米,与p.lengthUnit一致LATCRAD = DEG2RAD(拉脱中心);弧度中的%latcenter纬度的百分比变化,以学位DLAT = RAD2DEG(Meridianfwd(Latcrad,RNG,Ellipsoid) - 拉拉德)
DLAT = 0.000269984939366415

实际间距可以略微舍入以定义用于输出(纬度 - 经度)网格的网格间隔。

GridSpacing = 1/4000;换句话说,每度4000个样本

要设置输出的范围(纬度 - 经度)网格,请首先查找UTM地图坐标中的DEM的角。

Xcorners = r.xworldlimits([1 1 2 2])'ycorners = r.yworldlimits([1 2 2 1])'
Xcorners = 310380 310380 320730 320730 ycorners = 4901880 4916040 4901880

然后把角转换成经纬度。在地图上显示经纬度角(通过UTM投影),以检查结果是否合理。

[latCorners, lonCorners] = projinv(p,xCorners, yCorners)'显示类型''多边形'......'facecholor''没有任何''Edgecolor''红色的');
latCorners = 44.2474175605687 44.3747915486804 44.3774240601986 44.2500384686392 lonCorners = -71.3749065609587 -71.3800513603087 -71.2502438233865 -71.2453790282992

接下来,向外舍入以定义一个完全包围DEM的输出纬度 - 经度四边形,并用网格间距的倍数对准。

Latsouth = Gridspacing *地板(Min(Latcorners)/ Gridspacing)Lonwest = Gridspacing *地板(Min(Loncorners)/ Gridspacing)Latnorth = Gridspacing * Ceil(Max(Latcorners)/ Gridspacing)Loneast = Gridspacing * Ceil(Max(Loncorners)/GridSpacing)Qlatlim = [Latsouth Latnorth];Qlonlim = [lonwest loneast];dlat = 100 * gridspacing;dlon = 100 * gridspacing;[Latquad,Lonquad] = OutlineGeoquad(Qlatlim,Qlonlim,Dlat,Dlon);HQuad = Geoshow(Latquad,Lonquad,......'显示类型''多边形''facecholor''没有任何''Edgecolor''蓝色的');snapnow;
Latsouth = 44.24725 Lonwest = -71.38025 Latnorth = 44.3775 Loneast = -71.24525

最后,构造用于输出网格的地理栅格引用对象。它支持万博1manbetx纬度 - 经度和行和列下标之间的转换。在这种情况下,使用世界文件矩阵W,可以精确指定网格间距。

W = [网格化0 LONWEST + GridSpacing / 2;......0 GridSpacing Latsouth + Gridspacing / 2]
W = 0.00025 0 -71.380125 0 0.00025 44.247375
nRows = round((latNorth - latSouth) / gridSpacing) nCols = round(wrapTo360(lonEast - lonWest) / gridSpacing)
nrows = 521 ncols = 540
rlatlon = georasterref(w,[nrows ncols],'细胞');rlatlon.geachcts = p.geographics.
Rlatlon = GeographicCellsReference属性:LatitudeLimits: [44.24725 - 44.3775] LongitudeLimits: [-71.38025 - -71.24525] RasterSize: 540年[521]RasterInterpretation:“细胞”ColumnsStartFrom:“南”RowsStartFrom:“西方”CellExtentInLatitude: 1/4000 CellExtentInLongitude: 1/4000 RasterExtentInLatitude: 0.13025 RasterExtentInLongitude:0.135 XIntrinsicLimits: [0.5 540.5] YIntrinsicLimits: [0.5 521.5]

rlatlon.完全定义输出网格中每个单元格的数字和位置。

步骤6:将每个输出网格点位置映射到UTM X-Y

最后,您可以使用地图投影,将其应用到输出网格中每个点的位置。首先计算这些点的纬度和经度,存储在二维数组中。

[行,cols] = ndgrid(1:nrows,1:ncols);[LAT,LON] =内在地理(Rlatlon,Cols,Rows);

然后将投影应用到每个经纬度对,即与经纬度阵列具有相同形状和大小的UTM x-y位置阵列。

[xi,yi] = projfwd(p,lat,lon);

在此刻,XI(I,J)yi(我,j)指定与输出网格的第i行和第j列对应的网格点的UTM坐标。

步骤7:重新采样原始DEM

最后一步是使用matlabinterp2.功能执行双线性重采样。

在此阶段,从纬度经度网格投射到UTM地图坐标系的值变得明显:这意味着重采样可以在常规X-Y网格中进行,制作interp2.适用。相反的方法,将每个(X,Y)点投影到经纬度,可能看起来更直观,但它会导致插值点的不规则数组——这是一项更困难的任务,需要使用更昂贵的方法griddata.功能或一些粗糙的等价物。

[行,cols] = ndgrid(1:m,1:n);[x,y] = intrinsictoworld(r,cols,行);方法='双线性';extrapval = nan;zlatlon = Interp2(x,y,z,xi,yi,方法,utripval);

使用投影轴的结果使用地球机它将在飞行中重新投射。注意,它填充了蓝色矩形,该矩形与经度和纬度线对齐。(相比之下,红色矩形勾勒出原始DEM,与UTM x和y对齐。)还要注意网格边缘的nan填充区域。由于插值过程中的舍入效应,这些区域的边界在单个网格间距的水平上出现了轻微的锯齿状。将红色四边形和蓝色四边形移动到顶部,以确保它们不会被光栅显示隐藏。

Geoshow(Zlatlon,Rlatlon,'显示类型''texturemap') uistack ([hCorners hquad),'最佳'

恢复原来的输出显示格式。

格式(CurrentFormat)

学分

mtwashington-ft.grd(和支持文件万博1manbetx):

美国地质调查局(USGS)为华盛顿山四合院设计的7.5分钟数字高程模型(DEM),高程单位为米。http://edc.usgs.gov/s manbetx 845products/elevation/dem.html
有关更多信息,请运行:
> >类型MtWashington-ft.txt

也可以看看

||||