ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

QGIS导出TIFF避坑指南:坐标系、压缩与金字塔设置一次讲清

QGIS导出TIFF避坑指南:坐标系、压缩与金字塔设置一次讲清 QGIS专题分享关于导出tiff我积累的这些经验值得你花几分钟看看聊到QGIS很多刚上手的朋友第一反应是“这是个能打开shp、tiff的开源GIS软件”这话没毛病。但用久了你会发现真正让人反复进出的环节往往是“导出”这一步——尤其是导出tiff这种栅格格式。我自己带过好几个项目组几乎每个月都有人来问“为什么我导出的tiff打开是黑的”“为什么图层上明明很好看的影像导出来跟糊了一层雾似的”“客户只要tiff我直接右键另存就行了吗”。这些问题的答案其实都藏在导出参数和导出通道的选择里。这篇文章不是干巴巴的系统教程而是我把私下里给同事、客户、群友讲过的那些点整理成文从导出前的准备、右键导出和工具箱导出怎么选到压缩、贴片、金字塔这些设置背后的逻辑再到一个很实际的需求——怎么用导出的tiff提取区域高程点。最后我也会把安装QGIS和加载国内可用天地图影像这类高频问题捎带讲清楚。无论你是刚装好QGIS的小白还是已被数据交付折磨过几轮的半熟手这篇文章应该都能给你省下不少试错时间。1. 为什么QGIS里“导出tiff”值得单独开一篇讲1.1 QGIS导出tiff最常见的几种业务场景先别急着点“另存为”你得知道你导出这个tiff是去干什么用的。根据我接触到的真实项目大概逃不出这三种成果交付甲方或合作方要求最终成果必须是GeoTIFF不能是img、不能是栅格目录最好还能带坐标系、带金字塔。这种场景要求“零差错”参数选错了返工成本很高。影像底图制作你想把天地图影像或者自定义地图服务的某一块区域导出成本地tiff后面不管是做内业标注还是放到其他软件里配图都能离了网干活。分析输入数据你下载了DEM、坡度、气温等栅格数据需要裁剪、重采样后导出成新tiff再用它做高程点提取、流域分析或者模型输入。这三类场景对导出参数的侧重点完全不一样交付场景看重“无损或近无损”“坐标系严格正确”底图场景看重“清晰度”“范围准确”分析场景看重“数据类型不掉精度”“NoData处理合理”。很多新手就是没先想清楚用途直接默认参数一顿导出后面才踩坑。1.2 tiff与GeoTIFF的差别究竟在哪先说个容易混淆的概念。日常口语里说“导tiff”其实绝大多数情况下指的是GeoTIFF也就是带地理参考信息的TIFF文件。纯TIFF只是图像容器它不知道这张图的每个像素应该摆在地球上的哪个位置地理配准信息全部丢失ArcGIS、QGIS再打开也只能凭“世界文件”辅助定位或者干脆当普通图片用。QGIS里用“栅格图层右键 → 导出 → 另存为”时格式下拉列表里那一项写着是“GeoTIFF”只有你把“.tif”改成“.tiff”也不影响实际读取但真正起决定作用的是你保存时有没有写入地理参考信息。QGIS默认写入方式是这样的如果使用GeoTIFF格式坐标信息直接嵌入tif文件内部。如果选择了“创建世界文件”选项地理参考信息会放在一个同名的.tfw文件里。如果你在CRS那里手动选了一个与源数据不同的坐标系QGIS还会在导出途中做实时重投影。我建议一般不要关掉地理参考信息。即使你只是想在Photoshop里打开看看保留坐标信息也不碍事但反过来如果交付时对方在GIS软件里打不开坐标就会立刻怀疑你的成果质量。2. 导出前必须理顺的三件事坐标系、范围和分辨率2.1 坐标系统一先搞清楚源数据是什么目标坐标系又是什么导出tiff前最重要但也最容易被忽视的操作是“查坐标系”。我见过一份非常好的影像结果导出时手滑选了WGS 84地理坐标系而源数据本来是Web MercatorEPSG:3857投影坐标结果一张按要求裁剪的小区影像被拉伸成变形图地面距离估算全部作废。实际操作时建议养成这个检查习惯右键图层 → 属性 → 信息看一眼源数据CRS。确认要导出的目标CRS。如果图层显示范围、比例标尺没问题就用源CRS直接导出避免无谓重投影的精度损失。如果确实需要投影转换比如从地理坐标转到平面米制坐标千万别在导出窗口随便选CRS最好先用栅格投影工具明确重投影一次检查数据范围、像素大小是否合理再走导出流程。这样出了问题好定位排查的是哪一步。2.2 范围定义裁剪不只是“画个框”很多朋友用“提取图层范围”或“画个矩形”来裁剪导出范围这本身没问题但要理解QGIS里“裁剪范围”的几个来源地图画布范围当前视图显示的区域适合“做一张图册”式的快速导出。图层范围被选中图层比如一个乡镇边界shp的包围盒适合按行政边界导出。手动设置范围可以在“裁剪范围到范围”里直接填西部、东部、北部、南部的坐标值。使用地图画布范围时“更新范围”按钮可以快速捕捉当前视图但如果视图有旋转或复杂制图要素导出的像素并不等于所见即所得这一点要清楚。有一点提醒如果你导出的tiff只是想要某个多边形内部的栅格区域导出窗口的“范围”裁剪出来的始终是矩形包围盒。真要按多边形边界切出矢量轮廓的tiff得先做按掩膜提取栅格Clip raster by mask layer再导出而不是靠导出窗口直接实现。2.3 分辨率设置横向纵向分辨率不一致的后果导出窗口里“分辨率”一栏默认是“使用栅格图层的新分辨率”也就是跟源数据保持一致。这个选项下还有个“横向分辨率”“纵向分辨率”的小输入框很多人会忽略它们的单位。这背后的原理很简单栅格分辨率像素大小决定了输出的tiff有多大、细节保留多少。如果你导出范围改大了但没调分辨率像素会跟着变稀图像直接变模糊如果你为了文件小一点手动把分辨率调大等于做了一次重采样细节损失是永久性的。我的习惯是交付类tiff尽量保持源分辨率不调整如果源数据太平均或太大我会在导出窗口把两个方向的分辨率同时乘2或者乘4并开启“需要时使用重采样”中的双线性或三次卷积这样视觉上会比最近邻平滑很多。千万别出现横向20米、纵向30米这种不一致的分辨率除非你有非常明确的理由。3. 最顺手的导出操作右键另存为和工具箱导出的取舍3.1 右键图层导出的完整流程最快路线日常用最多的就是右键导出法具体步骤如下在“图层”面板里选中你要导出的栅格图层。右键 → 导出 → 另存为。在对话框里设置格式选GeoTIFF。文件名写上带路径的输出文件名记得以.tif结尾。CRS通常保持默认源图层CRS。裁剪范围可选、可按需指定。分辨率默认保持源数据分辨率。输出模式如果不想立即加载回画布可以取消勾选。点击“确定”。这个流程之所以“最顺手”是因为你几乎不用额外学习。但它的短板也很明显你能控制的高级选项是有限的特别是在格式选项一栏里能一次性设置的参数比工具箱里的专业工具要少。如果只是日常做个裁剪、转个格式、换个坐标系右键导出完全够用但如果你要批量处理、要精细控制NoData、要生成COG就轮到了下一种思路。3.2 工具箱导出的优势批处理与更多的底层控制QGIS的“处理工具箱”里有一个专门工具叫栅格导出raster.export搜索“export”就能找到还有一个非常常用的翻译工具其实对应的是GDAL的gdal_translate命令。这类工具的优势在于批量执行右键导出一次只能处理一个文件工具箱里可以对整个文件夹的栅格一次性导出输出文件命名规则也支持{name}等占位符。更完整的格式选项可以把.gfs、.vrt、.xml这些旁生文件一并处理也可以直接设置输出数据类型、NoData值、添加内部金字塔。可以和模型构建器组合如果你后面还要做重投影、裁剪、压缩打包完全可以把多个处理步骤连成模型以后一键执行。有一点实际经验导出地质、气象类等成果数据时我优先用工具箱的栅格导出并勾选创建选项因为它能看到并保存右侧的创建选项里的参数方便自己写一些“较不会出问题”的GDAL创建选项右键另存为虽然也能写但每次都要手填容易漏。3.3 两条路线的实测感受我给你一个小对比表方便你决定用什么方式导出需求类型右键导出工具箱导出单个图层快速转格式方便直观略繁琐需要精确设定压缩算法可以手填创建选项支持预设选项批量处理多个tiff逐个操作效率低支持批处理效率高生成Cloud Optimized GeoTIFF比较麻烦专业且支持良好新手友好度高中等偏上实际使用建议如果你只处理三五个文件右键导出就好要是今天要处理几十个DEM切片或者影像瓦片直接上工具箱的批处理能帮你省下至少一小时的体力活。4. 导出选项里的压缩、贴片与金字塔该按什么逻辑选4.1 压缩算法选择LZW、DEFLATE还是PACKBITS在导出设置的“创建选项”里你会看到一堆类似COMPRESSLZW、TILEDYES的键值对。很多人被吓住其实它们也没那么神秘核心就是控制tiff内部怎么存储数据。无损压缩常见的选择有三个LZW压缩率中等处理速度中等兼容性最好。十年前的老GIS软件都能处理LZW压缩的GeoTIFF出外部交付稳妥。DEFLATE压缩率通常优于LZW但历史软件兼容性稍差。QGIS、GDAL生态默认支持很好如果对方也是开源软件栈果断选它。PACKBITS压缩率不如前两者但处理速度非常快适合临时中间数据。有损压缩方面还有个JPEG压缩。影像底图、影像成果图这类对绝对精度要求不高的数据可以用JPEG压缩获得巨大体积优势但你要清楚这会对栅格数值做有损近似不能用于要提取高程点或参与定量计算的DEM数据。我给一个参考DEM、坡度、气温等定量栅格用DEFLATE或LZW做底图用的影像用JPEG中间临时文件可以不压缩或者PACKBITS。要是对方没提要求安全起见压缩格式选LZW这是最不容易出岔子的保守选择。4.2 数据贴片与多线程读取为什么导出大图会变慢创建选项里有个很容易被忽略的TILEDYES/NO它决定tiff是按条带存储还是按小块矩形存储。条带模式默认否适合普通图片软件打开但GIS软件读取大栅格时效率不高如果设成TILEDYES栅格会被切成256x256或你设定的块大小的小方块GIS软件随机读取局部区域时会快得多。我自己的体会是只要是超过几十MB的tiff我都建议开贴片TILEDYES。尤其是你后面还要频繁缩放、框选、提取像素值时贴片带来的提升立竿见影。另外一个相关参数是BLOCKXSIZE/BLOCKYSIZE默认256即可没必要强行调大——调大了反而单次读取的数据量大卡顿感更明显。传统软件打开贴片GeoTIFF偶尔会有兼容问题比如老版本AutoCAD或某些看图工具所以交付给非GIS端时我会在正式导出之前确认对方软件支持情况。或者干脆交付普通条带版本地分析才用贴片版。4.3 金字塔不是“可选项”是“应为项”金字塔Overviews在导出或后续处理中往往被误当成优化选项。就我实际使用来看QGIS加载一张没有金字塔的2GB影像缩放时每一级都要重新读取全图卡顿感极其明显一旦生成过金字塔浏览和导出后续操作都会舒服很多。在导出创建选项里加一行COPY_SRC_OVERVIEWSYES只能在源数据已有金字塔的前提下生效源数据没有的话QGIS会在导出后自动或手动状态下提示是否构建金字塔。我更推荐的导出后做法是右键导出完成后右键图层 → 构建金字塔构建概览。在构建金字塔对话框中重采样方法选平均金字塔等级默认全选。若dafa交付文件金字塔默认外部生成.ovr文件交付时记得一起打包。当然也可以在创建选项里写INTERNAL_MASKYESOVERVIEWSINTERNAL把金字塔写进tiff但这样文件读起来更笨重我一般不用。5. 给影像加“地基”加载国内可用的天地图影像再导出工作底图5.1 QGIS加载天地图影像的正确姿势很多时候我们需要把天地图影像导出成本地tiff用于内业勾画底图。先交代一句天地图是国家官方建设的在线地图服务日常作业完全可以在合规前提下使用。在QGIS里加载天地图影像有几个常见方案我直接说比较省事的一种。打开QGIS在左侧“浏览器”面板中找到“XYZ Tiles”右键 → 新建连接然后填入天地图影像服务的URL地址。这类地址的通用形式是http://t0.tianditu.gov.cn/img_w/wmts?SERVICEWMTSREQUESTGetTileVERSION1.0.0LAYERimgSTYLEdefaultTILEMATRIXSETwFORMATtilesTILEMATRIX{z}TILEROW{y}TILECOL{x}tk你的密钥这里特别提醒天地图WMTS服务要求申请开发者密钥tk不能直接裸请求。申请入口在天地图官网的“开发资源”模块填个应用名就能拿到个人密钥个人学习、小项目够用了。在QGIS里新建XYZ连接时把URL粘贴进去准确点说应该用img_w全球影像服务如果你还需要注记叠加可以再加载一个cia_w注记图层影像加注记叠加显示正好是一张完整地图。至于那类“QGIS地图url国内可用”的热搜词其实就是在问这种官方服务源怎么配置。天地图之外的互联网第三方在线地图源很多因为服务条款或技术变更不稳定我不建议作为作业底图依赖。天地图毕竟是官方服务域名正规、稳定性有保障而且加载方法就那一步用熟了你会觉得比到处找图源稳得多。5.2 影像底图导出为tiff时的注意点从在线底图导出tiff和导出普通图层tiff有一些细微差别在线瓦片是Web MercatorEPSG:3857投影导出时CRS保持默认千万别切到WGS84地理坐标否则范围会诡异漂移。导出分辨率没必要调到最高瓦片底图本身的清晰度受限于服务端瓦片层级。你强行把分辨率设成0.1米级也只是把模糊的瓦片放大白白增大文件体积。范围选择要“对齐瓦片边界”才不容易出现边缘空白我的经验是先缩放到某一整级层级再用“提取图层范围”方式把范围框出来。瓦片加载需要较多内存导出大范围时我一般降低画布分辨率预览再用工具箱栅格导出批处理。一次导出面积特别大时文件非常大建议在创建选项里开TILEDYES和COMPRESSJPEG图片不会太“重”。一般情况下按照上述方式导出的工作底图叠加上路网、界址点、注记之后完全能满足日常内业出图的需求而且不会黑屏、不会丢坐标、不会加载半天出不来。6. 用导出的tiff提取区域内高程点这么操作最直接6.1 从DEM、高程tiff提取高程点的两条思路“如何根据tiff提取区域内高程点”是很多测绘、规划、水利方向朋友搜得最多的需求。本质就一句话让栅格每个像素的高程值落到矢量点上。实现路径大致两条思路一栅格值提取到点Sample raster values如果已经有现成的点图层比如测量点、采样点、规划布点你想把tiff上对应位置的高程值“读取”下来填到属性表里用栅格值提取到点工具。在处理工具箱搜索“sample”打开“栅格值提取到点”输入点和栅格输出新点层属性表里就会多一列rvalue或栅格波段值。这个思路适合你已经有规则布点或采样设计的情况。思路二栅格转点Raster pixels to points如果是整片区域都要提取“所有像素点”的高程值那是另一个方向。在“栅格”菜单下有一个挺直观的工具叫栅格像素转点Raster pixels to points能把每个像素转换成点属性表带一个栅格值字段。但注意高分辨率DEM转换成点后数量非常大千万级像素就是千万级点输出文件会巨大、渲染会很卡一般需要先做重采样或抽稀。6.2 实操演示根据tiff提取区域内高程点最常见的一个组合场景是有一张DEM的tiff还有一个研究区域的边界shp最后想要边界内的高程点。我来把步骤拆开裁剪用栅格提取工具组中的按掩膜提取栅格输入DEM掩膜用研究边界shp输出区域内的DEM切片。这一步解决“只想处理区域内”的问题也能大幅度减少后面转点的数据量。重采样可选但强烈建议如果原始DEM是1米分辨率而你要提取的点不需要那么密用栅格重采样把像元大小改成5米、10米都行重采样方法选双线性或三次卷积高程数据用双线性较稳。降低点数量处理速度成倍提升。栅格像素转点把重采样后的DEM成点属性值即为高程。清洗筛选如果边界内有湖泊、建筑物等异常区可再按属性值区间筛选或剪掉NoData值所在的点。导出成果右键点图层 → 导出 → 另存为GeoPackage或Shapefile或者直接导出为CSV文本给同事做后续建模都方便。提示提取高程点时请一定核实源tiff的NoData设置。很多DEM边缘是无值区或负值区这些NoData在转点后可能变成-9999、0等异常值。如果没提前处理你导出的高程点里混一堆0米点会严重误导分析。6.3 提取时最容易忽略的精度问题说说数据类型的坑。DEM通常是Float32或Int16提取高程点时属性表里的高程值怎么读取决于你导出时的数据类型设置。源数据是Float32就老老实实保持Float32不要导出成Byte。Byte最多只能存0-255整数一旦压缩会自动四舍五入到整数还容易把高程截断。如果提取点后用于工程计算别用整数型别用默认压缩过高导致的反凑整。我自己就曾经把一个Float32 DEM用LZW压缩导出后提取高程点上高程变成了194.0000查半天才发现是读取精度问题重新把数据类型设为Float32导出才恢复到194.623。再者如果tiff是多波段影像比如真彩色影像想从它提取高程点其实是不合理的——高程信息不在RGB值里。看到有人说“从影像tiff提取高程点”一般是指影像附带了高程波段、或者本身就是单波段的DSM/DEM数据得先确认你手上的数据含不含高程波段否则提取出来的只是像素颜色值没有地形意义。7. 安装、加载与导出的常见问题排查7.1 QGIS安装碰壁常见原因与对策搜“qgis安装”“qgis不能安装”的朋友十有八九是这几个原因。先说最常见的几个安装包与系统架构不匹配到官网下载页面选择Windows或macOS对应版本64位系统就不要下载32位安装包。看起来简单但真有朋友机器是64位却一直点32位离线包。杀毒软件或系统权限拦截QGIS安装过程要写注册表、创建服务、安装OSGeo4W组件部分杀软会拦截。安装时把杀软暂时退一下、右键以管理员身份运行安装包成功率会高很多。网络下载中断导致安装包损坏直接下载官方完整安装包虽然安装最简但下载体积大容易断。可以用国内镜像源或分段下载校验安装包体积是否和官网一致。旧版本残留冲突几年没更新的老版本没卸载干净和新的OSGeo4W环境冲突。先把旧版彻底卸载再清理掉C:\OSGeo4WWindows下或~/QGIS相关配置目录重新装。真正安装后打不开的话先看错误日志文件一般在用户目录的.qgis或AppData下大部分报错都能在日志里一眼定位。不要反复卸载重装解决问题的效率反而更低。7.2 导出tiff时的几个高频报错导出的tiff打开是全黑的一般原因是源数据含有负值或NoData值而导出时把NoData写成了0看图工具不识别。在处理里先把NoData值设置成很负的数如-9999再导出或者导出后在QGIS里设置“无数据值”选项。tiff坐标丢失或偏移多半是你在导出窗口乱改了CRS或者选了“创建世界文件”但交付时只给了.tif没给.tfw。导出完成之后不要马上关对话框先拖回画布看一眼位置对不对。导出时提示“无法写入文件”确认目标文件夹有没有写权限路径不要出现中文或特殊符号尤其别放在C盘Program Files下。导出大影像时内存爆满调整数据贴片尺寸开TILEDYES用COMPRESSDEFLATE并关闭“加载到画布”选项。必要时升级机器物理内存栅格处理是内存敏感型任务16G以下处理几个GB的大图确实吃力。7.3 导出后如何快速验证成果质量我养成的一个习惯是每次导出后都必须“回读验证”。方法很简单把刚导出的tiff重新拖入QGIS叠加一份源图层肉眼比对位置和信息是否一致。右键图层 → 属性 → 信息检查CRS是否和预期一致、像素大小是否正确、波段数是否吻合。用栅格信息工具或Python脚本读取文件的基本统计值样本值是否在合理区间。这三步走完再交付基本能避免90%的返工。慢工出细活导出之前多花30秒看清设置导出之后花1分钟验证质量比客户那边发现问题再回来改要划算得多。另外QGIS里还有一个“另存为”时很好用的选项叫创建选项右边的下拉菜单里面预置了PROFILEGeoTIFF、PROFILECOG等多种模板。其中COGCloud Optimized GeoTIFF在Web发布、云端处理场景中有很好的兼容性如果你未来可能在在线地图服务里使用导出的影像选COG模板会让下游工作轻松不少。我最近几个项目都已经把成果输出统一成了COG后续分享给同事直接在浏览器里就能查看非常方便。说到最后我想把今年实践里最想提醒的一句话讲清楚QGIS导出tiff重点从来不是“点哪个按钮”而是导出之前你有没有想清楚数据将去哪里、给谁用、要什么精度。把坐标系、分辨率、压缩、NoData这几个核心变量理顺你导出的一切tiff都会变成拿得出手、经得起查的成果数据。
返回列表