最近在做一个分析功能时,需要循环调用Buffer来对图形创建缓冲区。在开发测试时没问题,但拿到客户实际使用时,出现异常。

后来把出异常的数据拿来测试,发现在调用Buffer时出错。但做为参数传入的图形确信是没有任何问题的。似乎是Buffer内部实现的问题。没辙,经过几天的尝试,总算找到了解决办法。

在Buffer调用出错后,稍微调整一下缓冲距离参数就成功了。于是,写了一个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;
  }

来自:http://blog.csdn.net/denny553/article/details/4331664#comments

ITopologicalOperator Buffer调用异常的解决方法 .异常来自 HRESULT:0x8004023E的更多相关文章

  1. 多线程访问winform控件出现异常的解决方法

    一.  多线程访问winform控件出现异常的解决方法 1.  问题描述<1> 如果创建某控件的线程之外的其他线程试图调用该控件,则会引发一个 InvalidOperationExcept ...

  2. SSH乱码和Xshell异常断开解决方法

    一.SSH Secure Shell Client中文乱码的解决方法 这是SSH Secure Shell Client多年未解决的短板,要求客户端和服务器端都要‘UTF-8’编码,我终于知道Wind ...

  3. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法

    今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repr ...

  4. Maven常见异常及解决方法

    异常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for projec ...

  5. VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法 及添加方法

    对于前面问题的分析:来源于http://blog.163.com/yuyang_tech/blog/static/216050083201211144120401/ 解决方法1: //来源:http: ...

  6. maven常见异常以及解决方法

    本文写的是我在整合ssm框架时遇到的一些问题,我估计很多人也会遇到,所以,这里作为一个总结,希望能够帮助大家解决问题 一,加入shiro组件时抛出的异常 加入步骤(略) 问题 1,保存后,无法导入sh ...

  7. Emgu CV的一个异常的解决方法

    今年组里有大项目落我头上了,并不能像去年一样回家还能搞搞Cocos2dX,一把老泪流了下来... 回到正题,由于组里需要做一个显示板的自动测试项目,涉及到Computer Vision.不得不说,这才 ...

  8. Java中的ExceptionInInitializerError异常及解决方法

    当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异常.如果你了解Java中的静态变量,你会知道它们是在类加载的时候进行初始化 ...

  9. 某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法

    在某APK中,通过如下方法动态注册了一个BroadcastReceiver,代码参考如下: @Override protected void onAttachedToWindow() { super. ...

随机推荐

  1. vs2010+ Ankhsvn使用详解

    1.为什么要用VisualSVN Server,而不用Subversion? 回答: 因为如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Serve ...

  2. VJP1193 扫雷(状压)

    链接 保存当前行和前一行两行的状态 #include <iostream> #include<cstdio> #include<cstring> #include& ...

  3. JSOI2009 游戏

    1443: [JSOI2009]游戏Game Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 557  Solved: 251[Submit][Stat ...

  4. $apply() $digest()

    理解Angular中的$apply()以及$digest() <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  5. HTMLParser 使用详解

    htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或   提取html.它能超高速解析html,而且不会出错.现在htmlparser最新版本为2 ...

  6. 使用Apache 的lib进行List、Set、数组之间的转换(转)

    使用Apache Jakarta Commons Collections: import org.apache.commons.collections.CollectionUtils; String[ ...

  7. SQL Server 堆表与栈表的对比(大表)

    环境准备 使用1个表,生成1000万行来进行性能对比(勉强也算比较大了),对比性能差别. 为了简化过程,不提供生成随机数据的过程.该表初始为非聚集索引(堆表),测试过程中会改为聚集索引(栈表). CR ...

  8. linux驱动程序之电源管理之标准linux休眠与唤醒机制分析(一)

    1. Based on linux2.6.32,  only for mem(SDR) 2. 有兴趣请先参考阅读: 电源管理方案APM和ACPI比较.doc Linux系统的休眠与唤醒简介.doc 3 ...

  9. leetcode之Palindrome Partitioning

    方法一:DFS递归,判断每一个是否为回文数 1,首先要有一个判断字符串是否是回文的函数.容易实现,字符串从两边同时往中间走,看字符是否相同; 2,深度优先搜索思想对字符串进行遍历.得到结果.例如,s ...

  10. POJ1502: MPI Maelstrom

    红果果的dijstra算法应用,这里采用邻接表存储图 小插曲:while(scanf("%d",&n))提交时内存超限,改成while(scanf("%d&quo ...