输出图像和光栅GeoTIFF网格
这个例子展示了如何编写数据引用标准地理和投影坐标系GeoTIFF文件,使用geotiffwrite
。图片上指定文件格式(TIFF)已成为一个受欢迎的格式来存储栅格数据。TIFF标记的GeoTIFF规范定义了一组描述“地图”与TIFF栅格数据的信息。使用这些标记,定位图像或光栅网格坐标引用地理坐标系统(经度和纬度)或(平面)投影坐标系可以存储在一个GeoTIFF文件。
设置:定义一个数据文件夹和文件名效用函数
这个例子中创建几个GeoTIFF临时文件并使用变量datadir
来表示他们的位置。这里使用的价值取决于的输出tempdir
命令,但是您可以轻松地定制。的内容datadir
删除最后的例子。
datadir = fullfile (tempdir,“datadir”);如果~存在(datadir“dir”mkdir (datadir)结束
定义一个匿名函数来预先考虑datadir
输入文件名:
外部= @(文件名)fullfile (datadir文件名);
示例1:编写一个图像引用地理坐标
写一个图像引用向GeoTIFF WGS84地理坐标文件。原始图像(boston_ovr.jpg)存储在JPEG格式,与引用外部图像文件的信息,在“世界文件”(boston_ovr.jgw)。图像提供了一个低分辨率的“概述”波士顿,马萨诸塞州,以及周边地区的水处理。
读取图像的JPEG文件。
:=“boston_ovr”;imagefile = [basename“jpg”];A1 = imread (imagefile);
获得一个从世界文件引用对象。
worldfile = getworldfilename (imagefile);R1 = worldfileread (worldfile,“地理”、尺寸(A1));
编写图像GeoTIFF文件。
filename1 =功能([basename“.tif”]);geotiffwrite (filename1 A1, R1)
返回文件的信息RasterInfo
对象。注意的价值CoordinateReferenceSystem
是一个地理坐标参考系统对象。
info1 = georasterinfo (filename1);info1.CoordinateReferenceSystem
ans = geocrs属性:名称:“WGS 84”基准:“1984年世界大地系统”球体:[1×1 referenceEllipsoid] PrimeMeridian: 0 AngleUnit:“度”
导入新的GeoTIFF文件并显示波士顿概述形象,正确定位,地图轴。
图usamap (R1.LatitudeLimits R1.LongitudeLimits) setm (gca),“PLabelLocation”,0.05,“PlabelRound”2,“PlineLocation”0.05)geoshow (filename1)标题(“波士顿概述”)
示例2:写一个数据网格引用地理坐标
负载海拔栅格数据和地理单元引用对象。写数据网格GeoTIFF文件。
负载topo60cZ2 = topo60c;R2 = topo60cR;filename2 =丢失(“topo60c.tif”);geotiffwrite (filename2 Z2, R2)
数据网格中的值从-7473年到5731年不等。显示网格作为一个材质贴图表面而不是强度图像。
图worldmap世界gridm从setm (gca),“MLabelParallel”,-90,“MLabelLocation”90)tmap = geoshow (filename2,“DisplayType”,“texturemap”);demcmap (tmap.CData)标题(高程数据网格的)
示例3:改变GeoTIFF文件的数据组织
当你写数据使用geotiffwrite
或读取数据使用readgeoraster
列的数据网格从北部和西部行从开始。例如,输入的数据topo60c.mat
从南,但输出的数据topo60c.tif
从北方。
R2。ColumnsStartFrom [Z3、R3) = readgeoraster (filename2);R3.ColumnsStartFrom
ans =‘南’ans =“北”
因此,GeoTIFF文件中输入数据和数据了。
isequal (Z2 flipud (Z3))
ans =逻辑1
如果你需要再次工作区中的数据匹配,然后翻转Z值和设置引用对象的列从南:
R3.ColumnsStartFrom=“南”;Z3 = flipud (Z3);Z3 isequal (Z2)
ans =逻辑1
GeoTIFF文件中的数据编码与积极的刻度值。因此,当您查看文件与普通TIFF-viewing软件,数据集的北部边缘。让输出文件的数据布局匹配输入的数据布局,您可以构建一个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)写(t, Z2);rewriteDirectory (t)关闭(t)
验证引用对象,从输入数据与输出数据网格数据文件。要做到这一点,读Tiff图像并创建一个引用对象。然后,比较网格。
t = Tiff (filename2);Atiff =阅读(t);关闭(t) Rtiff = georefcells (R2.LatitudeLimits, R2.LongitudeLimits,大小(Atiff));Atiff isequal (Z2) isequal (R2, Rtiff)
ans =逻辑1 ans =逻辑1
示例4:写一个图像引用投影坐标系
一个GeoTIFF文件编写康科德正色摄影。两个相邻(东西向)地理灰度(全色)正色摄影封面康科德的一部分,麻萨诸塞州,美国。concord_ortho。txt文件表明,数据引用到麻萨诸塞州大陆(NAD83)状态平面投影坐标系。单位是米。这对应于GeoTIFF代码26986号GeoTIFF规范中提到http://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_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)
返回文件的信息RasterInfo
对象。注意的价值CoordinateReferenceSystem
是一个投影坐标参考系统对象。
info4 = georasterinfo (filename4);info4.CoordinateReferenceSystem
ans = projcrs属性:名称:“NAD83 /麻萨诸塞州大陆”GeographicCRS: [1×1 geocrs] ProjectionMethod:“兰伯特圆锥共形(2 sp)”LengthUnit: "meter" ProjectionParameters: [1×1 map.crs.ProjectionParameters]
显示康科德正色摄影相结合。
图mapshow (filename4)标题(“联合正色摄影”)包含(“马州大陆飞机以东,米”)ylabel (“马州大陆飞机以北,米”)
例5:编写一个裁剪图像从GeoTIFF文件
写的一个子集GeoTIFF文件到一个新的GeoTIFF文件。
读的RGB图像和参考信息boston.tif
GeoTIFF文件。
(A5, R5) = readgeoraster (“boston.tif”);
作物图像。
xlimits = (764318 - 767677);ylimits = (2951122 2954482);[A5crop, R5crop] = mapcrop (A5, R5, xlimits ylimits);
写GeoTIFF文件裁剪的图像。使用原始的GeoKeyDirectoryTag GeoTIFF文件。
info5 = geotiffinfo (“boston.tif”);filename5 =丢失(“boston_subimage.tif”);geotiffwrite (filename5 A5crop R5crop,…“GeoKeyDirectoryTag”info5.GeoTIFFTags.GeoKeyDirectoryTag)
显示GeoTIFF文件包含裁剪图像。
图mapshow (filename5)标题(“芬威球场——裁剪图像从GeoTIFF文件”)包含(“马州大陆飞机以东,调查脚”)ylabel (“马州大陆飞机以北,调查脚”)
示例6:海拔数据写入GeoTIFF文件
编写高程数据周围的南科罗拉多州博尔德峰GeoTIFF文件。
elevFilename =“n39_w106_3arc_v2.dt1”;
从文件读取的民主党。绘制数据使用geoshow
的数据必须类型单
或双
。为光栅使用指定的数据类型“OutputType”
名称-值对。
[Z6, R6] = readgeoraster (elevFilename“OutputType”,“双”);
创建一个结构来保存GeoKeyDirectoryTag信息。
关键=结构(…“GTModelTypeGeoKey”[],…“GTRasterTypeGeoKey”[],…“GeographicTypeGeoKey”[]);
显示数据是通过指定一个相应的地理坐标系统GTModelTypeGeoKey
字段2。表明引用对象使用的帖子通过指定的(而不是细胞)GTRasterTypeGeoKey
字段2。显示的数据是参考指定的地理坐标参考系统GeographicTypeGeoKey
在4326年。
关键。GTModelTypeGeoKey = 2;关键。GTRasterTypeGeoKey = 2;关键。GeographicTypeGeoKey = 4326;
高程数据写入GeoTIFF文件。
filename6 =丢失(“southboulder.tif”);geotiffwrite (filename6 Z6 R6,“GeoKeyDirectoryTag”键),
验证数据写入一个文件通过显示它。首先,导入矢量数据,代表了科罗拉多的国家边界readgeotable
。然后,显示边界和GeoTIFF文件。
GT = readgeotable (“usastatelo.shp”);行= GT.Name = =“科罗拉多”;科罗拉多= GT(行:);图usamap“科罗拉多”持有在geoshow(科罗拉多州,“FaceColor”,“没有”)g = geoshow (filename6,“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表示投影坐标系(pc)。
关键。GTModelTypeGeoKey = 1;
将光栅类型设置为1表示PixelIsArea(细胞)。
关键。GTRasterTypeGeoKey = 1;
显示一个用户定义的投影坐标系通过使用一个值为32767。
关键。ProjectedCSTypeGeoKey = 32767;
GeoTIFF文件写入数据geotiffwrite
。相比之下,写第二个文件使用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);流(类类型的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文件。TIFF元信息,除了BitDepth的值,BitsPerSample PhotometricInterpretation标记,保存。
读的形象boston.tif
GeoTIFF文件。
(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,…“ImageDescription”info8.ImageDescription,…“DateTime”info8.DateTime,…“版权”info8.Copyright,…“定位”,info8.Orientation);
PlanarConfiguration和ResolutionUnit标记的值必须为数字,而不是字符串值,返回的imfinfo
。你可以设置这些标签使用Tiff类的常量属性。例如,下面是PlanarConfiguration常数属性的可能值:
Tiff.PlanarConfiguration
ans =结构体字段:厚实:1单独:2
使用的字符串值信息
结构来获得所需的值。
标签。PlanarConfiguration =…Tiff.PlanarConfiguration。(info8.PlanarConfiguration);
以同样的方式设置ResolutionUnit价值。
标签。ResolutionUnit = Tiff.ResolutionUnit。(info8.ResolutionUnit);
软件标签中没有设置boston.tif
文件。然而,geotiffwrite
将设置软件
默认的标签。保存信息,将值设置为空字符串,可以防止标签被写入到文件中。
标签。软件=”;
复制GeoTIFF信息boston.tif
。
geoinfo = geotiffinfo (“boston.tif”);关键= geoinfo.GeoTIFFTags.GeoKeyDirectoryTag;
写GeoTIFF文件。
filename8 =丢失(“boston_indexed.tif”);R8 geotiffwrite (filename8出数,提出,“GeoKeyDirectoryTag”的关键,“TiffTags”、标签)
视图索引图像。
图mapshow (filename8)标题(“波士顿-索引图片”)包含(“马州大陆飞机以东,调查脚”)ylabel (“马州大陆飞机以北,调查脚”)
比较结构中的信息打印一个表应该一律平等的价值观。
info_rgb = imfinfo (“boston.tif”);info_indexed = imfinfo (filename8);tagname =字段名(标签);tagname (strcmpi (“软件”,tagname)) = [];名称= [{“高度”“宽度”},tagname];间隔= 2;fieldnameLength = max (cellfun (@length,名字))+间距;formatSpec = [% - - - - - -”int2str (fieldnameLength)“年代”];流([formatSpec formatSpec formatSpec' \ n '),…的字段名,“RGB信息”,“索引信息”)流([formatSpec formatSpec formatSpec' \ n '),…“- - - - - - - - - - - -”,“- - - - - - - - - - - - - - - - - -”,“- - - - - - - - - - - - - - - - - - -”)为k = 1:长度(名)流([formatSpec formatSpec formatSpec' \ n '),…名字{k},…num2str (info_rgb。(名字{k})),…num2str (info_indexed。(名字{k})))结束
Fieldname RGB信息索引信息- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -高度宽度2881 2881 4481 4481压缩未压缩的压缩RowsPerStrip 256 256 300 300 YResolution 300 300 ImageDescription XResolution“之眼”“之眼”DateTime 2007:02:23 21:46:13 2007:02:23 21:46:13版权”(c)之眼”“(c)之眼”取向1 1 PlanarConfiguration肥大厚实ResolutionUnit英寸英寸
比较的信息应该是不同的,因为你将RGB图像转换为索引图像,通过印刷一个表的值。
名称= {“文件大小”,“ColorType”,“BitDepth”,…“BitsPerSample”,“PhotometricInterpretation”};fieldnameLength = max (cellfun (@length,名字))+间距;formatSpec = [% - - - - - -”int2str (fieldnameLength)“年代”];formatSpec2 =“% -17年代”;流([' \ n 'formatSpec formatSpec2 formatSpec2' \ n '),…的字段名,“RGB信息”,“索引信息”)流([formatSpec formatSpec2 formatSpec2' \ n '),…“- - - - - - - - - - - -”,“- - - - - - - - - - - - - - - - - -”,“- - - - - - - - - - - - - - - - - - -”)为k = 1:长度(名)流([formatSpec formatSpec2 formatSpec2' \ n '),…名字{k},…num2str (info_rgb。(名字{k})),…num2str (info_indexed。(名字{k})))结束
字段名RGB信息索引信息- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -文件大小38729900 27925078 ColorType真彩索引BitDepth 24 16 BitsPerSample 8 8 8 PhotometricInterpretation RGB RGB调色板
清除:清除数据文件夹
删除临时文件夹和数据文件。
删除目录(datadir“年代”)
数据集信息
的文件boston.tif
和boston_ovr.jpg
包括材料版权归之眼,保留所有权利。之眼被合并到数字地球公司在1月29日,2013年。对数据集的更多信息,使用的命令类型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
是由美国地质调查局。