geotiffwrite
写入 GeoTIFF 文件
说明
示例
从文件中读取一张 JPEG 图像。
basename = "boston_ovr"; imagefile = basename + ".jpg"; RGB = imread(imagefile);
从图像文件名推导世界文件名,读取世界文件,并创建一个参考对象。
worldfile = getworldfilename(imagefile);
R = worldfileread(worldfile,"geographic",size(RGB));将图像数据和参考对象写入 GeoTIFF 文件。
filename = basename + ".tif";
geotiffwrite(filename, RGB, R)创建地图并显示文件中的数据。
figure usamap(RGB,R) geoshow(filename)

通过提取经典 TIFF 文件中的信息,将其转换为分块的 BigTIFF 文件。首先,导入一张经典的波士顿 TIFF 图像和一个地图单元参考对象。使用 geotiffinfo 从文件中获取元数据。
infilename = "boston.tif";
[A,R] = readgeoraster(infilename);
info = geotiffinfo(infilename);指定要包含在瓦片式 BigTIFF 文件中的标签。为此,请从元数据中提取 GeoKey 目录标签。然后,创建指定瓷砖长度和宽度的标签。
geoTags = info.GeoTIFFTags.GeoKeyDirectoryTag; tiffTags = struct(TileLength=1024,TileWidth=1024);
将数据写入新的 GeoTIFF 文件。使用 TiffType 参数将文件格式指定为 BigTIFF。通过指定 GeoKeyDirectoryTag 和 TiffTags 参数来包含标签。
outfilename = "boston_bigtiff.tif"; geotiffwrite(outfilename,A,R,TiffType="bigtiff", ... GeoKeyDirectoryTag=geoTags,TiffTags=tiffTags)
通过读取文件并查询标签来验证您是否已写入 BigTIFF 文件。
biginfo = geotiffinfo(outfilename); biginfo.GeoTIFFTags.GeoKeyDirectoryTag
ans = struct with fields:
GTModelTypeGeoKey: 1
GTRasterTypeGeoKey: 1
ProjectedCSTypeGeoKey: 26986
PCSCitationGeoKey: 'State Plane Zone 2001 NAD = 83'
ProjLinearUnitsGeoKey: 9003
t = Tiff(outfilename);
getTag(t,"TileLength")ans = 1024
getTag(t,"TileWidth")ans = 1024
close(t)
从 WMS 服务器读取数据。
nasaLayers = wmsfind("nasa",SearchField="serverurl"); layerName = "bluemarbleng"; layer = refine(nasaLayers, layerName,SearchField="layername", ... MatchType="exact"); [A,R] = wmsread(layer(1));
将数据写入 GeoTIFF 文件。
filename = layerName + ".tif";
geotiffwrite(filename,A,R)查看文件中的数据。
figure
worldmap world
geoshow(filename)
读取两幅相邻的正射影像。通过读取正射影像的世界文件来创建其参考对象。
X_west = imread("concord_ortho_w.tif"); X_east = imread("concord_ortho_e.tif"); R_west = worldfileread("concord_ortho_w.tfw","planar",size(X_west)); R_east = worldfileread("concord_ortho_e.tfw","planar",size(X_east));
合并正射影像。
[X,R] = mergetiles(X_west,R_west,X_east,R_east);
将合并后的图像写入 GeoTIFF 文件。使用代码编号 26986,该代码表示 PCS_NAD83_马萨诸塞州投影坐标系。
coordRefSysCode = 26986;
filename = "concord_ortho.tif";
geotiffwrite(filename,X,R,CoordRefSysCode=coordRefSysCode);在地图上显示 GeoTIFF 文件的内容。
figure mapshow(filename)

使用 readgeoraster 导入波士顿周边区域的 GeoTIFF 图像和地图单元参考对象。
[A,RA] = readgeoraster("boston.tif");使用 mapcrop 将数据裁剪至由 xlimits 和 ylimits 指定的边界。
xlimits = [764318 767678]; ylimits = [2951122 2954482]; [B,RB] = mapcrop(A,RA,xlimits,ylimits);
使用 geotiffinfo 获取 GeoTIFF 图像的信息。从信息中提取 GeoKey 目录标签。
info = geotiffinfo("boston.tif");
key = info.GeoTIFFTags.GeoKeyDirectoryTag;将裁剪后的数据和 GeoKey 目录标签写入文件。通过显示裁剪后的数据,验证其是否已写入文件。
filename = "boston_subimage.tif";
geotiffwrite(filename,B,RB,GeoKeyDirectoryTag=key)
figure
mapshow(filename)
将科罗拉多州南博尔德峰周边区域的高程数据写入 GeoTIFF 文件。首先,导入高程数据和地理坐标参考对象。
[Z,R] = readgeoraster('n39_w106_3arc_v2.dt1','OutputType','double');
为 GeoTIFF 文件指定 GeoKey 目录标签信息,作为结构体。通过将 GTModelTypeGeoKey 字段设置为 2,表明数据采用地理坐标系。通过将 GTRasterTypeGeoKey 字段设置为 2,表明参考对象使用的是点阵(而非单元)。通过将 GeographicTypeGeoKey 字段设置为 4326,表明数据采用地理坐标参考系。
key.GTModelTypeGeoKey = 2; key.GTRasterTypeGeoKey = 2; key.GeographicTypeGeoKey = 4326;
将数据和 GeoKey 目录标签写入文件。
filename = 'southboulder.tif'; geotiffwrite(filename,Z,R,'GeoKeyDirectoryTag',key)
通过在地图上显示数据来验证数据是否已写入文件。
usamap([39 40],[-106 -105]) g = geoshow(filename,'DisplayType','mesh'); demcmap(g.CData)

本示例所用高程数据由美国地质调查局提供。
创建一个带有 RPC 元数据的示例 TIFF 文件。为此,请创建一个全为零的数组及其关联的参考对象。
A = zeros(180,360); latlim = [-90 90]; lonlim = [-180 180]; RA = georefcells(latlim,lonlim,size(A));
然后,创建一个名为 RPCCoefficientTag 的元数据对象,并为其设置若干字段及其典型值。RPCCoefficientTag 对象以可读形式表示 RPC 元数据。
rpctag = map.geotiff.RPCCoefficientTag; rpctag.LineOffset = 1; rpctag.SampleOffset = 1; rpctag.LineScale = 2; rpctag.SampleScale = 2; rpctag.GeodeticHeightScale = 500;
将图像、关联的参考对象以及 RPCCoefficientTag 对象写入文件。
geotiffwrite('myfile',A,RA,'RPCCoefficientTag',rpctag)
此示例演示了如何将 RPC 系数元数据写入 TIFF 文件。在实际工作流程中,您需要根据 TIFF 扩展规范创建 RPC 系数元数据。此示例并未展示如何创建有效 RPC 元数据的具体方法。为模拟原始 RPC 元数据,该示例创建了一个带有 RPC 元数据的样本 TIFF 文件,随后使用 imfinfo 工具以原始未处理形式从文件中读取这些 RPC 元数据。该示例随后使用 geotiffwrite 函数将原始 RPC 元数据写入文件。
创建原始 RPC 系数元数据
要模拟原始 RPC 元数据,请创建一个简单的测试文件,并在文件中写入一些 RPC 元数据。对于此测试文件,请创建一个玩具图像及其关联的参考对象。
myimage = zeros(180,360); latlim = [-90 90]; lonlim = [-180 180]; R = georefcells(latlim,lonlim,size(myimage));
创建一个 RPCCoefficientTag 元数据对象并设置其中部分字段。该工具箱使用 RPCCoefficientTag 对象以人类可读的形式表示 RPC 元数据。
rpctag = map.geotiff.RPCCoefficientTag; rpctag.LineOffset = 1; rpctag.SampleOffset = 1; rpctag.LineScale = 2; rpctag.SampleScale = 2; rpctag.GeodeticHeightScale = 500;
将图像、关联的参考对象以及 RPCCoefficientTag 对象写入文件。
geotiffwrite('myfile',myimage,R,'RPCCoefficientTag',rpctag)
读取原始 RPC 系数元数据
使用 imfinfo 函数从测试文件中读取 RPC 系数元数据。当遇到不熟悉的元数据时,imfinfo 会将数据未经处理地返回至 UnknownTags 字段。请注意,UnknownTags 字段包含一个由 92 个双精度数组组成的数组。这是原始的 RPC 系数元数据,以未经处理的形式从文件中读取。
info = imfinfo('myfile.tif');
info.UnknownTagsans = struct with fields:
ID: 50844
Offset: 10680
Value: [-1 -1 1 1 0 0 0 2 2 1 1 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
将原始 RPC 元数据写入文件
将原始 RPC 元数据写入文件。首先,从信息结构中提取 RPC 系数元数据。
value = info.UnknownTags.Value;
然后,构造一个 RPCCoefficientTag 对象,并将原始 RPC 元数据(92 个双精度浮点数的数组)作为参数传递。
rpcdata = map.geotiff.RPCCoefficientTag(value)
rpcdata =
RPCCoefficientTag with properties:
BiasErrorInMeters: -1
RandomErrorInMeters: -1
LineOffset: 1
SampleOffset: 1
GeodeticLatitudeOffset: 0
GeodeticLongitudeOffset: 0
GeodeticHeightOffset: 0
LineScale: 2
SampleScale: 2
GeodeticLatitudeScale: 1
GeodeticLongitudeScale: 1
GeodeticHeightScale: 500
LineNumeratorCoefficients: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
LineDenominatorCoefficients: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
SampleNumeratorCoefficients: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
SampleDenominatorCoefficients: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
将 RPCCoefficientTag 对象传递给 geotiffwrite 函数,并将 RPC 元数据写入文件。
geotiffwrite('myfile2',myimage,R,'RPCCoefficientTag',rpcdata)
为验证数据是否已写入文件,请使用 geotiffinfo 从 TIFF 文件中读取 RPC 元数据。将返回的 RPC 元数据与写入测试文件的元数据进行比较。
ginfo = geotiffinfo('myfile2');
ginfo.GeoTIFFTags.RPCCoefficientTagans =
RPCCoefficientTag with properties:
BiasErrorInMeters: -1
RandomErrorInMeters: -1
LineOffset: 1
SampleOffset: 1
GeodeticLatitudeOffset: 0
GeodeticLongitudeOffset: 0
GeodeticHeightOffset: 0
LineScale: 2
SampleScale: 2
GeodeticLatitudeScale: 1
GeodeticLongitudeScale: 1
GeodeticHeightScale: 500
LineNumeratorCoefficients: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
LineDenominatorCoefficients: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
SampleNumeratorCoefficients: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
SampleDenominatorCoefficients: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
输入参数
输出文件的名称和位置,指定为字符串标量或字符向量。如果您的 filename 包含扩展名,则必须为 '.tif' 或 '.TIF'。若输入文件 A 的大小至少为 160×160,则输出文件为分块的 GeoTIFF 文件。否则,geotiffwrite 将输出文件按每条带一行进行组织。
数据类型: char | string
地理参考图像或数据网格,指定为以下之一:
一个由 M×N 组成的数字矩阵,表示灰度图像或数据网格
一个由 M×N×P 组成的数组,表示彩色图像、多光谱图像、高光谱图像或数据网格。
A 的坐标为地理坐标,且采用 'WGS 84' 坐标系,除非您指定 'GeoKeyDirectoryTag' 或 'CoordRefSysCode' 并标明使用其他坐标系。
数据类型: double | single | uint8 | uint16 | uint32 | int8 | int16 | int32 | logical
空间参考信息,指定为类型为 GeographicCellsReference 或 GeographicPostingsReference 的地理栅格参考对象,或类型为 MapCellsReference 或 MapPostingsReference 的地图栅格参考对象。
若您在投影坐标系中处理图像坐标,且 R 是地图栅格参考对象,则应相应地指定 'GeoKeyDirectoryTag' 或 'CoordRefSysCode'。
geotiffwrite 函数不使用地理栅格参考对象的 GeographicCRS 属性或地图栅格参考对象的 ProjectedCRS 属性所包含的信息。
索引图像数据,指定为一个 M×N 数值矩阵。
数据类型: uint8 | uint16
与索引图像 X 关联的颜色映射,指定为 c×3 数值矩阵。颜色映射中包含 c 种颜色,每种颜色由红、绿、蓝三原色像素值表示。
名称-值参数
将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: 'CoordRefSysCode',26986
数据坐标的坐标参考系代码,指定为逗号分隔对组,其中包含 'CoordRefSysCode' 和一个正整数、字符串标量或字符向量。您可以使用地理坐标系或投影坐标系来指定坐标。若使用字符串标量或字符向量指定坐标系,请包含前缀 'EPSG:'。要查找代码编号,请参阅 EPSG 注册表或 GeoTIFF 规范中的提示部分。
若同时指定 GeoKeyDirectoryTag 和 CoordRefSysCode,则 CoordRefSysCode 中的坐标系代码优先于 GeoKeyDirectoryTag 中找到的坐标系键。如果一个值指定地理坐标系,而另一个值指定投影坐标系,则会出现错误。
若未为该参数指定值,则默认值为 4326,表示坐标为地理坐标且采用 'WGS 84' 地理坐标系。
示例: 26986
示例: 'EPSG:26986'
GeoKey 目录标签,指定为逗号分隔对组,其中包含 'GeoKeyDirectoryTag' 和一个结构体,该结构体用于指定 GeoTIFF 坐标参考系及元数据。该结构包含与 GeoTIFF 规范中 GeoKey 名称相匹配的字段名称。字段名称不区分大小写。该结构可从 GeoTIFF 信息结构中获取,该结构由 geotiffinfo 返回,位于字段 GeoTIFFTags.GeoKeyDirectoryTag 中。
若指定了 GTRasterTypeGeoKey 字段,geotiffwrite 将忽略该字段。此 GeoKey 的值源自 R。若将 GeoKeyDirectoryTag 的某些字段设置为不一致的配置,系统将显示错误提示。例如,如果 R 是地理栅格参考对象,而您指定了 ProjectedCSTypeGeoKey 字段或将 GTModelTypeGeoKey 字段设置为 1(投影坐标系),则会收到错误提示。同样地,如果 R 是地图栅格参考对象,而您未指定 ProjectedCSTypeGeoKey 字段或 CoordRefSysCode 字段,或者 GTModelTypeGeoKey 字段设置为 2(地理坐标系),则会收到错误消息。
可选的 RPC TIFF 标签值,指定为逗号分隔对组,其中包含 'RPCCoefficientTag' 和一个 RPCCoefficientTag 对象。
输出文件中 TIFF 标签的值,指定为逗号分隔对组,其中包含 'TiffTags' 和一个结构体。该结构的字段名称与 Tiff 类支持的 TIFF 标签名称相匹配。字段名称不区分大小写。
您无法通过结构输入设置大多数 TIFF 标签。
TiffTags 异常
BitsPerSample | SubFileType | GeoAsciiParamsTag |
SampleFormat | SubIFD | GeoDoubleParamsTag |
SamplesPerPixel | TileByteCounts | GeoKeyDirectoryTag |
StripByteCounts | TileOffsets | ModelPixelScaleTag |
StripOffsets | ImageLength | ModelTiepointTag |
ColorMap | ImageWidth | ModelTransformationTag |
该函数设置了若干 TIFF 标签。下表列出了与 TIFF 标签对应的字段名称、由该函数设置的对应字段值、其允许值(若与 TIFF 类不同)及其数据类型。
自动 TIFF 标签
| 字段名称 | 描述 |
|---|---|
Compression | 图像压缩类型。默认值为 数字值、 |
PhotometricInterpretation | 光度解释类型。字段名称可缩写为 |
Software | 该文件的软件制造商。该值被设置为值 |
RowsPerStrip | 一个标量正整数值,用于指定输出文件中每条带所需的行数。若 A 的大小小于 |
TileWidth | 一个标量正整数值和 16 的倍数,用于指定瓦片的宽度。当 A 的大小大于 |
TileLength | 一个标量正整数值和 16 的倍数,用于指定瓦片的长度。当 A 的大小大于 |
TIFF 文件类型,指定为由 'TiffType' 与 'classictiff' 或 'bigtiff' 组成的逗号分隔对。'classictiff' 值将创建经典 TIFF 文件。'bigtiff' 值用于创建 BigTIFF 文件。采用 BigTIFF 格式时,文件大小可超过 4 GB。
虽然使用 'bigtiff' 格式可创建大于 4 GB 的文件,但要写入的数据必须能容纳在内存中。
提示
若您在投影坐标系中处理图像坐标,且
R是地图栅格参考对象,则需相应地设置GeoKeyDirectoryTag或CoordRefSysCode参数。请查阅 GeoTIFF 规范以获取下列参数的取值:
'CoordRefSysCode'地理坐标系的数值'CoordRefSysCode'投影坐标系的值'GeoKeyDirectoryTag'的 GeoKey 字段名称
版本历史记录
在 R2006a 之前推出geotiffwrite 函数不接受参考向量或参考矩阵作为输入。请改用地理栅格参考对象(指定为 GeographicCellsReference 或 GeographicPostingsReference 对象)或地图栅格参考对象(指定为 MapCellsReference 或 MapPostingsReference 对象)作为输入。参考对象相较于参考向量和参考矩阵具有若干优势。
根据参考向量或参考矩阵采用的是地理坐标还是平面坐标,代码的更新方式会有所不同。
地理坐标
如果参考向量或参考矩阵采用地理坐标,则创建地理参考对象。
使用
georefcells函数为单元栅格创建地理参考对象。使用
georefpostings函数为规则间隔采样栅格创建地理参考对象。使用
refvecToGeoRasterReference函数将参考向量转换为地理参考对象。使用
refmatToGeoRasterReference函数将参考矩阵转换为地理参考对象。
创建参考对象后,请将代码中参考的向量或矩阵替换为该参考对象。
平面地图坐标
如果参考向量或参考矩阵位于平面地图坐标系中,则创建一个地图参考对象。
使用
maprefcells函数为单元栅格创建地图参考对象。使用
maprefpostings函数创建地图参考对象或用于规则间隔采样的栅格。使用
refmatToMapRasterReference函数将参考矩阵转换为地图参考对象。
创建参考对象后,请将代码中参考的向量或矩阵替换为该参考对象。
当您指定参考向量或参考矩阵作为输入时,geotiffwrite 函数会发出警告,说明在未来的版本中将不再接受参考向量或参考矩阵作为输入。
使用 TiffType 名称-值参数指定要写入的 GeoTIFF 文件格式,可选经典 TIFF 或 BigTIFF 格式。BigTIFF 格式可创建超过 4 GB 的文件。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)