栅格数据挑选子区域

来源:互联网 发布:大数据hadoop面试题 编辑:程序博客网 时间:2024/05/16 11:47

对于一个大的栅格数据,有时候想提取出其子区域,例如四川省栅格和成都市的栅格,如果想获取除去成都市的四川栅格图层。

那么,首先想到的是获取到除去成都的四川范围的矢量图层,然后使用extract by mask方法裁切出来。但是如果只有两个大小栅格图层,想获取mask图层估计需要一些额外操作(如栅格转矢量,然后再合并等才能得到两个边界,还要做clip才能得到mask图层,此处不再赘述)。

     下面介绍直接使用两个栅格图层进行操作获取子区域,需要用到的函数是IsNull、SetNulll等。以下图中的3只企鹅为例,把中间企鹅剔除掉,黑白的大区域栅格,红色的为小区域栅格,需要把小区的范围挖空,即设置为null值。

步骤1:生成二值图像,在栅格计算器中输入:Con(IsNull(“smallregion.tif”),1,0)

  解释:函数IsNull返回一个二值图像,如果是空值范围1,非空返回0。Con为条件函数,如果满足,则执行第一个表达式,否则执行第二个。词句话的意思是“如果小区栅格为空的赋值为1,非空的赋值为0”。为了与大范围叠加运算需要在环境变量中指定处理范围与大栅格一致(或者直接使用IsNull函数也可以)。生成二值图像TwoValueRas图层如下所示:


步骤2:设置小区内的值为nodata数据,栅格计算器中输入 SetNull(“TwoValueRas”==0, TwoValueRas)

解释:设置二值图层中如果值为0的设置为nodata,其余的保留原始值。得到如下mask图层,


步骤三:直接在栅格计算器中使用:    “BigRegion.tif”*mask

解释:由于nodata区域与其他任何区域运算结果均为nodata,而1与其他乘积则保留原值。所以结果就实现了想要的截取子区域的结果。如下图所示:


0 0
原创粉丝点击