• 转:ITopologicalOperator Buffer调用异常的解决方法(来源网络)


    /// <summary>
      /// 用拓扑分析求出缓冲区范围。
      /// 由于ArcGIS的问题,有时调用会出异常,因此需要循环调用
      /// </summary>
      /// <param name="oShape">要缓冲区的图形</param>
      /// <param name="dbTolerance">缓冲距离</param>
      /// <returns>生成的缓冲区图形</returns>

      public static IGeometry GetBuffer(IGeometry oShape, double dbTolerance)
      {
       IGeometry oBuffer = null;
       if (oShape == null)
        return oBuffer;
       ITopologicalOperator pTopo = oShape as ITopologicalOperator;
       if (!pTopo.IsSimple) {//如果不是简单图形,进行简化处理
        pTopo.Simplify();
       }

       esriGeometryType iType = oShape.GeometryType;

       //参数不正确
       if (dbTolerance < 0 && iType != esriGeometryType.esriGeometryPolygon)
        return oBuffer;

       int iTry = 0;//尝试10次
       while (oBuffer == null && iTry <= 10) {
        try {

          //如果调用不成功,将缓冲距离加0.01倍再试(如果第10次成功,则缓冲距离比原来大了0.09倍)

          //如果对缓冲距离要求更严格,可以减少增量的倍数

          //根据测试经验,一般最多尝试三次就可以成功
         oBuffer = pTopo.Buffer(dbTolerance * (1.0 + 0.01 * iTry));
        } catch {
         oBuffer = null;
         iTry = iTry + 1;
        }
       }
       return oBuffer;
      }

    PS:代码并不重要,重要的是思路,变通才是王道,也许是当时本人觉得很有想法,所以把代码给留了下来。

  • 相关阅读:
    天梯赛 社交集群(并查集)
    蓝桥杯 正则问题(dfs)
    天梯赛L3-001. 凑零钱(01背包记录物品)
    天梯赛/PAT 二叉树总结
    GPLT天梯赛 L2-022. 重排链表
    蓝桥杯 2的次幂表示(递归)
    排列与组合的一些定理
    卡特兰数
    洛谷P1349 广义斐波那契数列(矩阵快速幂)
    Manacher's Algorithm 马拉车算法(最长回文串)
  • 原文地址:https://www.cnblogs.com/wenwu/p/3382310.html
Copyright © 2020-2023  润新知