1

我正在尝试在 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

4

2 回答 2

1

指定 DisplayType 是必要的,因为 Matlab 将“图像”与连续栅格数据区分开来。Matlab 有一个完整的图像处理工具箱和一个映射工具箱,每个工具箱具有不同的功能,它们通常是互补的,但来自不同的开发背景。Matlab 支持逻辑、uint8、uint16 和双精度类类型的“图像”,以及单精度和双精度的栅格(网格)数据。

此外,您使用 'DisplayType','surface' 的解决方案仅适用于您的情况,因为您有“单个”数据。例如,如果您在 ArcGis 中创建了一个 geotiff 图像,然后尝试将其读入 Matlab,它将以 int16 的形式出现,并且在尝试使用 mapshow 或 geoshow 时会出现相同的错误,但 'DisplayType','surface ' 在这种情况下不起作用,因为 DisplayType 不接受 int16。您转换为双精度的解决方案更通用。

于 2014-10-09T17:42:32.387 回答
0

我终于弄明白了。 geotiffread给出一个矩阵类型 'single' 但 mapshow 默认显示image只接受类型 'double' (和其他一些)。所以这里的解决方案是:

A=double(A);

或者

mapshow(A,R,'DisplayType','surface');
于 2012-05-19T00:27:55.100 回答