最近有接触到水环境的项目,其中了解到一维水质模型及转化的污染物降解模型,大体需求是通过模型计算获取从河流任意指定位置污染物浓度降解到满足目标考核要求的浓度,所经过的河流数据按污染物浓度等级可视化。因为涉及到空间数据计算,就考虑到用FME去尝试下,最后基于FME对模型进行了简单实现。
河流一维水质模型:
式中:
u——河流断面平均流速,m/s;
x——沿程距离,km;
K——综合降解系数,1/d;
C——沿程污染物浓度,mg/L;
C0——前一个节点后污染物浓度,mg/L。
经转化,得到污染物降解模型:
式中:
x——为监测超标断面到降解到目标浓度断面的距离,km;
u——模拟段河流断面平均流速,m/s;
K——模拟河段的综合降解系数,1/d;
C——指满足目标考核的污染物浓度,mg/L;
C0——为上游监测断面污染实测物浓度,mg/L。
2)与当前河流线打断,通过空间过滤获取下游相关联河流线段数据;
3)根据污染物降解要求根据污染物降解模型验算出达到标准要求污染物浓度时,所经过河流长度;
4)当前河流满足降解要求截取当前长度河流坐标数据输出,不满足要求时根据一维水质模型计算遇到多个干流、支流节点时的污染物浓度,以当前节点为起始循环计算后续干流及支流达到降解要求所经过的河流数据输出。
本次降解模型实现的核心在于对存在多支流情况的数据处理,即当前河段满足不了污染物降解标准时,计算出污染物流经当前河段后降解到的指标,以当前河段末节点及相关污染指标做为相邻干流及支流河段起始验算指标进行后续迭代计算,直到找出满足污染物降解标准要求所流经过的所有河流数据为止。整个循环处理过程见下图:
上述循环过程,我个人感觉比较省事的一点,就是用PythonCaller去控制循环,本循环里面涉及线、面两类数据,刚开始测试时没在自定义转换器内部做循环控制逻辑,只通过循环次数参数控制想看下效果,结果发现每次线数据有筛选出来不参与计算的直接进入下次循环,然后整个循环过程就发现就在跑线,面一直没追上。刚开始想通过转换器组合去控制循环,后面考虑到PythonCaller可以控制输出就尝试了下,果然几句代码效果显著:
本次只是简单利用FME对一维水质模型及变换而来的污染物降解模型在实际应用中的一次测试验证,通过本次测试感觉又可以将FME拓展到一些新的应用方向比如大气环境、水环境等相关模型的实现。