通过GeometryService+gp服务实现河流污染模拟

首先来看看最终的效果图:

本文将说一下实现该功能的思路和方法,鉴目前项目涉及到一些保密文件,在此不便贴出代码,不过在后续的工作中,我会抽时间来一一整理本博客的所有代码,并全部共享。

下面就来看看具体实现的思路。

1.河流的网格划分

关于河流的网格划分,可以参考前一篇博文:

http://www.cnblogs.com/potential/archive/2012/12/20/2826143.html

该文给出了网格划分的思路,在此不再多说。

2.河流的污染预测模型的选择。

这里本文采取了二维的河流污染扩散模型,并以中心排放为例,其他模式也是一样。这里涉及到一个比较难的问题是:如何求出每一个网格点的(X,Y)坐标,即网格点到河流中心线的距离以及沿河流方向到污染源的距离。

本文这里提供一个解决方案是:

(1):对于求沿河流方向到污染源的距离,可以通过路径服务实现,首先提取出河流的中心线,将该中心线构建成网络数据集,发布成网络分析服务,那么我们随便选取的两个点(两个点分别到中心线的距离都要小于网络分析服务设置的搜索容差,否则无法求出距离),通过网络分析服务可以求出其沿河流方向(中心线)的距离。

(2):对于网格点到河流中心线的距离可以通过GIS的GeometryService的Distance操作来实现,这个比较容易。

求得每一个网格点的(X,Y)后,接下来就是根据选定的污染扩散模型,计算每一个点的浓度。

3.污染物浓度分布的可视化

在得到每一个点的浓度之后,那么接下来就是进行插值渲染。但是这里我们需要注意的就是,我们要保证渲染的图层落在河流之内。也就是上图的彩色区域都在河流中。然后我们会注意到一个问题,默认插值时的范围都是矩形,如果不进行其他的操作,那么我们的得到的图层将是一个矩形区域,这显然不符合河流污染物的扩散,因此需要裁剪掉河流以外的区域。这里实现插值的过程采用的是GP服务,GP服务的模型如下所示:

这里通过掩膜提取对插值的删格图像进行裁剪,以保证插值图层在河流的之内。

关于GP服务的发布可参考这里:

http://www.cnblogs.com/potential/archive/2012/10/27/2742355.html

关于Web端调用GP服务可参考这里:

http://www.cnblogs.com/potential/archive/2012/11/03/2752289.html

(版权所有,转载请标明出处)

原文地址:https://www.cnblogs.com/potential/p/2837762.html