0

我正在尝试使用映射工具箱(更具体地说,不使用 WebMapServer 对象)从 Web 地图服务器中读取数据。我可以自己构建 URL 而不会出现问题,并且可以将 imread 用于返回 bmp 文件的 WMS。但是,其中一个 WMS 返回 BIL 文件(Band InterLeaved)并且 imread() 无法识别它。

如何使用映射工具箱从 URL 读取 BIL 文件?

编辑:这是我想阅读的示例 URL:

http://www.nasa.network.com/elev?SERVICE=WMS&LAYERS=mergedAsterElevations&EXCEPTIONS=application/vnd.ogc.se_xml&FORMAT=image%2Fbil&TRANSPARENT=FALSE&HEIGHT=1113&BGCOLOR=0xFFFFFF&REQUEST=GetMap&WIDTH=925&BBOX=-118.545692,003.96069240-103.9605240-118.545692,303.9605240-45 34.060523999999994&STYLES=&SRS=EPSG:4326&VERSION=1.3.0

此外,如果我尝试使用 urlread 获取字节数据,然后将其写入文件,则某些值会以某种方式丢失。

bytedata = urlread( mapurl );
fp = fopen( 'tmp.bil', 'w' );
fwrite( fp, bytedata, 'uint8' );
fclose( fp );
fp = fopen( 'tmp.bil', 'r' );
z = fread( fp, 'int16' );
imagesc( reshape( z, 925, 1113 )' );

上面显示的图像类似于映射工具箱返回的图像,但有些区域设置为不应设置的常量值。

4

1 回答 1

0

上述问题的解决方案是使用 urlwrite() 而不是 urlread(),因为后者不能正确处理二进制数据。

fname = tempname();
urlwrite(mapurl,fname);
fp = fopen(fname,'r');
map = reshape(fread(fp,'int16=>int16'),Ncols,Nrows)';
fclose(fp);
delete(fname);
于 2012-12-02T20:19:52.593 回答