导出图像和栅格网格来的GeoTIFF

这个示例展示了如何将引用到标准地理和投影坐标系统的数据写入GeoTIFF文件geotiffwrite。标记图像文件格式(TIFF)已经成为存储光栅数据的一种流行格式。GeoTIFF规范定义了一组TIFF标记,用于描述与TIFF光栅数据关联的“制图”信息。通过使用这些标记,可以将地理定位图像或光栅网格与地理坐标系统(纬度和经度)或(平面)投影坐标系统的坐标关联存储在GeoTIFF文件中。

设置:定义一个数据文件夹和文件名效用函数

这个例子创建了几个临时的GeoTIFF文件并使用了这个变量DATADIR以表示他们的位置。这里所使用的值是由的输出来确定tempdir命令,但你可以轻松地定制的。内容DATADIR在该示例的末端被删除。

DATADIR =完整文件(TEMPDIR,'DATADIR');如果~存在(datadir“dir”)MKDIR(DATADIR)结束

定义要添加的匿名函数DATADIR输入文件名:

datafile = @(文件名)fullfile(datadir,文件名);

实施例1:写引用到地理坐标的图像

将引用WGS84地理坐标的图像写入GeoTIFF文件。原始图像(boston_ovr.jpg)以JPEG格式存储,并在“世界文件”(boston_ovr.jgw)中引用图像文件外部的信息。该图像提供了波士顿、马萨诸塞州及其周边地区的低分辨率“概览”。

从JPEG文件中读取图像。

基本名称=“boston_ovr”;镜像文件= [基名名为.jpg];A1 = imread(镜像文件);

从世界文件中获取引用对象。

worldfile = getworldfilename (imagefile);R1 = worldfileread (worldfile,“地理”,尺寸(A1));

将映像写入GeoTIFF文件。

文件名1 =数据文件([基名'.TIF']);geotiffwrite (filename1 A1, R1)

请注意,从该文件中的GeoTIFF信息指示所述地理坐标系(GCS)是“WGS 84”,并且与相关联的所有字段(PCS,投影,MapSys,区CTProjection,ProjParm,ProjParmId和UOMLength)投影坐标系是空的。

geotiffinfo (filename1)
用户\jbenham\AppData\本地\Temp\datadir\boston_ovr。tif FileModDate: 06年—2020年1月——09:40:21气管无名动脉瘘管的的文件大小:1674212格式:“FormatVersion:[]高度:769宽度:722 BitDepth: 8 ColorType:“真彩”ModelType:“ModelTypeGeographic的电脑:“投影:“MapSys:“区:[]CTProjection:”ProjParm: [] ProjParmId:“GCS: WGS 84的数据:1984年世界大地系统的椭球:WGS 84的半长:6378137半短:6.3568 e + 06点:“格林”PMLongToGreenwich: 0 UOMLength:“UOMLengthInMeters: [] UOMAngle:“学位”UOMAngleInDegrees:1 TiePoints: [1 * 1 struct] PixelScale: [3 * 1 double] SpatialRef: [1 * 1 map.rasterref.]GeographicCellsReference] RefMatrix:[3 * 2双]BoundingBox:[2 * 2双]角坐标:[1 * 1结构]geotiffcode:[1 * 1结构]geotifftag:[1 * 1结构]

重新导入新的GeoTIFF文件,并在地图坐标轴中正确地显示波士顿概览图像。

图usamap (R1.LatitudeLimits R1.LongitudeLimits) setm (gca),“PLabelLocation”,0.05,'PlabelRound'2,“PlineLocation”,0.05)geoshow(文件名)标题(“波士顿概述”

实施例2:写一个数据网格参考地理坐标

加载参考地理坐标的样例地形数据网格。将数据网格写入GeoTIFF文件。

加载威尼斯平底渔船Z2 = TOPO;R2 = georefcells(topolatlim,topolonlim,大小(Z2));文件名2 =数据文件('topo.tif');geotiffwrite(文件名,Z2,R2)

在数据网格范围从-7473至5731.值显示网格作为纹理映射的表面,而不是作为强度图像。

图worldmap世界gridmsetm (gca),'MLabelParallel',-90,'MLabelLocation'tmap = geoshow(filename2,“DisplayType”“texturemap”);demcmap (tmap.CData)标题(地形数据网格的

例3:的GeoTIFF文件的更改数据组织

当您使用写入数据geotiffwrite或使用readgeoraster,数据网格的列从北开始,行从西开始。例如,输入数据来自topo.mat从南方开始,但输出数据从topo.tif从北开始。

R2。ColumnsStartFrom [Z3,R3] = readgeoraster(filename2);R3.ColumnsStartFrom
ans =“南”ans =“北”

因此,输入数据和数据在文件的GeoTIFF翻转。

isequal (Z2 flipud (Z3))
逻辑1

如果您需要在您的工作空间中的数据再次匹配,然后翻转Z值和设置引用对象,使列从南部开始:

R3.ColumnsStartFrom=“南”;Z3 = flipud (Z3);Z3 isequal (Z2)
逻辑1

GeoTIFF文件中的数据使用正尺度值编码。因此,当您使用普通的午餐查看软件查看该文件时,数据集的北部边缘位于顶部。要使输出文件中的数据布局与输入的数据布局匹配,可以构造一个Tiff对象并使用它重置一些标记和图像数据。

t = Tiff (filename2' r + ');pixelScale = getTag (t)“ModelPixelScaleTag”);pixelScale (2) = -pixelScale (2);setTag(T,“ModelPixelScaleTag”, pixelScale);tiepoint = getTag (t)'ModelTiepointTag');tiepoint(5)= intrinsicToGeographic(R2,0.5,0.5);setTag(T,'ModelTiepointTag',tiepoint);setTag(T,'压缩',Tiff.Compression.None)写(吨,Z2);rewriteDirectory(t)的接近(t)的

验证输入数据中的引用对象和数据网格与输出数据文件是否匹配。为此,读取Tiff图像并创建一个引用对象。然后,比较网格。

T = TIFF文件(文件名);Atiff =读(T);接近(T)= Rtiff georefcells(R2.LatitudeLimits,R2.LongitudeLimits,尺寸(Atiff));ISEQUAL(Z2,Atiff)ISEQUAL(R2,Rtiff)
ans = logical 1

实施例4:写入参考投影坐标系统中的图像

写协和正射影像以一个单一的GeoTIFF文件。在两个相邻的(西向东)的地理参考灰度(全色)正射影像一致,马萨诸塞,USA的盖部。该concord_ortho.txt文件表明,该数据是参照美国麻省理工内地(NAD83)国家平面投影坐标系。单位为米。这对应于的GeoTIFF码号26986如在说明书的GeoTIFF注意到http://geotiff.maptools.org/spec/geotiff6.html#6.3.3.1下PCS_NAD83_Massachusetts。

阅读这两个正射影像。

[X_west, R_west] = readgeoraster ('concord_ortho_w.tif');[X_east, R_east] = readgeoraster (“concord_ortho_e.tif”);

结合图像和参考对象。

X4 = [X_west X_east];R4 = R_west;R4.XWorldLimits = [R_west.XWorldLimits(1)R_east.XWorldLimits(2)];R4.RasterSize = SIZE(X4);

将数据写入GeoTIFF文件。使用代码号26986,表示PCS_NAD83_Massachusetts投影坐标系统。

coordRefSysCode = 26986;filename4 =丢失(“concord_ortho.tif”);geotiffwrite(filename4,X4,R4,'CoordRefSysCode',coordRefSysCode)

请注意,该文件中的GeoTIFF信息表明地理坐标系统(GCS)是“NAD83”,并且与投影坐标系统相关的所有字段都用适当的值填充。

geotiffinfo (filename4)
ANS =结构与字段:文件名: 'C:\ Users \用户jbenham \应用程序数据\本地\ TEMP \ DATADIR \ concord_ortho.tif' FileModDate:'06 -Jan-2020九时40分26' 秒文件大小:8068660格式: 'TIF'FormatVersion:[]高度:2000宽:4000位深度:8的ColorType: '灰度' ModelType: 'ModelTypeProjected' PCS:'NAD83 /麻萨诸塞州内地投影: 'SPCS83马萨诸塞内地区(米)' MapSys: 'STATE_PLANE_83' 区域:2001CTProjection: 'CT_LambertConfConic_2SP' ProjParm:[7×1双] ProjParmId:{7×1细胞} GCS: 'NAD83' 基准: '北美基准面1983' 椭球: 'GRS 1980' 长半轴:6378137短半轴:6.3568e +下午6点: '格林威治' PMLongToGreenwich:0 UOMLength: '米' UOMLengthInMeters:1 UOMAngle: '度' UOMAngleInDegrees:1个TiePoints:[1×1结构] PixelScale:[3×1双] SpatialRef:[1×1 map.rasterref.MapCellsReference] RefMatrix:[3×2双]的BoundingBox:[2×2双] CornerCoords:[1×1结构] GeoTIFFCodes:[1×1结构] GeoTIFFTags:[1×1结构]

显示联合协和正射影像。

图mapshow (filename4)标题(“联合正色摄影”)xlabel(“MA大陆国家平面东距米”)ylabel(“MA大陆国家平面北距,米”

实施例5:从文件的GeoTIFF写裁剪图像

写的GeoTIFF文件的一个子集到一个新的GeoTIFF文件。

读取RGB图像和引用信息boston.tifGeoTIFF文件。

[A5,R5] = readgeoraster('boston.tif');

作物图像。

xlimit = [764318 767677];ylimits = [2951122 2954482];[A5crop, R5crop] = mapcrop (A5, R5, xlimits ylimits);

将裁剪的图像写入GeoTIFF文件。使用原始GeoTIFF文件中的GeoKeyDirectoryTag。

info5 = geotiffinfo ('boston.tif');filename5 =数据文件('boston_subimage.tif');geotiffwrite (filename5 A5crop R5crop,...'GeoKeyDirectoryTag',info5.GeoTIFFTags.GeoKeyDirectoryTag)

显示包含裁剪图像的GeoTIFF文件。

图mapshow(filename5)标题(“芬威公园 - 从文件的GeoTIFF裁切影像”)xlabel(“MA大陆国家平面东距调查的脚”)ylabel(“MA大陆国家平面北距,调查的脚”

示例6:将海拔数据写入GeoTIFF文件

周边的南峰博尔德科罗拉多州到的GeoTIFF文件的区域写的高程数据。

elevFilename ='n39_w106_3arc_v2.dt1';

从文件中读取的DEM。要使用绘制数据geoshow中,数据的类型必须是要么。属性指定光栅的数据类型“输出类型”名称-值对。

[Z6, R6] = readgeoraster (elevFilename“输出类型”“双”);

创建一个结构来保存GeoKeyDirectoryTag信息。

关键=结构(...'GTModelTypeGeoKey'[],...'GTRasterTypeGeoKey'[],...“GeographicTypeGeoKey”,[]);

属性,指示数据位于地理坐标系统中GTModelTypeGeoKey字段作为2.指示该参考对象使用通过指定的贴子(而不是细胞)GTRasterTypeGeoKey字段作为2.指示数据是通过指定参考一个地理坐标参考系GeographicTypeGeoKey字段4326。

key.GTModelTypeGeoKey = 2;key.GTRasterTypeGeoKey = 2;key.GeographicTypeGeoKey = 4326;

高程数据写入的GeoTIFF文件。

filename6 =丢失(“southboulder.tif”);geotiffwrite(filename6,Z6,R6,'GeoKeyDirectoryTag'键),

验证通过显示它的数据已被写入到文件中。首先,它表示使用科罗拉多州边界进口矢量数据shaperead。接下来,显示边界的GeoTIFF文件。

S = shaperead (“usastatelo”'UseGeoCoords',真正,“选择器”...{@(名)的任何(STRCMP(姓名,{“科罗拉多”})),'名称'});图usamap“科罗拉多”保持geoshow(S,“FaceColor”'没有') g = geoshow(文件名6,“DisplayType”“网格”);demcmap (g.ZData)标题(“南巨石峰海拔”

示例7:将非图像数据写入TIFF文件

如果使用的是一个数据网格类双与范围之外的浮点强度图像的所要求的限制值工作(0 <=数据<= 1),并且如果存储在TIFF文件中的数据使用imwrite,然后您的数据将被截断为间隔[0,1]、缩放并转换为uint8。很明显,原始数据中的部分甚至全部信息可能会丢失。要避免这些问题,并保留数据网格的数值类和范围,请使用geotiffwrite写入数据。

创建示例Z数据。

N = 512;Z7 =峰(N);

创建引用对象以将行和列引用到X和Y。

R7 = maprasterref('RasterSize'(n (n),'ColumnsStartFrom'“北”);R7.XWorldLimits = R7.XIntrinsicLimits;R7.YWorldLimits = R7.YIntrinsicLimits;

创建一个结构来保存GeoKeyDirectoryTag信息。将模型类型设置为1,表示投影坐标系(PCS)。

关键。GTModelTypeGeoKey = 1;

设置栅格类型1指示PixelIsArea(细胞)。

关键。GTRasterTypeGeoKey = 1;

表示用户定义的预计使用的32767值的坐标系。

key.ProjectedCSTypeGeoKey = 32767;

将数据写入到一个文件的GeoTIFFgeotiffwrite。为了进行比较,请使用imwrite

filename_geotiff =丢失('zdata_geotiff.tif');filename_tiff =丢失('zdata_tiff.tif');R7 geotiffwrite (filename_geotiff Z7,'GeoKeyDirectoryTag',密钥)imwrite(Z7,filename_tiff);

当您使用读取文件imread数据值和类类型被保留。可以看到TIFF文件中的数据值没有保留。

geoZ = imread(filename_geotiff);tiffZ = imread(filename_tiff);fprintf中('类类型Z: %s\n'类(Z7))流(“级类型中的GeoTIFF文件的数据:%S \ N”类(geoZ))流(' TIFF文件中数据的类类型:%s\n'类(tiffZ))流('中的GeoTIFF文件等于Z用不了数据:%d \ n', isequal(geoZ, Z7))'在TIFF文件等于Z用不了数据:%d \ n',ISEQUAL(tiffZ,Z7))
类类型Z: GeoTIFF文件中的数据的双类类型:TIFF文件中的数据的双类类型:uint8执行GeoTIFF文件中的数据等于Z: 1执行TIFF文件中的数据等于Z: 0

您可以使用mapshow

图mapshow(filename_geotiff,“DisplayType”“texturemap”)标题(“峰 - 中的GeoTIFF文件存储”

示例8:在保存元信息的同时修改现有文件

您可能希望修改现有文件,但要保留TIFF标记中的大部分(如果不是全部的话)元信息。的RGB图像转换boston.tif文件到索引映像中,并将新数据写入索引的GeoTIFF文件。除了BitDepth、BitsPerSample和PhotometricInterpretation标签的值之外,TIFF元信息被保留。

读取图像从boston.tifGeoTIFF文件。

[A8,R8 = readgeoraster('boston.tif');

利用MATLAB函数,rgb2ind,将RGB图像转换为索引图像X使用最小方差量化。

[出数,提出]= rgb2ind (A8, 65536);

使用。获取TIFF标记信息imfinfo

info8 = imfinfo ('boston.tif');

创建TIFF标签的结构保存从选定的信息信息结构体。

标签=结构(...'压缩',info8.Compression,...'RowsPerStrip'info8.RowsPerStrip,...“XResolution”,info8.XResolution,...“YResolution”,info8.YResolution,...'图片说明',info8.ImageDescription,...'约会时间'info8.DateTime,...“版权”,info8.Copyright,...'方向', info8.Orientation);

所返回的PlanarConfiguration和ResolutionUnit标签的值必须是数值而不是字符串imfinfo。您可以使用Tiff类中的常量属性来设置这些标记。例如,以下是PlanarConfiguration常量属性的可能值:

Tiff.PlanarConfiguration
ANS =结构与字段:矮胖:1独立:2

使用从字符串值信息结构以获得所需的值。

tags.PlanarConfiguration =...Tiff.PlanarConfiguration(info8.PlanarConfiguration)。

以同样的方式设置ResolutionUnit值。

tags.ResolutionUnit = Tiff.ResolutionUnit(info8.ResolutionUnit)。

软件标签未设定boston.tif文件。然而,geotiffwrite将设置软件默认的标签。为了保存信息,将值设置为空字符串,这样可以防止将标记写入文件。

tags.Software =“”;

复制从信息的GeoTIFFboston.tif

地理信息= geotiffinfo('boston.tif');键= geoinfo.GeoTIFFTags.GeoKeyDirectoryTag;

写的GeoTIFF文件。

filename8 =丢失('boston_indexed.tif');R8 geotiffwrite (filename8出数,提出,'GeoKeyDirectoryTag'的关键,'TiffTags'、标签)

查看索引图像。

图mapshow(filename8)标题(“波士顿 - 索引图像”)xlabel(“MA大陆国家平面东距调查的脚”)ylabel(“MA大陆国家平面北距,调查的脚”

比较在结构中的信息,应该是通过印刷值的表相同。

info_rgb = imfinfo ('boston.tif');info_indexed = imfinfo (filename8);tagname =字段名(标签);tagname (strcmpi ('软件', tagNames)) = [];名称= [{“高度”“宽度”},标记名];间隔= 2;fieldnameLength = max(cellfun(@length, names)) +空格;formatSpec = [% - - - - - -”int2str (fieldnameLength)'S'];fprintf中([formatSpec formatSpec formatSpec' \ n '),...的字段名“RGB信息”“索引信息”的翻译是' \ n '),...“——”'---------------''-------------------'对于K = 1:长度(地名)fprintf中([formatSpec formatSpec formatSpec' \ n '),...名字{k},...num2str (info_rgb。(名字{k})),...num2str(info_indexed。(名称{K})))结束
字段名RGB信息索引的信息--------- --------------- -------------------高度28812881宽4481 4481压缩无压缩无压缩RowsPerStrip 256 256 300 XResolution 300 YResolution 300 300 ImageDescription “地球之眼”, “地球之眼” 日期时间2007:02:23 21时46分十三秒2007:02:23 21时46分十三秒版权“(C)的GeoEye“ ”(c)中的GeoEye“ 方向1 1 PlanarConfiguration矮胖矮胖ResolutionUnit一寸一寸

比较应该不同的信息,因为您通过打印一个值表将RGB映像转换为索引映像。

名称= {'文件大小'“ColorType”“一位深度”...'BitsPerSample''PhotometricInterpretation'};fieldnameLength = max(cellfun(@length, names)) +空格;formatSpec = [% - - - - - -”int2str (fieldnameLength)'S'];formatSpec2 ='%-17s';fprintf中([' \ n 'formatSpec formatSpec2 formatSpec2' \ n '),...的字段名“RGB信息”“索引信息”)fprintf中([formatSpec formatSpec2 formatSpec2' \ n '),...“——”'---------------''-------------------'对于1 . length(length) (length) (name' \ n '),...名字{k},...num2str (info_rgb。(名字{k})),...num2str(info_indexed。(名称{K})))结束
字段名RGB信息索引的信息--------- --------------- -------------------文件大小3872990027925078真彩的ColorType索引位深度24 16 BitsPerSample 8 8 8 16 PhotometricInterpretation RGB RGB调色板

清理:删除数据文件夹

删除临时文件夹和数据文件。

命令rmdir(DATADIR,'S'

数据集信息

文件boston.tifboston_ovr.jpg包括GeoEye版权所有的材料,版权所有。GeoEye于2013年1月29日并入DigitalGlobe corporation。有关数据集的更多信息,请使用命令类型boston.txt类型boston_ovr.txt

文件concord_orthow_w.tifconcord_ortho_e.tif使用来自马萨诸塞州联邦地理信息局(MassGIS)、技术和安全服务执行办公室的正射影像片。有关数据集的更多信息,请使用命令类型concord_ortho.txt。有关到MassGIS提供的数据的更新链接,请参见https://www.mass.gov/service-details/massgis-data-layers

该DTED文件n39_w106_3arc_v2.dt1由美国地质调查局提供。

也可以看看

|||