01 题目
题目:空间分析技术的应用与GIS系统设计
某一地区引进X型经济作物,该作物的生长环境需要满足一定的地形及气象条件。现有该地区的地形及气象数据,请你根据X型作物的生长条件,为该地区进行X型作物适宜区分析,并制作专题图。同时,梳理上述问题及其解决过程,规划出科学合理的GIS应用系统,进行系统功能及界面设计。
相关信息说明如下:
数据中,dem为数字高程模型数据,gully.shp为主沟谷数据;climate.txt为气象观测表数据(包含坐标、温度/℃及降雨/ mm等)。
dll中,DevComponents.DotNetBar2.DLL为工具控件库,IrisSkin2.DLL为皮肤控件库,titlerectangle.ssk为皮肤文件。
X型作物生长的条件为:
- 作物喜阳;
- 作物一般生长在该山区主沟谷两侧区域,一般不超过800米;
- 作物生长的年平均温度为9.5-11.5℃;
- 作物生长的年总降雨量为600-720mm。
坡向为90~270为阳坡。
可根据数字高程模型数据提取出坡向、水系等信息。
具体竞赛要求如下:
请就以上条件确定此地区适合种植这种作物的范围,并制作专题图。专题图内容要求以地形和水系作为背景,且给出适宜种植面积(投影面积即可)。
基于问题的解决方案,进行GIS应用系统的功能及界面设计。系统功能模块原则上不要求代码实现,但地图加载、放大、缩小、漫游、全图等功能要求实现。
提交文件包括:专题图文件(含数据),GIS应用系统源码及技术文档。
技术文档应包括解题思路、解题过程、系统设计等内容。技术文档中,请尽可能附图说明。附图请使用Word图片裁剪工具使附图内容仅为说明区域。
02 数据
2.1 主要沟谷文件
gully.shp为主沟谷数据
2.2 DEM数字高程文件
dem为数字高程模型数据
2.3 气象站点数据
climate.txt为气象观测表数据(包含坐标、温度/℃及降雨/ mm等)。
2.4 系统设计相关的DLL等文件
dll中,DevComponents.DotNetBar2.DLL为工具控件库,IrisSkin2.DLL为皮肤控件库,titlerectangle.ssk为皮肤文件。
这个可能比较新奇,我是遥感专业的,对于地信的不是很熟悉,不过看要求似乎没有地信方面的编程要求,所以这里我会尽量熟悉并向大家说明如何进行系统的设计。
03 思路
说实话我很羡慕第一届的比赛,如此简单,害。
这个题本质上就是找到满足要求的适宜区域,所以这里我的思路就是先化整为零,分别找到满足小要求的区域,最后所有区域进行叠置分析即可,
想要找到满足X型作物生存的适宜区,那么我们就需要重温题目要求:
X型作物生长的条件为:
作物喜阳;(坡向为90~270为阳坡。)
作物一般生长在该山区主沟谷两侧区域,一般不超过800米;
作物生长的年平均温度为9.5-11.5℃;
作物生长的年总降雨量为600-720mm。
3.1 作物生长条件的思路
3.1.1 对于条件1
条件1要求:作物喜阳;(坡向为90~270为阳坡。)
由于坡向为90~270为阳坡,所以我们需要对坡向进行重分类,但是我们没有坡向数据。但是通过题干我们发现有DEM数据,因此我们需要使用坡向工具对DEM数据进行坡向的计算得到坡向数据,然后再使用重分类工具对获取的坡向数据按照阴阳坡的分类标准进行重分类,将坡向为90~270的赋值为1,其余赋值为Nodata(这里我一向倾向于如此操作,不需要的我们不需要赋值为其它有效值,直接赋值为Nodata,后面进行各种操作可以避免很多麻烦);另外,我们的总体思路是将各个满足小要求的区域进行叠置分析,但是叠置分析一般在矢量文件中进行操作会十分方便,因此此处我们需要将得到阳坡数据使用栅格转面工具将其转化为矢量文件;
投影坐标系和地理坐标系的一些注意事项:
由于我们需要计算坡向数据,一般我记得坡度数据的计算是一定要将数据的坐标系转化为投影坐标系,不可以使用地理坐标系的数据进行坡度的计算。(其实在坡度计算你使用的是地理坐标系也是有解决办法的,那就是设置Z因子,但是前提是你可以使用浏览器或者查看ArcMap帮助文档你才知道自己的数据的Z因子是多大,但是比赛是不允许使用这些的,所以还是老老实实的转一下投影坐标系吧)。
这里坡向貌似可以不用转化为投影坐标系,但是你需要将坡向的计算方法切换为测地线。以下是ArcMap的官方文档关于坡向原理的说明:坡向的工作原理—ArcGIS Pro | 文档
上述明确说明了,如果使用平面的坡向计算方法,那么它是对投影平面进行计算,所以如果你的数据不是平面的那么使用该方法就存在问题了;
此处明确说明了使用测地线方法不需要要求坐标系为投影坐标系,换言之地理坐标系还是投影坐标系不会影像坡向的计算,但是需要设置Z单位(一般我们的DEM高程单位都是meter吧)。
所以,小结一下,怕麻烦就直接将坐标系事先转化为投影坐标系,避免错误,虽然地理坐标系下也可以完成数据的处理,但是常在河边走哪有不失身。
另外,不仅仅是这里的坡向计算(虽然我也说明了坡度计算)需要考虑坐标系是投影还是地理坐标系外,对于题目中的缓冲区也是需要考虑坐标系的,因为题干要求缓冲距离不超过800meter,很显然这需要在投影坐标系下完成,因为地理坐标系的缓冲距离是度/°,而且一般而言没有人会在地理坐标系下进行缓冲区的分析,这一般认为是错误的做法。
另外,还有题干中要求给出适宜种植面积,面积的计算实际上也是需要在投影坐标系下完成的。
所以总结吧,第一拿到数据就事先看看数据是地理坐标系还是投影坐标系,如果是地理坐标系那么你就需要非常注意比赛评委组挖的坑了,不要跳进去,最保险的方法就是不管三七二十一先转化为投影坐标系。
但是,很幸运,这道下午题的所有的数据均为投影坐标系,所以其实我讲了这么多,你什么也不需要操作。
条件1的操作流程大致如下:
3.1.2 对于条件2
条件2要求:作物一般生长在该山区主沟谷两侧区域,一般不超过800米;
由于比赛已经提供了主沟谷文件(gully.shp),所以在两侧不超过800m就仅仅只是做一个简单的缓冲区就好了。没什么好讲的。
3.1.3 对于条件3
条件3要求:作物生长的年平均温度为9.5-11.5℃;
咋一看,咦,怎么没有温度的区域数据啊?
学艺不精了不是,比赛数据提供了:climate.txt为气象观测表数据(包含坐标、温度/℃及降雨/ mm等)。
所以我们需要基于当前气象观测数据进行空间插值,得到DEM范围内的所有区域的温度的栅格文件,当然这里我推荐还是先导入这个txt文件,然后将其转化为shp文件,然后再进行空间插值;这个怎么说呢,一般excel数据、txt文件这种气象站点数据一般我们都会将其转化为shp文件,一来是可以方便进行其它处理,二来是我们方便我们下次使用不需要重新导入这些XY数据。
进行空间插值之后还是类似的操作,对温度栅格数据进行重分类,然后栅格转面即可。
注意,这里导入climate.txt需要注意定义坐标系,我一开始还担心坐标系应该是什么,会不会是默认的WGS84,但是当我打开climate.txt一看,这个坐标很明显就不是地理坐标系,而是投影坐标系,而且稍加比赛,发现,这些坐标均在DEM的范围内,所以应该是和其它数据的投影坐标系一致。所以无需过分担心。
以下是条件3的流程如下:
3.1.4 对于条件4
条件4要求:作物生长的年总降雨量为600-720mm。
这个也是类似,操作与上面的温度数据获取简直一模一样,这里不再重复。
3.2 水系的提取
可能是评委老师们觉得就一个简单的适宜区的分析,实在有一些拉跨,于是就加上了一个水系提取,实际上这个水系提取出来之后并没有太大的用处,仅仅是在制作专题图的时候用于出图显示。
思路很简单:首先对DEM数据进行填洼,然后使用流向工具计算水流方向矩阵得到流向数据,再使用流量工具计算流水累积量矩阵得到流量数据,将得到的流量数据进行阈值提取,然后将得到的河网进行栅格转矢量即可(但是这里不推荐使用栅格转面工具,而是使用栅格河网矢量化工具,原因这里不讲,大家可以自行去看二者的效果即可)。
3.3 种植面积的计算
这个也比较简单,直接在得到的适宜区数据的属性表通过计算几何得到种植面积。
另外,为了专题图的好看,我这里推荐再计算一个山体阴影作为底图,将DEM的透明度调为40%左右可以显现山地起伏的效果。
04 实操
4.1 获取阳坡数据
4.1.1 计算坡向
4.1.2 对坡向数据进行重分类(得到阳坡数据)