ArcGIS API for Silverlight 使用GeometryService进行河流网格划分(三)

先来看看最终的效果图吧!

对于岛屿情况:

相信很多人都做过关于河流的分析,而其中多少会涉及到河流的网格划分。二这也一直是一个难点,尤其是在Web端(本文只针对Silverlight)。而就目前查阅的资料来看,关于这方面的资料少之又少。大部分的网格划分要不就是理论,要不就是基于桌面的,而桌面的网格划分要比Web容易的多,此外,还有一种情况就是先在ArcMap中划分好,在Web端查询一定区域的网格划分点。

Web端的河流网格划分有以下几个难点:

(1).如何对河流进行网格划分得到网格点(网格划分点落在河流之内)

(2).得到的网格点如何与Web地图结合,建立地理关系

(3).针对不同的河流复杂程度(例如:河流弯曲程度不一,包含岛屿等),网格划分方法同样适用

解决了以上3个问题,那么河流网格划分问题就基本可以解决了。

 

下面我们来看看如何解决上面的3个问题。

 

目前在多数的网格划分采用的是贴体网格划分,通过求解微分方程,将不规则的河流转化到X-Y坐标系下,从而便于求解,这种方式得到的网格点很好,然而繁琐,特别是在在Web端实现更加困难,同时也无法直接与地图结合。此外偏微分方程的求解还需要一定的数学功底,因此并不适合我们普通的开发人员。

在这里我们采取添加控制点——绘制多边形——等分多边形——求交线——等分交线的方式来得到最后的网格。请看下面的示意图:

a.添加控制点,得到多边形

我们绘制了一个沿着河流的多边形,接下来,我们按照设置的等分数,等分多边形,如下图所示:

这里实现的原理的,得到河流两边的控制点,根据各边的控制点,得到各边的总长度,然后根据总长度按照设置的等分数,等分两边的多边形。接着连接两边的等分点。接下来我们就需要求解这些等分线与河流的交线。如下图所示:

这样得到与河流的交线之后,我们再对每一段的交线进行等距划分,然后得到等分点,最后如下图所示:

这样我们便得到了最终的网格点。

以上过程不需要借助任何第三方控件,只需要使用ArcGIS API for Silverlight,结合GeometryService即可完成,代码量不多,实现起来也不难。

在此提供这么一种方法大家可以自己试一试。具体代码在后续的工作中将给出。

总结:

本文方法方法的优点:

1.适用于弯曲程度不一的河流,包括河流包含岛屿等情况

2.可以按照指定的点的个数,疏密情况进行网格划分。

3.可以很好的结合Web地图

该方法的缺点:

1.目前还无法在河流交叉地方进行网格划分。

2.网格线不能保证与河流的中心线垂直。

3.多边形控制点直接影响着网格的质量。

如果您有什么好的建议或者改进的方法,欢迎留言分享。

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

posted @ 2012-12-20 13:56  Mr|Right  阅读(3612)  评论(2编辑  收藏  举报