• 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.多边形控制点直接影响着网格的质量。

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

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

  • 相关阅读:
    终端字符颜色、样式控制
    popen——php多进程利器
    游戏技能效果与buff设定
    Linux 记录服务器负载、内存、cpu状态的PHP脚本
    简单的,省份和城市选择,非ajax版
    一道js题目
    左右结构,右边上固定、下iframe,iframe自动改变大小
    mysql 忘记root密码
    socket 学习(转载)
    子页面关闭后,更新父页面
  • 原文地址:https://www.cnblogs.com/potential/p/2826143.html
Copyright © 2020-2023  润新知