ITopologicalOperator Buffer调用异常的解决方法 .异常来自 HRESULT:0x8004023E
最近在做一个分析功能时,需要循环调用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的更多相关文章
- 多线程访问winform控件出现异常的解决方法
一. 多线程访问winform控件出现异常的解决方法 1. 问题描述<1> 如果创建某控件的线程之外的其他线程试图调用该控件,则会引发一个 InvalidOperationExcept ...
- SSH乱码和Xshell异常断开解决方法
一.SSH Secure Shell Client中文乱码的解决方法 这是SSH Secure Shell Client多年未解决的短板,要求客户端和服务器端都要‘UTF-8’编码,我终于知道Wind ...
- java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repr ...
- Maven常见异常及解决方法
异常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for projec ...
- VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法 及添加方法
对于前面问题的分析:来源于http://blog.163.com/yuyang_tech/blog/static/216050083201211144120401/ 解决方法1: //来源:http: ...
- maven常见异常以及解决方法
本文写的是我在整合ssm框架时遇到的一些问题,我估计很多人也会遇到,所以,这里作为一个总结,希望能够帮助大家解决问题 一,加入shiro组件时抛出的异常 加入步骤(略) 问题 1,保存后,无法导入sh ...
- Emgu CV的一个异常的解决方法
今年组里有大项目落我头上了,并不能像去年一样回家还能搞搞Cocos2dX,一把老泪流了下来... 回到正题,由于组里需要做一个显示板的自动测试项目,涉及到Computer Vision.不得不说,这才 ...
- Java中的ExceptionInInitializerError异常及解决方法
当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异常.如果你了解Java中的静态变量,你会知道它们是在类加载的时候进行初始化 ...
- 某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法
在某APK中,通过如下方法动态注册了一个BroadcastReceiver,代码参考如下: @Override protected void onAttachedToWindow() { super. ...
随机推荐
- 正则 ?<= 和 ?= 用法
参考网址:http://baike.baidu.com/link?url=2zORJF9GOjU8AkmuHDLz9cyl9yiL68PdW3frayzLwWQhDvDEM51V_CcY_g1mZ7O ...
- git获取远端版本库上的Tag (没有clone[远端的版本库太大了])
方法一 http://stackoverflow.com/questions/25815202/git-fetch-a-single-commit The git fetch command deli ...
- Medium上关于git的文章
rebase和merge的正确使用时机 https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa ...
- PHP imdb类多个跨站脚本漏洞
漏洞版本: PHP imdb Classes 2-2.1.5 漏洞描述: BUGTRAQ ID: 64542 PHP是一种HTML内嵌式的语言. PHP imdb类2-2.1.5及其他版本在实现上存在 ...
- SCOI2005互不侵犯King
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1499 Solved: 872[Submit][S ...
- 【转】使用XCODE 的SOURCE CONTROL 做版本控制 (1)
原文网址:http://it.zhaozhao.info/archives/60469 有一次笔者在开心项目准备尝试新的练习的时候,赫然注意到在选择档案存放位置的时候,下面有个Source Contr ...
- 延期(deferred)的承诺(promise) — jq异步编程浅析
引子 相信各位developers对js中的异步概念不会陌生,异步操作后的逻辑由回调函数来执行,回调函数(callback function)顾名思义就是“回头调用的函数”,函数体事先已定义好,在未来 ...
- oracle 高水位线
一.oracle 高水位线详解 一.什么是水线(High Water Mark)? 概念: 1.块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是 ...
- bzoj 1951 [Sdoi2010]古代猪文(数论知识)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1951 [思路] 一道优(e)秀(xin)的数论题. 首先我们要求的是(G^sigma{ ...
- NOIP2002 矩形覆盖
题四 矩形覆盖(存盘名NOIPG4) [问题描述]: 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2), ...