geotiffwrite
写入 GeoTIFF 文件
说明
示例
将一张波士顿的 JPEG 图片 [1] 作为数组读入工作区。
jpgFilename = "boston_ovr.jpg";
RGB = imread(jpgFilename);该图像由一个世界文件引用。根据图像文件的名称推导出世界文件的名称。然后,将世界文件作为栅格参考对象读入工作区。
worldfile = getworldfilename(jpgFilename);
R = worldfileread(worldfile,"geographic",size(RGB));将图像和参考对象写入一个 GeoTIFF 文件中。
tifFilename = "boston_ovr.tif";
geotiffwrite(tifFilename,RGB,R)将 GeoTIFF 文件作为数组和引用对象读入工作区。将该图像显示在地图上。
[RGB2,R2] = readgeoraster(tifFilename);
figure
geoimage(RGB2,R2)
geobasemap none
[1] The data used in this example includes material copyrighted by GeoEye, all rights reserved.
通过提取经典 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 数据库中搜索来自 EOX::Maps 的“蓝色弹珠”图层。有关 EOX::Maps 的更多信息,请参阅 EOX::Maps。
layer = wmsfind("tiles.maps.eox.at",SearchFields="serverurl"); layer = refine(layer,"bluemarble",MatchType="exact");
将该图层作为数组和栅格引用对象读入工作区。
[A,R] = wmsread(layer);
将数据写入 GeoTIFF 文件。
geotiffwrite("bluemarble.tif",A,R)将 GeoTIFF 文件作为数组和引用对象读入工作区。将该图像显示在地图上。
figure newmap geoimage(A,R)
使用文本框注解在地图上添加来源信息。
annotation("textbox",[0.52 0.05 0.47 0.1],EdgeColor="none", ... String="Blue Marble © NASA's Earth Observatory", ... VerticalAlignment="middle")

读取两幅相邻的正射影像。通过读取正射影像的世界文件来创建其参考对象。
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,该代码表示 NAD83 / 马萨诸塞州大陆投影坐标参考系 (CRS)。
tifFilename = "concord_ortho.tif";
coordRefSysCode = 26986;
geotiffwrite(tifFilename,X,R,CoordRefSysCode=coordRefSysCode);将 GeoTIFF 文件作为数组和引用对象读入工作区。使用存储在参考对象中的投影坐标系创建一张新地图。然后,将该图像显示在地图上。
[X2,R2] = readgeoraster(tifFilename); figure pcrs = R2.ProjectedCRS; newmap(pcrs) geoimage(X2,R2)

将波士顿的 GeoTIFF 图像 [1] 作为数组和栅格引用对象读入工作区。
[A,RA] = readgeoraster("boston.tif");将数据裁剪至由 xlimits 和 ylimits 指定的 xy 边界。
xlimits = [764318 767678]; ylimits = [2951122 2954482]; [B,RB] = mapcrop(A,RA,xlimits,ylimits);
将 GeoTIFF 图像的相关信息作为结构数组读入工作区。从结构数组中提取 GeoKey 目录标签。
info = geotiffinfo("boston.tif");
key = info.GeoTIFFTags.GeoKeyDirectoryTag;将裁剪后的数据和 GeoKey 目录标签写入一个新的 GeoTIFF 文件中。
geotiffwrite("boston_subimage.tif",B,RB,GeoKeyDirectoryTag=key)将新的 GeoTIFF 文件作为数组和引用对象读入工作区。使用存储在参考对象中的投影坐标系创建一张新地图。然后,将该图像显示在地图上。
[B2,RB2] = readgeoraster("boston_subimage.tif");
figure
pcrs = RB2.ProjectedCRS;
newmap(pcrs)
geoimage(B2,RB2)
[1] The data used in this example includes material copyrighted by GeoEye, all rights reserved.
将科罗拉多州南博尔德峰周边区域的高程数据写入 GeoTIFF 文件。
将高程数据 [1] 作为矩阵和栅格参考对象读入工作区。
[Z,R] = readgeoraster("n39_w106_3arc_v2.dt1");使用结构数组为 GeoTIFF 文件指定一个 GeoKey 目录标签。有关可指定的键的列表,请参阅 GeoTIFF 规范中的键 ID 摘要。
通过将
GTModelTypeGeoKey字段指定为2,表明该数据使用地理坐标。通过将
GTRasterTypeGeoKey字段指定为2,表明该数据是一组发布点样本的网格(而非单元格网格)。通过将
GeographicTypeGeoKey字段指定为4326,来指定数据的地理坐标参考系统 (CRS)。
key.GTModelTypeGeoKey = 2; key.GTRasterTypeGeoKey = 2; key.GeographicTypeGeoKey = 4326;
将数据和 GeoKey 目录标签写入文件。
filename = "southboulder.tif";
geotiffwrite(filename,Z,R,GeoKeyDirectoryTag=key)将 GeoTIFF 文件作为矩阵和参考对象读入工作区。然后,将数据显示在地图上。应用适合高程数据的颜色图。
[Z2,R2] = readgeoraster(filename);
figure
geopcolor(Z2,R2)
demcmap(Z2)
geobasemap none
[1] 本示例中使用的高程数据来自美国地质调查局。
创建一个带有 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.tif",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.tif",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.tif",myimage,R,RPCCoefficientTag=rpcdata)为验证数据是否已写入文件,请使用 geotiffinfo 从 TIFF 文件中读取 RPC 元数据。将返回的 RPC 元数据与写入测试文件的元数据进行比较。
ginfo = geotiffinfo("myfile2.tif");
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
A 或 X 的栅格参考,指定为 GeographicCellsReference、GeographicPostingsReference、MapCellsReference 或 MapPostingsReference 对象。
如果您正在投影坐标参考系中处理图像坐标,且 R 是一个地图栅格参考对象,请相应地指定 GeoKeyDirectoryTag 或 CoordRefSysCode 参量。
geotiffwrite 函数不使用地理栅格参考对象的 GeographicCRS 属性或地图栅格参考对象的 ProjectedCRS 属性所包含的信息。
索引图像,指定为一个 M 行、N 列的数值矩阵。
数据类型: uint8 | uint16
与索引图像 X 关联的颜色映射,指定为 c×3 数值矩阵。颜色映射中包含 c 种颜色,每种颜色由红、绿、蓝三原色像素值表示。
名称-值参数
将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
示例: geotiffwrite(filename,A,R,CoordRefSysCode=26986) 指定了坐标的坐标参考系代码。
如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: geotiffwrite(filename,A,R,"CoordRefSysCode",26986) 指定了坐标的坐标参考系代码。
数据的坐标所对应的坐标参考系代码,指定为正整数、字符串标量或字符向量。您可以使用地理坐标系或投影坐标系来指定坐标。若使用字符串标量或字符向量指定坐标系,请包含前缀 "EPSG:"。要查找代码编号,请参阅 EPSG 注册表或 GeoTIFF 规范中的提示部分。
如果同时指定了 GeoKeyDirectoryTag 和 CoordRefSysCode 参量,则 CoordRefSysCode 中的坐标系代码优先于 GeoKeyDirectoryTag 中找到的坐标系键。如果一个值指定的是地理坐标系,而另一个值指定的是投影坐标系,则该函数会报错。
如果未为此参量指定值,则默认值为 4326,表示坐标为地理坐标,且采用 WGS 84 地理坐标系。
示例: 26986
示例: "EPSG:26986"
GeoKey 目录标签,指定为一个结构体,用于指定 GeoTIFF 坐标参考系和信息。该结构包含与 GeoTIFF 规范中 GeoKey 名称相匹配的字段名称。字段名称不区分大小写。该结构可从 geotiffinfo 返回的 GeoTIFF 信息结构中的 GeoTIFFTags.GeoKeyDirectoryTag 字段中获取。
若指定了 GTRasterTypeGeoKey 字段,geotiffwrite 将忽略该字段。此 GeoKey 的值源自 R。如果将 GeoKeyDirectoryTag 的某些字段设置为不一致的值,该函数会报错。例如,如果 R 是一个地理栅格参考对象,而您指定了 ProjectedCSTypeGeoKey 字段或将 GTModelTypeGeoKey 字段设置为 1(投影坐标参考系),则该函数会报错。同样地,如果 R 是一个地图栅格参考对象,且您未指定 ProjectedCSTypeGeoKey 字段或 CoordRefSysCode 字段,或者 GTModelTypeGeoKey 字段被设置为 2(地理坐标参考系),则该函数会报错。
可选的 RPC TIFF 标签的值,指定为一个 RPCCoefficientTag 对象。
输出文件中 TIFF 标签的值,以结构体形式指定。该结构的字段名称与 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 文件类型,指定为 "classictiff" 或 "bigtiff"。"classictiff" 选项用于创建经典 TIFF 文件。"bigtiff" 选项用于创建 BigTIFF 文件。采用 BigTIFF 格式时,文件大小可超过 4 GB。
虽然使用 "bigtiff" 格式可创建大于 4 GB 的文件,但要写入的数据必须能容纳在内存中。
提示
若您在投影坐标系中处理图像坐标,且
R是地图栅格参考对象,则需相应地设置GeoKeyDirectoryTag或CoordRefSysCode参数。您可以通过查阅 GeoTIFF 规范来获取
CoordRefSysCode和GeoKeyDirectoryTag参量的值。
版本历史记录
在 R2006a 之前推出geotiffwrite 函数不接受参考向量或参考矩阵作为输入。请改用地理栅格参考对象(指定为 GeographicCellsReference 或 GeographicPostingsReference 对象)或地图栅格参考对象(指定为 MapCellsReference 或 MapPostingsReference 对象)作为输入。参考对象相较于参考向量和参考矩阵具有若干优势。
根据参考向量或参考矩阵采用的是地理坐标还是平面坐标,代码的更新方式会有所不同。
地理坐标
如果参考向量或参考矩阵采用地理坐标,则创建地理参考对象。
使用
georefcells函数为单元栅格创建地理参考对象。使用
georefpostings函数为规则间隔采样栅格创建地理参考对象。使用
refvecToGeoRasterReference函数将参考向量转换为地理参考对象。使用
refmatToGeoRasterReference函数将参考矩阵转换为地理参考对象。
创建参考对象后,请将代码中参考的向量或矩阵替换为该参考对象。
平面地图坐标
如果参考向量或参考矩阵位于平面地图坐标系中,则创建一个地图参考对象。
使用
maprefcells函数为单元栅格创建地图参考对象。使用
maprefpostings函数创建地图参考对象或用于规则间隔采样的栅格。使用
refmatToMapRasterReference函数将参考矩阵转换为地图参考对象。
创建参考对象后,请将代码中参考的向量或矩阵替换为该参考对象。
使用 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)