我正在尝试在MATLAB中使用USGS DEM,但在使用geotiffread读取后,mapshow会产生错误。根据文档,我试过
[A, R] = geotiffread('NED_10340081')
figure
mapshow(A, R);
但我得到
Error using mapshow
Expected input number 1, I or X or RGB, to be one of these types:
uint8, uint16, double, logical
Instead its type was single.
Error in validateMapRasterData>parseImageInputs (line 109)
validateattributes(A, {'uint8', 'uint16', 'double', 'logical'}, ...
Error in validateMapRasterData>validateImageComponent (line 93)
[A, R] = parseImageInputs(mapfcnname, dataArgs{:}, cmap, rules );
Error in validateMapRasterData (line 27)
[Z, SpatialRef] = validateImageComponent(mapfcnname, ...
Error in maprastershow (line 127)
[Z, SpatialRef, displayType, HGpairs] = ...
Error in mapshow (line 231)
h = showFcn(varargin{:});
我的矩阵A是单一类型的......问题是什么?我该如何解决这个问题? 以下是DEM http://snowserver.colorado.edu/pub/fromDominik/NED_10340081.zip的下载链接 谢谢 PS我在http://www.mathworks.com/matlabcentral/answers/38255-display-usgs-dem-using-geotiffread-and-mapshow
交叉了这个答案 0 :(得分:1)
指定DisplayType是必要的,因为Matlab可以区分"图像"来自连续的栅格数据。 Matlab有一个完整的图像处理工具箱以及一个具有不同功能的映射工具箱,这些功能通常是免费的,但来自不同的开发背景。 Matlab支持"图像"在逻辑,uint8,uint16和双类类型中,以及单个和双精度的栅格(网格)数据。
此外,您的解决方案是使用' DisplayType',' surface'只在你的情况下工作,因为你有单身'数据。例如,如果您在ArcGis中创建了geotiff图像,然后尝试将其读入Matlab,则它将以int16形式出现,并且在尝试使用mapshow或geshow时会出现相同的错误,但是' DisplayType&# 39;,'表面'在这种情况下不起作用,因为DisplayType不接受int16。您转换为double的解决方案更为通用。
答案 1 :(得分:0)
我终于明白了。
geotiffread
给出矩阵类型“单个”,但mapshow默认显示image
,它只接受“double”类型(以及其他一些类型)。所以这里的解决方案是:
A=double(A);
或
mapshow(A,R,'DisplayType','surface');