波段合成,去除黑边并提取土地利用数据....下

请添加图片描述
接着上一次的前四个步骤→波段合成,去除黑边并提取土地利用数据(第七届GIS技能大赛解题)上

我们这次来做后面的三个步骤(文末可获取练习数据)

首先我们回顾一下题目要求:数据处理(100分)

  1. 对遥感影像进行预处理:波段合成,去除黑边,并提取出与2015年土地利用数据(class2015.tif)相同的影像区域。(15分)

  2. 使用最大似然法监督分类对影像分类,分为5种地物类别:林地,耕地,裸地,建筑物等不透水面,水(请使用提供的矢量数据“训练样本2010”作为训练样本)。(15分)

  3. 对分类后的结果的边界进行一定的平滑处理,并消除如下图所示像元个数小于5个像元的独立区域,用周围的像元值来代替。(15分)请添加图片描述

  4. 使用GPS采集了一些点并生成了表格(点位置.txt),需要知道这些点对应于class2015.tif数据中的地物类别。(10分)

  5. 提取出2010年是林地/耕地,并且2015年变为建筑用地的区域。(10分)

  6. 计算2010年到2015年土地利用转移矩阵。(15分)

  7. 在地图上展现出2010年到2015年用地类型是如何变化的,制图并保存为jpg格式。(20分)

那么上次我们已经完成了前4个步骤,这一篇我们完成剩余的3个步骤。

还记得上次的步骤吗?我们先回顾一下,把前4个步骤的结果都再贴出一下: 请添加图片描述
那之所以把接下来的567放在一起来做呢,其实是因为大家可以观察到,这其实相当于一个步骤,那就是土地利用转移矩阵的制作,那其实这个东西在我们做作业或者做科研中都是经常碰到的比较基础的工作,这里呢我们就演示一下,也相当于跟大家探讨一下土地利用转移矩阵的制作了,其实这个有好几种方法,我们先讲第一种,那就是在ArcGIS中使用相交工具:

5&6 使用相交前,我们首先需要将栅格转为矢量,因为矢量工具是针对矢量数据,我们做出来的class2010和初始给我们的class2015都是栅格数据:

请添加图片描述

依次将class2010和class2015都转为矢量数据之后,我们就可以进行相交了,但是首先我们需要查看两个矢量数据的属性表,确保他们都有一个土地类型的字段,如果没有,你用12345来代替土地类型也可以,但是一定要自己记清楚哦~

接着我们就来到了土地利用转移矩阵的制作了,因为当土地利用转移矩阵制作完成,我们自然可以快速地提取出2010年是林地/耕地,并且2015年变为建筑用地的区域了:请添加图片描述
最终我们得到名为LUCC的土地利用转移矩阵矢量图层,我们打开属性表观察,位于前面的类型是2010类型,位于后面的类型是2015类型:请添加图片描述
那么很简单的,此时我们先提取出第五步要求的2010年是林地/耕地,并且2015年变为建筑用地的区域,按属性选择,然后导出为“耕林至建筑”:

请添加图片描述
如图所示第五步我们的结果为:请添加图片描述
接下来的第六步和第七步其实都是一个步骤,只不过第六步多出一步导出为EXCEL表格然后计算的过程,那么我们首先需要新建一个面积的字段,然后计算几何:请添加图片描述
接着我们就可以转EXCEL进行计算了:请添加图片描述
我们将无用的列删掉,只剩下三列,然后插入透视表:请添加图片描述
然后在右边进行如下图左的设置即可,最终就可以得到土地利用的转移矩阵,由于研究区域较小,所以这里是以亩为单位的哦~~:请添加图片描述
7 我们只要制作出一张2010至2015年的土地利用转移图就可以了完成任务了:

我们先新建一个字段,然后在字段计算器中我们只需要按下图右示范即可,这一步呢,是帮助我们在添加图例的时候更加简单和方便:请添加图片描述
然后我们在符号系统设置里选择这个字段,添加所有值:请添加图片描述
然后我们调至布局试图,进行出图即可,不要忘记添加地图三要素图例、指北针和比例尺哦~~

最终,我们得到的土地利用转移矩阵图就如下所示了如有错误请不吝指正请添加图片描述

  • END -请添加图片描述
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 首先,需要将多个.float格式的高光谱数据读入IDL中。可以使用IDL的READ_FLOAT命令读取单个文件,或者使用FILES_GET命令读取多个文件(如一个文件夹下所有的.float文件),然后使用READ_FLOAT读取每个文件: ``` ;假设需要读取的文件名存在一个字符串数组file_names中 for i=0, n_elements(file_names)-1 do begin file_id = openr(file_names[i], /get_lun) data = read_float(file_id, /endian) close, file_id ;在这里进行处理 endfor ``` 2. 处理高光谱数据提取每个波段的平均反射率。由于每个波段的波长可能有所差异,需要先读取波长信息并进行插值,以使所有波段的反射率计算使用相同的波长信息。假设读取到的波长数据存在于一个数组wavelength中,反射率数据存在于数组data中: ``` ;插值波长信息 wave_ref = findgen(751) * 0.1 + 350.0 ;设定参考波长范围,最小波长350nm,间隔0.1nm interpolate = interpolate(wave_ref, wavelength, data, /edge, /nan, /linear) ;计算平均反射率 mean_ref = total(interpolate, 1) / n_elements(data[*, 0]) ``` 3. 将计算得到的平均反射率写入CSV文件。可以使用IDL的WRITE_CSV命令将数组写入CSV文件。假设需要将平均反射率存在一个名为output.csv的文件中: ``` write_csv, mean_ref, output.csv, /double, header=['wavelength', 'mean_reflectance'], format='(%f, %.6f)' ``` 以上代码片段可以整合到一个程序中,如下: ``` ;假设需要读取的文件名存在一个字符串数组file_names中 ;插值波长信息 wave_ref = findgen(751) * 0.1 + 350.0 ;设定参考波长范围,最小波长350nm,间隔0.1nm ;循环读入和处理每个文件 result = fltarr(751, n_elements(file_names)) for i=0, n_elements(file_names)-1 do begin file_id = openr(file_names[i], /get_lun) data = read_float(file_id, /endian) close, file_id ;插值到参考波长下 interpolate = interpolate(wave_ref, wavelength, data, /edge, /nan, /linear) ;计算平均反射率 mean_ref = total(interpolate, 1) / n_elements(data[*, 0]) ;存储结果 result[*,i] = mean_ref endfor ;写入CSV文件 header_string = string(['wavelength', 'mean_reflectance'], /format) format_string = '(%f, %.6f)' write_csv, result, 'output.csv', /double, header=header_string, format=format_string ``` 在程序中,result数组用于存储计算得到的平均反射率数据,每一列是一个文件对应的反射率数据。在循环中计算出每个文件的平均反射率后,将结果存储在result数组中。最后使用WRITE_CSV命令将result数组写入CSV文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值