下面的示例演示如何将引用到标准地理和投影坐标系统的数据写入GeoTIFF文件geotiffwrite
.标记图像文件格式(TIFF)已经成为一种流行的存储光栅数据的格式。GeoTIFF规范定义了一组描述与TIFF光栅数据关联的“制图”信息的TIFF标记。使用这些标记,可以将引用地理坐标系统(纬度和经度)或(平面)投影坐标系统的坐标的地理图像或栅格网格存储在GeoTIFF文件中。
此示例创建几个临时GeoTIFF文件并使用变量数据目录
表示它们的位置。此处使用的值由坦普迪尔
命令,但您可以轻松自定义它数据目录
在示例的最后删除。
datadir=fullfile(tempdir,“datadir”);如果~exist(datadir,“dir”)mkdir(datadir)结束
定义一个匿名函数作为前缀数据目录
为输入文件名:
Datafile = @(filename)fullfile(datadir, filename);
将引用WGS84地理坐标的图像写入GeoTIFF文件。原始图像(boston_ovr.jpg)以JPEG格式存储,在“世界文件”(boston_ovr.jgw)中引用图像文件外部的信息。该图像提供了马萨诸塞州波士顿及其周边地区的低分辨率“概览”。
从JPEG文件中读取图像。
: =“波士顿奥弗”;imagefile = [basename“jpg”]; A1=imread(图像文件);
从世界文件中获取引用对象。
worldfile=getworldfilename(imagefile);R1=worldfileread(worldfile,“地理”,尺寸(A1));
将图像写入GeoTIFF文件。
filename1=数据文件([basename“.tif”]); geotiffwrite(文件名1、A1、R1)
返回关于文件的信息RasterInfo
对象。的值CoordinateReferenceSystem
是地理坐标参考系对象。
info1=georasterinfo(filename1);info1.coordinaereferencesystem
ans=geocrs,属性:名称:“WGS 84”基准:“世界大地测量系统1984”球体:[1×1参考椭球体]本初子午线:0角度单位:“度”
重新导入新的GeoTIFF文件,并在地图轴中正确显示波士顿概览图像。
图usamap(R1.横向极限,R1.纵向极限)setm(gca,“PLabelLocation”,0.05,“PlabelRound”,-2,“PlineLocation”,0.05)地理展示(文件名1)标题(“波士顿概览”)
加载高程光栅数据和地理单元格引用对象。将数据网格写入GeoTIFF文件。
负载topo60cZ2=topo60c;R2=topo60cR;文件名2=datafile(‘topo60c.tif’);geotiffwrite (filename2 Z2, R2)
数据网格中的值范围为-7473 ~ 5731。将网格显示为纹理映射的表面,而不是强度图像。
数字世界地图世界gridm从setm(gca,“MLabelParallel”, -90,“MLabelLocation”,90)tmap=geoshow(文件名2,“DisplayType”,“纹理贴图”);demcmap (tmap.CData)标题(“高程数据网格”)
当您使用geotiffwrite
或使用readgeoraster
,数据网格的列从北开始,行从西开始。例如,来自topo60c.mat
从南边开始,但输出数据从topo60c.tif
从北开始。
R2.ColumnsStartFrom[Z3,R3]=readgeoraster(文件名2);R3.ColumnsStartFrom
ans=‘南’ans=‘北’
因此,输入数据和GeoTIFF文件中的数据被翻转。
isequal (Z2 flipud (Z3))
ans=逻辑1
如果需要再次匹配工作区中的数据,请翻转Z值并设置引用对象,使列从南部开始:
R3.ColumnsStartFrom=“南方”;Z3=flipud(Z3);等质量(Z2,Z3)
ans=逻辑1
GeoTIFF文件中的数据使用正比例值进行编码。因此,当您使用普通TIFF查看软件查看文件时,数据集的北边缘位于顶部。要使输出文件中的数据布局与输入的数据布局匹配,您可以构造TIFF对象,并使用它重置一些标记和图像数据
t=Tiff(文件名2,“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)写(t, Z2);rewriteDirectory (t)关闭(t)
验证输入数据中的引用对象和数据网格是否与输出数据文件匹配。为此,请读取Tiff图像并创建引用对象。然后比较网格。
t = Tiff (filename2);Atiff =阅读(t);close(t) Rtiff = georefcells(R2.LatitudeLimits, r2 . longitude elimits,size(Atiff));Atiff isequal (Z2) isequal (R2, Rtiff)
ans=逻辑1 ans=逻辑1
将Concord正射影像写入单个GeoTIFF文件。两个相邻的(从西到东)地理参考灰度(全色)正射影像覆盖美国马萨诸塞州Concord的一部分。Concord_ortho.txt文件表示数据参考马萨诸塞州大陆(NAD83)州平面投影坐标系。单位为米。这对应于GeoTIFF规范中所述的GeoTIFF代码26986http://geotiff.maptools.org/spec/geotiff6.html#6.3.3.1PCS_NAD83_Massachusetts之下。
读两张正射影像。
[X_west, R_west] = readgeoraster (“concord_ortho_w.tif”);[X_east, R_east] = readgeoraster (“concord_ortho_e.tif”);
结合图像和参考对象。
X4=[X_西X_东];R4=鲁西;R4.XWorldLimits=[R_west.XWorldLimits(1)R_east.XWorldLimits(2)];R4.光栅尺寸=尺寸(X4);
将数据写入GeoTIFF文件。使用代码26986,表示PCS_NAD83_马萨诸塞投影坐标系。
coordRefSysCode=26986;filename4=datafile(“concord_ortho.tif”);geotiffwrite(文件名4、X4、R4、,“CoordRefSysCode”,coordRefSysCode)
返回关于文件的信息RasterInfo
对象。的值CoordinateReferenceSystem
是投影坐标参照系对象。
info4 = georasterinfo (filename4);info4。CoordinateReferenceSystem
ans=具有属性的项目:名称:“NAD83/马萨诸塞州大陆”地理[1×1 geocrs]投影方法:“Lambert圆锥共形(2SP)”长度单位:“米”投影参数:[1×1 map.crs.ProjectionParameters]
显示合并的协和正射影像。
图mapshow (filename4)标题(“联合正色摄影”)包含(“大陆国航飞机东行,米”) ylabel (“大陆国航飞机北上,米”)
将一个GeoTIFF文件的子集写入一个新的GeoTIFF文件。
从中读取RGB图像和参考信息波士顿.tif
GeoTIFF文件。
(A5, R5) = readgeoraster (“boston.tif”);
作物图像。
xlimits=[764318 767677];ylimits=[2951122 2954482];[A5crop,R5crop]=mapcrop(A5,R5,xlimits,ylimits);
将裁剪后的图像写入GeoTIFF文件。使用原始GeoTIFF文件中的GeoKeyDirectoryTag。
info5=geotiffinfo(“boston.tif”);filename5 =丢失(“boston_subimage.tif”);geotiffwrite(文件名5、A5crop、R5crop、,...“GeoKeyDirectoryTag”info5.GeoTIFFTags.GeoKeyDirectoryTag)
显示包含裁剪图像的GeoTIFF文件。
图mapshow (filename5)标题('芬威公园-裁剪图像从GeoTIFF文件')包含(“大陆国航飞机东行,测量尺”) ylabel ('大陆国机北行,测量英尺')
将科罗拉多州南博尔德峰周围区域的高程数据写入GeoTIFF文件。
elevFilename=‘n39_w106_3arc_v2.dt1’;
从文件中读取DEM。绘制数据使用地理展览
,数据必须是具有类型的仅有一个的
或双重的
。使用“OutputType”
名称-值对。
[Z6,R6]=readgeoraster(elevFilename,“OutputType”,“双”);
创建一个结构来保存GeoKeyDirectoryTag信息。
key=struct(...“GTModelTypeGeoKey”[],...“GTRasterTypeGeoKey”[],...“地理类型地理键”[]);
属性指示数据在地理坐标系统中GTModelTypeGeoKey
字段2。属性指示引用对象使用贴子(而不是单元格)GTRasterTypeGeoKey
字段2。属性指示数据被引用到地理坐标参考系统地理类型地理键
在4326年。
关键。GTModelTypeGeoKey = 2;关键。GTRasterTypeGeoKey = 2;关键。GeographicTypeGeoKey = 4326;
将高程数据写入GeoTIFF文件。
filename6 =丢失(“southboulder.tif”); geotiffwrite(文件名6、Z6、R6、,“GeoKeyDirectoryTag”键),
通过显示数据来验证数据已经写入到文件中。首先,输入代表科罗拉多州边界的病媒数据成形头
.然后,显示边界和GeoTIFF文件。
S = shaperead (“usastatelo”,“UseGeoCoords”符合事实的“选择器”,...{@(名称)(strcmp(名字,{“科罗拉多”})),“名字”});如图所示“科罗拉多”持有在geoshow(年代,“FaceColor”,“没有”) g = geoshow(filename6,“DisplayType”,“网”);demcmap (g.ZData)标题(“南Boulder Peak Elevation”)
如果您正在处理的数据网格是类double,其值范围超出浮点强度图像所要求的限制(0 <= data <= 1),并且如果您使用imwrite
,则您的数据将被截断为间隔[0,1],缩放并转换为uint8。显然,原始数据中的部分甚至所有信息都可能丢失。若要避免这些问题,并保留数据网格的数值类和范围,请使用geotiffwrite
写入数据。
创建示例Z数据。
n = 512;Z7 =山峰(n);
创建引用对象以将行和列引用到X和Y。
R7=maprasterref(“光栅大小”(n (n),“ColumnsStartFrom”,“北方”); R7.XWorldLimits=R7.xInTrinsic Limits;R7.YWorldLimits=R7.yInTrinsic Limits;
创建用于保存GeoKeyDirectoryTag信息的结构。将模型类型设置为1,表示投影坐标系(PCS)。
关键。GTModelTypeGeoKey = 1;
设置栅格类型为1,表示PixelIsArea(单元格)。
key.GTRasterTypeGeoKey=1;
使用值32767指示用户定义的投影坐标系统。
key.ProjectedCSTypeGeoKey=32767;
将数据写入GeoTIFF文件geotiffwrite
。为了进行比较,请使用编写第二个文件imwrite
.
filename\u 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);流('Class type of Z: %s\n',类别(Z7))fprintf(' GeoTIFF文件中的类类型数据:%s\n',类别(geoZ))fprintf('TIFF文件中数据的类别类型:%s\n',类别(tiffZ))fprintf(' GeoTIFF文件中的数据是否等于Z: %d\n',等质量(geoZ,Z7))fprintf(' TIFF文件中的数据是否等于Z: %d\n'isequal (tiffZ Z7))
Z的类类型:GeoTIFF文件中的双类数据类型:TIFF文件中的双类数据类型:uint8 GeoTIFF文件中的数据是否等于Z:1 TIFF文件中的数据是否等于Z:0
您可以使用查看数据网格地图秀
.
图mapshow (filename_geotiff,“DisplayType”,“纹理贴图”)头衔(“山峰-存储在GeoTIFF文件”)
您可能希望修改现有文件,但保留TIFF标记中的大部分(如果不是全部)元信息。这个例子转换的RGB图像从波士顿.tif
文件写入索引图像,并将新数据写入索引GeoTIFF文件。TIFF元信息(BitDepth、BitsPerSample和PhotometricInterpretation标记的值除外)将保留。
从屏幕上读取图像波士顿.tif
GeoTIFF文件。
(A8, R8) = readgeoraster (“boston.tif”);
利用MATLAB函数,rgb2ind
,将RGB图像转换为索引图像X
使用最小方差量化。
[出数,提出]= rgb2ind (A8, 65536);
通过以下方式获取TIFF标签信息imfinfo
.
info8=imfinfo(“boston.tif”);
创建TIFF标记结构,以从信息
结构
标签=结构(...“压缩”, info8。压缩,...“RowsPerStrip”, info8。RowsPerStrip,...“X分辨率”, info8。XResolution,...“YResolution”,info8.YResolution,...“ImageDescription”, info8。ImageDescription,...“DateTime”, info8。DateTime,...“版权”, info8。版权,...“定位”,info8.定位);
PlanarConfiguration和ResolutionUnit标记的值必须是数值而不是字符串值,如imfinfo
.您可以使用Tiff类中的常量属性来设置这些标记。例如,以下是PlanarConfiguration常量属性的可能值:
Tiff.平面配置
ans = struct with fields: Chunky: 1 Separate: 2
的字符串值信息
结构以获得所需的值。
标签。PlanarConfiguration =...Tiff.PlanarConfiguration。(info8.PlanarConfiguration);
以相同的方式设置ResolutionUnit值。
标签。ResolutionUnit = Tiff.ResolutionUnit。(info8.ResolutionUnit);
中没有设置“软件”标签波士顿.tif
但是,,geotiffwrite
将设置软件
默认情况下标记。若要保留信息,请将该值设置为空字符串,以防止将标记写入文件。
标签。软件='';
从中复制GeoTIFF信息波士顿.tif
.
geoinfo = geotiffinfo (“boston.tif”); key=geoinfo.geotiffttags.GeoKeyDirectoryTag;
写入GeoTIFF文件。
filename8=数据文件(“boston_indexed.tif”);R8 geotiffwrite (filename8出数,提出,“GeoKeyDirectoryTag”的关键,“TiffTags”,标签)
查看索引图像。
图mapshow (filename8)标题('Boston - Indexed Image')包含(“大陆国航飞机东行,测量尺”) ylabel ('大陆国机北行,测量英尺')
通过打印一个值表,比较结构中应该相等的信息。
info_rgb = imfinfo (“boston.tif”);info_indexed = imfinfo (filename8);tagname =字段名(标签);tagname (strcmpi (“软件”,标记名))=[];名称=[{“高度”“宽度”}, tagname];间隔= 2;fieldnameLength = max(cellfun(@length, names)) + spacing;formatSpec = ['%-'int2str (fieldnameLength)“年代”];fprintf([formatSpec formatSpec formatSpec' \ n '],...的字段名,“RGB信息”,“索引信息”)fprintf([formatSpec formatSpec formatSpec' \ n '],...'---------','---------------','-------------------')为k = 1:length(names) fprintf([formatSpec formatSpec formatSpec . k]' \ n '],...名称{k},...num2str(info_rgb.(名称{k})),...num2str(信息索引(名称{k})))结束
Fieldname RGB Information Indexed Information --------- --------------- ------------------- Height 2881 2881 Width 4481 4481 Compression Uncompressed Uncompressed RowsPerStrip 256 256 XResolution 300 300 YResolution 300 300 ImageDescription "GeoEye" "GeoEye" DateTime 2007:02:23 21:46:13 2007:02:23 21:46:13 Copyright "(c) GeoEye" "(c) GeoEye"方向1平面配置Chunky Chunky分辨率单位英寸英寸
由于已通过打印值表将RGB图像转换为索引图像,因此请比较应不同的信息。
姓名={“文件大小”,“颜色类型”,“比特深度”,...“BitsPerSample”,“光度测量解释”};fieldnameLength=max(cellfun(@length,names))+间距;formatSpec=['%-'int2str (fieldnameLength)“年代”];格式规格2=“%-17s”;流([' \ n 'formatSpec formatSpec2 formatSpec2' \ n '],...的字段名,“RGB信息”,“索引信息”) fprintf([formatSpec formatSpec2 formatSpec2 . txt]' \ n '],...'---------','---------------','-------------------')为k=1:长度(名称)fprintf([formatSpec formatSpec2 formatSpec2' \ n '],...名称{k},...num2str(info_rgb.(名称{k})),...num2str(信息索引(名称{k})))结束
Fieldname RGB Information Indexed Information --------- --------------- ------------------- FileSize 38729900 27925078 ColorType truecolor Indexed BitDepth 24 16 BitsPerSample 8 8 8 16 PhotometricInterpretation RGB RGB Palette
删除临时文件夹和数据文件。
删除目录(datadir“年代”)
的文件波士顿.tif
和boston_ovr.jpg
包括GeoEye版权所有的材料,保留所有权利。GeoEye于2013年1月29日并入DigitalGlobe公司。有关数据集的更多信息,请使用命令键入boston.txt
和键入boston_ovr.txt
.
的文件concord_orthow_w.tif
和concord_ortho_e.tif
是由马萨诸塞州联邦地理信息局(MassGIS)、技术和安全服务执行办公室的正射影片获得的。有关数据集的更多信息,请使用该命令类型concord_ortho.txt
。有关MassGIS提供的数据的更新链接,请参阅https://www.mass.gov/info-details/massgis-data-layers.
DTED文件n39_w106_3arc_v2.dt1
由美国地质调查局提供。