geotiffwrite
Write GeoTIFF file
Description
geotiffwrite(___,
writes an image or data grid with one or more Name,Value
)Name,Value
pair
arguments that control various characteristics of the output file.
Examples
Write Image from JPEG File to GeoTIFF File
Read a JPEG image from a file.
basename = "boston_ovr"; imagefile = basename + ".jpg"; RGB = imread(imagefile);
Derive the world file name from image file name, read the world file, and create a reference object.
worldfile = getworldfilename(imagefile);
R = worldfileread(worldfile,"geographic",size(RGB));
Write the image data and reference object to a GeoTIFF file.
filename = basename + ".tif";
geotiffwrite(filename, RGB, R)
Create a map and display the data from the file.
figure usamap(RGB,R) geoshow(filename)
Convert Classic TIFF to Tiled BigTIFF
Convert a georeferenced classic TIFF file to a tiled BigTIFF file by extracting information from the classic TIFF file. First, import a classic TIFF image of Boston and a map cells reference object. Get metadata from the file using geotiffinfo
.
infilename = "boston.tif";
[A,R] = readgeoraster(infilename);
info = geotiffinfo(infilename);
Specify tags to include in the tiled BigTIFF file. To do this, extract the GeoKey directory tag from the metadata. Then, create tags specifying the length and width of the tiles.
geoTags = info.GeoTIFFTags.GeoKeyDirectoryTag; tiffTags = struct(TileLength=1024,TileWidth=1024);
Write the data to a new GeoTIFF file. Specify the file format as BigTIFF using the TiffType
argument. Include tags by specifying the GeoKeyDirectoryTag
and TiffTags
arguments.
outfilename = "boston_bigtiff.tif"; geotiffwrite(outfilename,A,R,TiffType="bigtiff", ... GeoKeyDirectoryTag=geoTags,TiffTags=tiffTags)
Verify you have written the BigTIFF file by reading the file and querying the tags.
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)
Write WMS Image to GeoTIFF File
Read data from WMS server.
nasaLayers = wmsfind('nasa','SearchField','serverurl'); layerName = 'bluemarbleng'; layer = refine(nasaLayers, layerName,'SearchField','layername', ... 'MatchType','exact'); [A, R] = wmsread(layer(1));
Write data to GeoTIFF file.
filename = [layerName '.tif'];
geotiffwrite(filename,A,R)
View data in file.
figure
worldmap world
geoshow(filename)
Write Concord Orthophotos to Single GeoTIFF File
Read two adjacent orthophotos. Create reference objects for the orthophotos by reading their world files.
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));
Merge the orthophotos.
[X,R] = mergetiles(X_west,R_west,X_east,R_east);
Write the merged image to a GeoTIFF file. Use the code number 26986
, which indicates the PCS_NAD83_Massachusetts Projected Coordinate System.
coordRefSysCode = 26986;
filename = "concord_ortho.tif";
geotiffwrite(filename,X,R,CoordRefSysCode=coordRefSysCode);
Display the contents of the GeoTIFF file on a map.
figure mapshow(filename)
Write Subset of GeoTIFF File to New GeoTIFF File
Import a GeoTIFF image and map cells reference object for an area around Boston using readgeoraster
.
[A,RA] = readgeoraster("boston.tif");
Crop the data to the limits specified by xlimits
and ylimits
using mapcrop
.
xlimits = [764318 767678]; ylimits = [2951122 2954482]; [B,RB] = mapcrop(A,RA,xlimits,ylimits);
Get information about the GeoTIFF image using geotiffinfo
. Extract the GeoKey directory tag from the information.
info = geotiffinfo("boston.tif");
key = info.GeoTIFFTags.GeoKeyDirectoryTag;
Write the cropped data and GeoKey directory tag to a file. Verify the cropped data has been written to a file by displaying it.
filename = "boston_subimage.tif";
geotiffwrite(filename,B,RB,GeoKeyDirectoryTag=key)
figure
mapshow(filename)
Write Elevation Data to GeoTIFF File
Write elevation data for an area around South Boulder Peak in Colorado to a GeoTIFF file. First, import the elevation data and a geographic postings reference object.
[Z,R] = readgeoraster('n39_w106_3arc_v2.dt1','OutputType','double');
Specify GeoKey directory tag information for the GeoTIFF file as a structure. Indicate the data is in a geographic coordinate system by specifying the GTModelTypeGeoKey
field as 2. Indicate that the reference object uses postings (rather than cells) by specifying the GTRasterTypeGeoKey
field as 2. Indicate the data is referenced to a geographic coordinate reference system by specifying the GeographicTypeGeoKey
field as 4326.
key.GTModelTypeGeoKey = 2; key.GTRasterTypeGeoKey = 2; key.GeographicTypeGeoKey = 4326;
Write the data and GeoKey directory tag to a file.
filename = 'southboulder.tif'; geotiffwrite(filename,Z,R,'GeoKeyDirectoryTag',key)
Verify the data has been written to a file by displaying it on a map.
usamap([39 40],[-106 -105]) g = geoshow(filename,'DisplayType','mesh'); demcmap(g.CData)
The elevation data used in this example is courtesy of the US Geological Survey.
Write TIFF File Containing RPC Metadata
Create a sample TIFF file with RPC metadata. To do this, create an array of zeros and an associated reference object.
A = zeros(180,360); latlim = [-90 90]; lonlim = [-180 180]; RA = georefcells(latlim,lonlim,size(A));
Then, create an RPCCoefficientTag
metadata object and set some fields with typical values. The RPCCoefficientTag
object represents RPC metadata in a readable form.
rpctag = map.geotiff.RPCCoefficientTag; rpctag.LineOffset = 1; rpctag.SampleOffset = 1; rpctag.LineScale = 2; rpctag.SampleScale = 2; rpctag.GeodeticHeightScale = 500;
Write the image, the associated referencing object, and the RPCCoefficientTag
object to a file.
geotiffwrite('myfile',A,RA,'RPCCoefficientTag',rpctag)
Write Raw RPC Coefficient Metadata to GeoTIFF File
This example shows how to write RPC coefficient metadata to a TIFF file. In a real workflow, you would create the RPC coefficient metadata according to the TIFF extension specification. This example does not show the specifics of how to create valid RPC metadata. To simulate raw RPC metadata, the example creates a sample TIFF file with RPC metadata and then uses imfinfo
to read this RPC metadata in raw, unprocessed form from the file. The example then writes this raw RPC metadata to a file using the geotiffwrite
function.
Create Raw RPC Coefficient Metadata
To simulate raw RPC metadata, create a simple test file and write some RPC metadata to the file. For this test file, create a toy image and a referencing object associated with the image.
myimage = zeros(180,360); latlim = [-90 90]; lonlim = [-180 180]; R = georefcells(latlim,lonlim,size(myimage));
Create an RPCCoefficientTag
metadata object and set some of the fields. The toolbox uses the RPCCoefficientTag
object to represent RPC metadata in human readable form.
rpctag = map.geotiff.RPCCoefficientTag; rpctag.LineOffset = 1; rpctag.SampleOffset = 1; rpctag.LineScale = 2; rpctag.SampleScale = 2; rpctag.GeodeticHeightScale = 500;
Write the image, the associated referencing object, and the RPCCoefficientTag
object to a file.
geotiffwrite('myfile',myimage,R,'RPCCoefficientTag',rpctag)
Read Raw RPC Coefficient Metadata
Read the RPC coefficient metadata from the test file using the imfinfo
function. When it encounters unfamiliar metadata, imfinfo
returns the data, unprocessed, in the UnknownTags
field. Note that the UnknownTags
field contains an array of 92 doubles. This is the raw RPC coefficient metadata, read from the file in unprocessed form.
info = imfinfo('myfile.tif');
info.UnknownTags
ans = 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]
Write Raw RPC Metadata to a File
Write the raw RPC metadata to a file. First, extract the RPC coefficient metadata from the info structure.
value = info.UnknownTags.Value;
Then, construct an RPCCoefficientTag
object, passing the raw RPC metadata (array of 92 doubles) as an argument.
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]
Pass the RPCCoefficientTag
object to the geotiffwrite
function and write the RPC metadata to a file.
geotiffwrite('myfile2',myimage,R,'RPCCoefficientTag',rpcdata)
To verify that the data was written to the file, read the RPC metadata from the TIFF file using geotiffinfo
. Compare the returned RPC metadata with the metadata written to the test file.
ginfo = geotiffinfo('myfile2');
ginfo.GeoTIFFTags.RPCCoefficientTag
ans = 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]
Input Arguments
filename
— Name and location of output file
character vector | string scalar
Name and location of output file, specified as a string scalar or
character vector. If your filename
includes an
extension, it must be '.tif'
or
'.TIF'
. If the input, A
, is at
least 160-by-160 in size, the output file is a tiled GeoTIFF file.
Otherwise, geotiffwrite
organizes the output file as
rows-per-strip.
Data Types: char
| string
A
— Georeferenced image or data grid
M-by-N numeric matrix | M-by-N-by-P
numeric array
Georeferenced image or data grid, specified as one of the following:
An M-by-N numeric matrix representing a grayscale image or data grid
An M-by-N-by-P numeric array representing a color image, multispectral image, hyperspectral image, or data grid
The coordinates of A
are geographic and in the
'WGS 84'
coordinate system, unless you specify
'GeoKeyDirectoryTag'
or
'CoordRefSysCode'
and indicate a different coordinate
system.
Data Types: double
| single
| uint8
| uint16
| uint32
| int8
| int16
| int32
| logical
R
— Spatial referencing information
geographic raster reference object | map raster reference object
Spatial referencing information, specified as a geographic raster
reference object of type GeographicCellsReference
or
GeographicPostingsReference
or a
map raster reference object of type MapCellsReference
or MapPostingsReference
.
If you are working with image coordinates in a projected coordinate system
and R
is a map raster reference object, specify
'GeoKeyDirectoryTag'
or
'CoordRefSysCode'
accordingly.
The geotiffwrite
function does not use information
contained in the GeographicCRS
property of geographic
raster reference objects or the ProjectedCRS
property
of map raster reference objects.
X
— Indexed image
M-by-N numeric matrix
Indexed image data, specified as an M-by-N numeric matrix.
Data Types: uint8
| uint16
cmap
— Color map
c-by-3 numeric matrix
Color map associated with indexed image X
, specified
as an c-by-3 numeric matrix. There are
c colors in the color map, each represented by a red,
green, and blue pixel value.
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: 'CoordRefSysCode',26986
CoordRefSysCode
— Coordinate reference system code
4326
(default) | positive integer | string scalar | character vector
Coordinate reference system code for the coordinates of the data,
specified as the comma-separated pair consisting of
'CoordRefSysCode'
and a positive integer, string
scalar, or character vector. You can specify coordinates in either a
geographic or a projected coordinate system. If you specify the
coordinate system with a string scalar or character vector, include the
'EPSG:'
prefix. To find code numbers, see the EPSG registry or the
GeoTIFF specification in the Tips section.
If you specify both the GeoKeyDirectoryTag
and
the CoordRefSysCode
, the coordinate system code in
CoordRefSysCode
takes precedence over the
coordinate system key found in the
GeoKeyDirectoryTag
. If one value specifies a
geographic coordinate system and the other value specifies a projected
coordinate system, you receive an error.
If you do not specify a value for this argument, the default value is
4326
, indicating that the coordinates are
geographic and in the 'WGS 84'
geographic coordinate
system.
Example: 26986
Example: 'EPSG:26986'
GeoKeyDirectoryTag
— GeoKey directory tag
structure
GeoKey directory tag, specified as the comma-separated pair consisting
of 'GeoKeyDirectoryTag'
and a structure that
specifies the GeoTIFF coordinate reference system and meta-information.
The structure contains field names that match the GeoKey names in the
GeoTIFF specification. The field names are case insensitive. The
structure can be obtained from the GeoTIFF information structure,
returned by geotiffinfo
, in the
field, GeoTIFFTags.GeoKeyDirectoryTag
.
if you specify the GTRasterTypeGeoKey
field,
geotiffwrite
ignores it. The value for this
GeoKey is derived from R
. If you set certain fields
of the GeoKeyDirectoryTag
to inconsistent settings,
you receive an error message. For instance, if R
is
a geographic raster reference object and you specify a
ProjectedCSTypeGeoKey
field or set the
GTModelTypeGeoKey
field to 1 (projected
coordinate system), you receive an error. Likewise, if
R
is a map raster reference object and you do
not specify a ProjectedCSTypeGeoKey
field or a
CoordRefSysCode
, or the
GTModelTypeGeoKey
field is set to 2 (geographic
coordinate system), you receive an error message.
RPCCoefficientTag
— Rational Polynomial Coefficients (RPC) tag
RPCCoefficientTag
object
Values for the optional RPC TIFF tag, specified as the
comma-separated pair consisting of
'RPCCoefficientTag'
and an RPCCoefficientTag
object.
TiffTags
— TIFF tags
structure
Values for the TIFF tags in the output file, specified as the
comma-separated pair consisting of 'TiffTags'
and a
structure. The field names of the structure match the TIFF tag names
supported by the Tiff class. The field names are case
insensitive.
You cannot set most TIFF tags using the structure input.
TiffTags
Exceptions
BitsPerSample | SubFileType | GeoAsciiParamsTag |
SampleFormat | SubIFD | GeoDoubleParamsTag |
SamplesPerPixel | TileByteCounts | GeoKeyDirectoryTag |
StripByteCounts | TileOffsets | ModelPixelScaleTag |
StripOffsets | ImageLength | ModelTiepointTag |
ColorMap | ImageWidth | ModelTransformationTag |
The function sets several TIFF tags. The field names corresponding to the TIFF tag, their corresponding field values set by the function, their permissible values (if different from the Tiff class), and their data type are noted in the following table.
Automatic TIFF Tags
Field Name | Description |
---|---|
Compression
|
Type of image compression. The default is
Numeric values,
|
PhotometricInterpretation |
Type of photometric interpretation. The field name
can be shortened to |
Software | Software maker of the file. The value is set to
the value |
RowsPerStrip
|
A scalar positive integer-valued number specifying
the desired rows per strip in the output file. If
the size of A is less than
|
TileWidth
|
A scalar positive integer-valued number and a
multiple of 16 specifying the width of the tiles.
|
TileLength
|
A scalar positive integer-valued number and a
multiple of 16 specifying the length of the tiles.
|
TiffType
— Type of TIFF file
'classictiff'
(default) | 'bigtiff'
Type of TIFF file, specified as the comma-separated pair consisting of
'TiffType'
and either
'classictiff'
or 'bigtiff'
.
The 'classictiff'
value creates a Classic TIFF file.
The 'bigtiff'
value creates a BigTIFF file. In
BigTIFF format, files can be larger than 4 GB.
While using the 'bigtiff'
format enables you to
create files larger than 4 GB, the data you want to write must fit in
memory.
Tips
If you are working with image coordinates in a projected coordinate system and
R
is a map raster reference object, set theGeoKeyDirectoryTag
orCoordRefSysCode
argument, accordingly.Check the GeoTIFF specification for values of the following parameters:
'CoordRefSysCode'
value for geographic coordinate systems'CoordRefSysCode'
value for projected coordinate systemsGeoKey field names for the
'GeoKeyDirectoryTag'
Version History
Introduced before R2006aR2024b: geotiffwrite
does not accept referencing vectors or referencing matrices as input
The geotiffwrite
function does not accept referencing vectors
or referencing matrices as input. Use a geographic raster reference object
(specified as a GeographicCellsReference
or GeographicPostingsReference
object) or a map raster reference object
(specified as a MapCellsReference
or MapPostingsReference
object) as input instead. Reference objects have
several advantages over referencing vectors and referencing matrices.
Unlike referencing vectors and referencing matrices, reference objects have properties that document the size of the associated raster, its limits, and the direction of its rows and columns.
You can manipulate the limits of rasters associated with reference objects using the
geocrop
ormapcrop
function.You can manipulate the size and resolution of rasters associated with reference objects using the
georesize
ormapresize
function.
Depending on whether the referencing vector or referencing matrix is in geographic or planar coordinates, there are different ways to update your code.
Geographic Coordinates
If the referencing vector or referencing matrix is in geographic coordinates, create a geographic reference object.
Create a geographic reference object for a raster of cells by using the
georefcells
function.Create a geographic reference object for a raster of regularly posted samples by using the
georefpostings
function.Convert from a referencing vector to a geographic reference object by using the
refvecToGeoRasterReference
function.Convert from a referencing matrix to a geographic reference object by using the
refmatToGeoRasterReference
function.
Once you have created a reference object, replace uses of the referencing vector or referencing matrix in your code with the reference object.
Planar Map Coordinates
If the referencing vector or referencing matrix is in planar map coordinates, create a map reference object.
Create a map reference object for a raster of cells by using the
maprefcells
function.Create a map reference object or for a raster of regularly posted samples by using the
maprefpostings
function.Convert from a referencing matrix to a map reference object by using the
refmatToMapRasterReference
function.
Once you have created a reference object, replace uses of the referencing vector or referencing matrix in your code with the reference object.
R2023b: geotiffwrite
will not accept referencing vectors or referencing matrices as input
When you specify a referencing vector or referencing matrix as input, the
geotiffwrite
function issues a warning that it will not
accept referencing vectors or referencing matrices as input in a future
release.
R2018a: Export data containing more than 4 GB in BigTIFF format
Specify the format of the GeoTIFF file to write as either classic TIFF or BigTIFF
by using the TiffType
name-value argument. The BigTIFF format
enables you to create files that exceed 4 GB in size.
See Also
geotiffinfo
| readgeoraster
| imread
| imwrite
| RPCCoefficientTag
| Tiff
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.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)