查看原文
其他

在ArcGIS中用栅格裁剪栅格,如何保持行列数量一致并且对齐?

The following article is from 数读城事 Author 畅儿


前言:

大家好,第一次给菌菌正式投稿~事因我在处理数据的时候出现的一些小问题,求助数读群友得到解决!因此做个总结给大家汇报一下!很感谢数读群的各位热心解答!我的问题或许不具有普遍性哈哈哈,但也是一些解决思路!也希望有帮助到一些或许有需要的朋友~总之!谢谢大家捧场~



01问题概述适用范围:用栅格裁剪栅格,保持行列数量一致并且对齐。


对齐问题,参考这个连接教程(来源见水印):

https://www.cnblogs.com/yhpan/p/12613790.html?ivk_sa=1024320u

这里给出的方法就是使用环境里面的【捕捉栅格】

 

02遇到的问题
需要从一个大范围的栅格中对应裁剪一个小范围的栅格。用于后期栅格对齐和计算。我目前有dat格式的小范围栅格和tif格式的大范围栅格。(已确认两者投影和像元大小相同

如图黑色范围是tif格式的大范围栅格,蓝色部分是小范围的dat小范围栅格。我的目的是提取蓝色部分,但周边青色(加了黄色斜线)的部分为nodata,是需要丢掉的。因为后期行列数量需一致进行计算。

我开始试了【数据管理工具】——【栅格】——【栅格处理】——【裁剪】,并且设置了工具【环境】里面的处理范围和捕捉栅格。但发现出来的结果仍然是输出一整个影像范围。如下,彩色区域。画黄线阴影部分仍然被保留了。


03问题查处
经过一番查看:我的这个小范围图像是在ENVI中使用MCTK工具提取的影像,为dat格式,在ARCGIS和ENVI中黄色阴影区域使用【识别工具】都是显示nodata。但实际上他是一个这个数:-3.402823e+38,因此导致我裁剪的时候没有得到我想要的效果。



04查处办法1、arcgis右键查看图层【属性】——【符号系统】,设置背景或者nodata显示为无颜色,但发现仍然显示黄色阴影部分。即虽然识别工具为nodata,但实际有值。

2、可以把dat数据用matlab读取,查看矩阵,显示确实是有值状态。而不是NaN。


05解决办法
1、保证两幅图像均为tif格式

首先需要将dat文件使用【数据管理工具】——【栅格】——【栅格数据集】——【复制栅格】转化为tif或者在地理数据库里存储的栅格数据集,将黄色阴影区域彻底转为nodata。


复制栅格之后显示就如下图,nodata的部分已经消失。只保留有效值。

2、【一个试错】两个都为tif的状态之下,使用【数据管理工具】——【栅格】——【栅格处理】——【裁剪】,我们会发现并不能勾选“使用输入要素裁剪几何”,我尝试着在环境里的处理范围设置好捕捉小范围栅格。


最后得出来的结果仍然是,一整个范围,说明裁剪不适用于我的问题:

3、使用【Spatial Analyst工具】——【提取分析】——【按掩膜提取】,不用设置环境。

工具的说明:如果掩膜数据中nodata的地方输出也是nodata。

得到的结果即是我想要的结果了,检查属性中的行列号也是一致的。



06其他办法
师傅(凉姐)还给了我一些思路,逻辑都是:栅格转要素,再用要素裁剪。

方法一:使用镶嵌数据集,能保证行列数量一致和对其

在GDB数据库中建立一个镶嵌数据集,然后在镶嵌要素数据集中添加小范围的栅格。师傅提醒:在镶嵌数据集中加入栅格是添加索引,不是添加文件,所以占用的内存很小。运行速度也比较快。(但不知道为啥笔者使用这些功能的时候,我的ArcGIS奇慢无比甚至会崩掉重来……以下真的是我崩了好几次才给大家截下来的图)

新增栅格数据集:


添加栅格:

把他拖进来查看发现右边绿色边框的轮廓线仍然为整个方形。

我们对镶嵌数据集,右键,【修改】——【构筑轮廓线】,使用默认值就行。直接点确定来运行。

结果就会发现绿色的轮廓线变为实际有值的范围,然后使用轮廓线对大范围的栅格进行裁剪。

最后右键轮廓导出数据,即可有栅格的范围了,用它来进行栅格裁剪:

生成的面状要素还是比较细致的。

再使用【数据管理工具】——【栅格】——【栅格处理】——【裁剪】,用提取出来的面要素进行裁剪。记得勾选“使用输入要素裁剪几何”和“保持裁剪范围”。这样得到的栅格与小范围的栅格行列数才是一致的。

这种方法有点麻烦,但也可以解决一些不明原因裁剪不了的状态,也可以用于你有几张范围不重叠的小栅格,对大栅格进行裁剪时时使用。


方法二:使用栅格范围,结果不明

还有一种方法是使用【3D Analyst】——【转换】——【由栅格转出】——【栅格范围】,把栅格转化成面或者线要素,再进行裁剪。但由于我这里不知道运行这个工具就会崩掉,我这里这条路走不通,没办法给大家试错啦!但可以给个思路给大家参考参考~


方法三:使用栅格转面,计算量比较大,结果不明

【转换工具】——【由栅格转出】——【栅格转面】,也可以得到一个面要素,进行裁剪。该面要素不是方法二中简单的范围,会带有值和或许有很多分块,因此计算量比较大,运行很慢,必须注意的是,该工具输入的栅格是整型。如果对数据精度要求不高,可以先用【栅格计算器】将数据变为整型再转。也可以使用QGIS的【Vector Creation】——【Raster pixels to Polygon】进行同样的处理。我的数据不是整型,且要求要有小数,所以我这里也走不通这条路,因此目前无法帮大家判断这样做的办法能不能促使行列号数量一致并且对齐。有兴趣的小伙伴可以试试!

当然还可以试试建立渔网等等的办法,尝试把栅格转为面要素再裁剪。这种就是非常曲线救国的路线了,如果前面的办法能用,或者需要处理的数量比较大,就不建议用这个。

 

07总结一下

1、检查数据nodata部分是否为实际nodata,如果不是则进行处理。

2、使用【裁剪】工具裁剪栅格,裁剪范围是包含nodata值的栅格范围,使用【按掩膜提取】裁剪栅格,则仅提取有真实值的栅格部分,nodata值部分去掉。

3、可以通过栅格转面,用面要素进行栅格裁剪。如使用【栅格范围】运算量较小,使用【栅格转面】栅格数值必须是整型,并且运算量较大。使用【镶嵌数据集】中的【构建轮廓线】步骤较多,但合适多张范围不重叠的小栅格进行拼接裁剪。


阿菌也要说几句:

今天这篇投稿文章我特别喜欢。从发现问题到寻找问题结点,再到解决问题,最后举一反三尝试别的方法再次解决问题。在我看来,这就是学习一门技术“聪明”且有效的办法。我一直会说,学习ArcGIS就是一个不断试错并去解决的过程。如果只是照着教程做一遍,一旦出错就手足无措,那我想不是一个受过高等教育的人应该有的素质。当然,在这个过程中,与周边的人、与交流群的朋友们交流不失为一个很好的办法。我最想看到的交流是建立在明确的描述自己的问题,并且在大家提出方案解决问题的进程中不断反馈,最终可能用多个思路解决问题后大家都受益的一个过程。

感谢畅儿妹妹的投稿!



那今天就到这里结束啦,欢迎留言讨论。文中的图片文字未经许可不要随便“引用”。

如果可以的话,希望能够转发分享,点个在看并且点个,给个赞赏~~也欢迎规范转载~

也希望大家和我多留言互动啊!(据说这样可以增加我的推送在你的订阅号里出现的概率)


作者|畅儿  排版|数读菌  校阅|数读菌

文章授权转载:数读城事



END


ArcGIS矢量数据和存储

如何在ArcGIS中制作一幅“合格”的地图

提升“幸福感”的ArcGIS小插件下载

ArcGIS实例:裁剪栅格+栅格分区统计+三维可视性分析

ArcGIS 标注超过一定宽度自动换行

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存