最近在做一个分析功能时,需要循环调用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. windows平台下VLC2.0.5编译

    windows平台下VLC2.0.5编译说明 时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器. 暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学 ...

  2. ipconfig命令

    C:\Windows\System32>ipconfig -all Windows IP 配置 主机名 . . . . . . . . . . . . . : LuJunTao 主 DNS 后缀 ...

  3. 逻辑运算符&& 用法解释

    A&&B 首先判断A,A成功然后判断B:A不成功则结束判断,返回false;

  4. NOI2014 魔法森林

    3669: [Noi2014]魔法森林 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 106  Solved: 62[Submit][Status] ...

  5. php加速缓存Xcache的安装与配置

    安装环境:centos 6.5 32bit  php5.5.7 nginx1.6.0 [root@localhost opt]# wget http://xcache.lighttpd.net/pub ...

  6. c程序设计语言_习题1-13_统计输入中单词的长度,并且根据不同长度出现的次数绘制相应的直方图

    Write a program to print a histogram of the lengths of words in its input. It is easy to draw the hi ...

  7. Android 实用代码七段(二)

    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 一.获取应用程序下所有Acti ...

  8. 如何使一个网络下的2台路由器都可以dhcp上网

    设备:2台路由器,网线若干 首先,设置好一个路由器,让它可以拨号上网.网关设置为192.168.1.1,子网掩码为255.255.255.0,dns为61.177.7.1 然后,设置第二台路由器.设置 ...

  9. STL总结之deque

    STL中deque是我们常说的双端队列,既可以从头添加元素,也可以从尾部添加元素,deque的成员函数和vector的成员函数十分相似,但是它们的内部实现却又很多不同.   deque的模板声明: t ...

  10. HDU 1114 iggy-Bank(完全背包)

    水 给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量 要求出重量最少能装满钱罐时的最大价值 #include<iostream> #include< ...