上一篇记录了一下如何用QGIS去制作swat-modeflow模型,模型运行的最基础条件便是swat模型的一个运行结果文件也就是TEXTINOUT文件,这个文件的制备可以使用arcgis,我本科是双非院校的,这些东西学的也不是很好,为了能很快的把这个swat-modelflow模型掌握,暂时就先用QGIS,这里便记录一下如何用QGIS来制备swat模型。
------------------------------------------------------- 前期准备------------------------------------------------------------QGIS:3.28版本
swateditor:具体的版本可以根据官网swat官网给出的提示,他会提示你运行QSWAT需要swateditor的,按照提示下载就行
QSWAT:基于QGIS的一个swat插件,通过这个可以帮助你运行swat模型
案例数据来源:用模型官网给出的示例数据,在官网给出的压缩包中,这大概是个名为robit的流域
office access数据库,官网说了这个也是必备的
ps:要注意的是一定要先安装swateditor再安装QSWAT,这很重要。
----------------------------------------------------step1 new project------------------------------------------------------
如果一切顺利并且成功安装的话,打开这个QSWAT界面如下:
创建属于自己的属于自己的工程之后,可以在你创建工程的文件夹中找到这些,值得注意的是这里其实swat-test实际上是和你自己命名的工程相同的而QSWATRef2012则有点类似于是一种从swateditor中复制过来的参数数据库,这不需要你更改名字,正因为不需要你创建这些个数据库,先安装swateditor是必须条件(我没有做过arcswat,只是了解过一个大概的过程,所以上面说的理解只是一孔之见,如果有错误还请提出)
---------------------------------------------step2 Delinate Watershed-----------------------------------------------
首先我们需要导入一个DEM数据,值得注意的是这个DEM数据如果你需要用它进行后续的进行swat-modeflow的操作时,这个数据最好是tif格式。
接下来便是流域的一个划分,这里有四个选项,第一个是根据DEM数据来划分,第二个使用现存的流域数据来划分,第三个则是你DEM的一个属性,最后一个据说是一种数据的格式,貌似不太重要,我们这里就直接用DEM来划分好了。
接下来的话如果你有河流的网格数据是可以导入其中的,在示例数据文件夹的RobitStreams文件夹中有河流的shpfile文件可以拿来使用,再者便是需要你确定流域的一个阈值了,这个很重要,他是没有一个确定的数值的,根据操作手册中的步骤我们暂定90公顷,之后便可以创建河流了,完成后大致如下:
接下来便是设置一个流域的出口
你可以选择导入一个.shp文件,自己手动画一个出口,下面的snap threshold便是给你的点设置一个范围,毕竟你手动加的点不可能那么精准是吧,只要你放大你的图层之后还是有误差的,或者说本身这个流域出口这个概念就不是一个点。再记录一下这个draw inlets/outlets 功能,这里有四种选项,outlet就是流域出口、reservoir是水库、point source就是一个点源。
这里重点记录一下inlet功能
用这个图简单说一下,比如说你拿到的数据是这样一个整个流域(蓝色部分),但你的研究区可能是其中一部分(绿色的),这些因为研究区而分割的点就是其实也是你流域的出口,inlet就是他们(也就上图的黄色部分小点)。
案例的数据中给我们提供了导入的数据,就是一个mianoutlet.shp文件,那我们这次就选择导入好了,做完这些我们便可以点击creat watershe按钮,创建我们的流域啦!大致的结果如下:
最后再来说一下界面剩下的几个选项
首先是这个merge subbasins,这个模块的用处是希望你可以将一些很小的流域合并,你可以用鼠标选择合并,我们创建好的流域分块已经很大了,不存在那种小的,所以不用合并。
下面便是add reserviors and point sources选项,就是添加水库和点源,边上那个选项是希望你可以在每个流域上增加一个点源,,其实这挺重要的,它可以方便你在你想要增加点源数据的时候添加,如果没有数据那也不影响。就当输入等于0就好了,样本数据中好像没有这方面的东西,那也就无所谓是否选择了。
这样这部分Delinated watershed便结束了,你可以点击边上的watershed查看流域的属性表,你应该可以得到这样一个如下的表
-------------------------------------------------------step2 creat hrus----------------------------------------------------
前面提到过,QSWAT中的参数数据库实际上是从SWATeditor中复制得到的一个数据库,很显然这这里的参数可能和你自己用的一个参数有所不同,arcswat中提供的参数库貌似和例子是匹配的,但QSWAT是不匹配的,因此我们首先应该将参数库中的usersoil进行一个更换,这一步需要用到access
首先将这个usersoil删掉
然后这个案例数据中给我们提供了土地利用类型的数据,将他们导入就好了
由于access无法直接识别csv类型的数据,所以打开它将他另存为这个
再将这个导入到access中,一般来说选择默认一直点击就好了,我也是第一次用这个access软件,最后这里点击不要主键,虽然我不知道为什么,可能一直默认也行
然后便是导入土壤和土地利用数据
导入的都是示例文件夹中的hdr文件,根据他的指导手册来说的话这是由于土壤的数据太大,自动帮你变成了tif格式,边上选择的是索引表,一般来说选csv就可以了,款且案例中给出的数据都是csv数据。
再说一下剩下的选项,
generate fullhrus shapeflie:是为了产生hru文件的,如果你需要进一步进行swat-modelflow这个就需要勾选
set bands for slope :设置坡度的分级,hru是根据soil landuse slop 划分的,这边象征性的弄一个10好了,添加的方式是再上面小框框中打入数字点击insert
到这一步我们便可以读写入对应的索引表,并且产生潜在的hru单元,我这生产了51个
这51个都是潜在的hru,并不已经划分完成的hru,你还要根据自己的需要进行进一步来设置条件,用于确定最终实际的hru,接下来来确定一下这个筛选界面
用一个很丑的图(随手画的)来说明一下第一种
比如这个流域先按照landuse分成1,2,3三种类别其中1面积最大,在1中按照soil分成了1,2,3其中1最大,最后在这个1-1的区域中按照slope分成了1,2其中1面积最大,那么这整个流域的hru类型为1-1-1这就是第一种划分
再说一下第二种,先分割成hru,看这流域中那个hru面积最大,那么这个流域就是这个hru,第四中按照面积筛选,就是51个中小于多少的就合并了(是合并还是忽略,emm没弄清楚,我感觉是合并),第五种便是看你想要几个咯,至少是9个,最多51个,毕竟你有9个流域嘛。
说一下第三种,这是说你可以设置一个阈值,小于这个阈值的就不考虑这个类型,面积由在你阈值范围内的类型分配,下面可以选择阈值的单位
如果这些都完成了,那么我们就可以创建hru了,
这里可以查看你的hru,高程等等
这有51个,9个流域
-------------------------------------------------step 4 edit and run------------------------------------------------------
点击最后一个选项,连接数据库,激活上面的选项
选择 wite input tables写入气象数据
这里有6个参数其中对于swat模型来说至少要包含有降雨和气温,其中weather Generator Data中的可以选择WGEN_user其他五个参数至少要包含有降雨和气温的站点数据,缺少的可以选择模拟,相关数据在给出的案例中已经包含了
我们可以在QSWAT自己帮我们创建的scenario文件夹中的textinout文件里看到这些被读写入的数据
1-9分表表示9个流域,其他就是刚刚读写入的数据,之后便可以创建SWAT的输入表,还是在这个
write input table中,选择第二部write swat input table
全部勾选,创建!
这些以0结尾的表示整个流域,1结尾的表示第一个流域。
再介绍一下edit SWAT Input,这个就是让你可以增加一些之前设置的inlet,resevriors,等输入源的,此外我们还可以给他的某个流域增加一个输入表。
在确定之后,在这里可以对这个子流域的灌溉来源,城市用地覆盖,水渠等方面进行参数的设置
在边上那个operation界面中我们可以设置一些其他的东西
通add operation我们可以增加一些对于该hru的操作来模拟该流域的一些实际情况
比如我这里就为他增加了一些施肥的例子(我对这个也不是很熟悉,只是我学习的例子中包含这样的情况,大家还可以多摸索摸索)
为了减少我们的工作量,避免逐个在hru上添加操作,况且在实际情况下,大部分区域的一些使用是相同的,而且你的研究区可能有上百个hru,我们可以使用推广工具,我选择所有流域的耕作类型的土地上都施肥,设置就如下
当然到了这里我们会发现他这个所使用的化肥类型是原本就带有的化肥类型,如果你想搞一些这个里面没有的类型可以通过accesss来编辑之前的参数数据库或者用这里databates(他应该也是连接到了数据库,只不是这边提供了一个界面而已)
在完成这些操作后,最重要的一点就是要重新写入这个input file,你可以点击里面的re-write swat input files 就可以很顺利的把他们重新写入了,就像是这样。
这样应该就可以了,我们可以开始下一步的操作了
----------------------------------------------------step3 swat simulation------------------------------------------------
点击swat simulation ,选择run
swat的时间受到你气数据的影响,这里给出了开始和结束的最大选择,那个NYSKIP是swat的预热期,毕竟水文气象情况是一直在发生的,不可能说从0开始就模拟吧,swat的版本现在电脑一般都为64,产生数据的步长选择Daily、Yearly、Monthly?看你的需求咯,那个Rainfall Distribution一般不用管他,设置好后就可以setup,之后便是run,几秒就成功了。
------------------------------------------------------------finally-------------------------------------------------------------
这是我根据我找的资料以及自己实操的过程的记录,也不是很精通这个模型,作为一个研0小白,我也是刚刚开始学习,果然有什么不妥当的地方还希望大家提供一下支持和教导