[已答复] 报错The GeoTIFF structure PROJ cannot be used with functions PROJFWD or PRO...

[复制链接]
ma910915 发表于 2017-11-24 17:24:24
本帖最后由 ma910915 于 2017-11-24 17:32 编辑

我有一组站点,已经知道该站点的行列号,想要提取经纬度投影图像上该站点上的值。因为站点比较多,图像也比较多,所以想先提取每个站点在图像上的行列号,然后编程批量提取。现在就是不知道如何计算这些站点在图像上的行列号。下面是我写的程序,但是在执行该命令时出错了:
%加载站点数据信息
[FileStation,PathStation]=uigetfile({'*.xlsx','Excel File';'*.*','All Files'},'Select the fill value file','I:\MuSyQ_LAI_Validation_Global\验证点-BELMANIP\BELMANIP_info1.xlsx');
[Station_info,txt,raw]=xlsread(strcat(PathStation,FileStation),'HVInfo');
m1=size(Station_info,1);
% 以上是我的站点信息,可以不看,忽略

%下面是读取投影信息
[~,BaseR]=geotiffread('I:\MuSyQ_LAI_Validation_Global\验证点-BELMANIP\c_gls_LAI_QL_201002200000_GLOBE_VGT_V2.0.11.tif');
R1_info=geotiffinfo('I:\MuSyQ_LAI_Validation_Global\验证点-BELMANIP\c_gls_LAI_QL_201002200000_GLOBE_VGT_V2.0.11.tif');
R1_info.GeoTIFFTags.GeoKeyDirectoryTag.GeogCitationGeoKey='WGS-84';
%如果没有这个语句,会出现问题:Expected GeoKeyDirectoryTag.GeogCitationGeoKey to be nonempty.

%运行这步时出错。
[X,Y]=projfwd(R1_info,Station_info(:,2),Station_info(:,3));
[Row,Col]=map2pix(BaseR,X,Y);

错误如下:
错误使用 proj2gtif (line 17)
The GeoTIFF structure PROJ cannot be used with functions PROJFWD or PROJINV.

出错 projaccess (line 40)
gtif  = proj2gtif(proj);

出错 projfwd (line 60)
[x,y] = projaccess('fwd', proj, lat, lon);

出错 latlon2samlin_GEOV2 (line 18)
[X,Y]=projfwd(R1_info,Station_info(:,2),Station_info(:,3));


还请各位大神帮忙!

5 条回复


cheke 发表于 2019-11-29 20:25:50
我也是这个问题

ma910915 发表于 2021-9-11 13:19:08
问题已经解决。
遇到的问题如下:

解决方法:

上述解决方法解读:
1、首先先使用geotiffinfo读取TIFF文件的信息。
读出来之后查看TIFF图像的info.colorType的值,如果是“indexed”,则由下面的格式读取TIFF图像的数据:
[~, ~, BaseR] = geotiffread(geoTIFF_filename);
如果不是“indexed”,而是其他的比如“grayscale”, “RGB”, or “multispectral image”的话,则由下面的格式读取TIFF图像的数据:
[~, BaseR] = geotiffread(geoTIFF_filename);
我的info.colorType=grayscale。


2、其次 再判断BaseR的类型
如果BaseR的值为1x1 MapCellsReference,

则使用下面的函数得到行列号:
[X, Y] = projfwd(R_info, lat, lon);
[row, col] = map2pix(BaseR, X, Y);

如果BaseR的值为1x1 GeographicCellsReference

则使用下面的函数得到行列号:
[row, col] = latlon2pix(BaseR, lat, lon);

ma910915 发表于 2021-9-11 13:21:24
解决方法:
%Get geoTIFF file information
R_info = geotiffinfo(geoTIFF_filename);
%Get geoTIFF image file data based on ColorType field of 'info'
switch lower(R_info.ColorType)
     case 'indexed'
          [~, ~, BaseR] = geotiffread(geoTIFF_filename);
     otherwise
          [~, BaseR] = geotiffread(geoTIFF_filename);
     end
   %Convert latitude and longitude to pixel coordinates based on class of R
   switch class(BaseR)
        case 'map.rasterref.GeographicCellsReference'
             [row, col] = latlon2pix(BaseR, lat, lon);
        case 'map.rasterref.MapCellsReference'
             [X, Y] = projfwd(R_info, lat, lon);
             [row, col] = map2pix(BaseR, X, Y);
        otherwise
             error('Unrecognized format for R');
   end
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
上述解决方法解读:
1、首先先使用geotiffinfo读取TIFF文件的信息。
读出来之后查看TIFF图像的info.colorType的值,如果是“indexed”,则由下面的格式读取TIFF图像的数据:
[~, ~, BaseR] =geotiffread(geoTIFF_filename);
如果不是“indexed”,而是其他的比如“grayscale”,“RGB”, or “multispectral image”的话,则由下面的格式读取TIFF图像的数据:
[~, BaseR]= geotiffread(geoTIFF_filename);
我的info.colorType=grayscale

2、其次 再判断BaseR的类型
如果BaseR的值为1x1 MapCellsReference

则使用下面的函数得到行列号:
[X, Y] =projfwd(R_info, lat, lon);
[row, col] =map2pix(BaseR, X, Y);


如果BaseR的值为1x1 GeographicCellsReference

则使用下面的函数得到行列号:
[row, col]= latlon2pix(BaseR, lat, lon);






凯源3322 发表于 2022-1-14 00:47:59
您好,我在matlab论坛看见您于2017年发表的一篇求助帖子,内容是根据站点的行列号批量提取经纬度影像上对应点的数据的,我目前也是在做这个工作,但遇到了一些麻烦,请问我可以问您一些问题吗?

ma910915 发表于 2022-1-14 16:24:37
凯源3322 发表于 2022-1-14 00:47
您好,我在matlab论坛看见您于2017年发表的一篇求助帖子,内容是根据站点的行列号批量提取经纬度影像上对应 ...

可以啊。如果我会的话我会回答的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表