基于C#的ArcEngine二次开发47:Addins常见问题解决方案集锦

简介: 基于C#的ArcEngine二次开发47:Addins常见问题解决方案集锦

1.arcgis  自定义工具中找不到Addin control

解决办法:是由于创建的addin程序的.netFramework版本不一致导致,设置为一致即可

20190128153350291.png

2.addin 断点无法调试:提示当前不会命中断点,还没有为该文档加载任何符号

解决办法:ESRI系列的软件启动时默认并不支持.NET4.0,而是.NET2.0,所以需要修改arcgis安装目录下的的bin下面的文件


2019012815364410.png


3 Unable to create .esriAddin; missing ESRI ArcGIS Add-in SDK component(s).  

解决办法:

 打开.csproj项目文件,修改如图位置:添加 .11


20191024163903403.png


4 The operation cannot be performed on a non-simple geometry.

问题描述:

在调用的ITopologicalOperator.Cut()函数时,报了如下错误:


20200729173103783.png

为什么我返回的geometry不是简单的几何呢?


本人猜测是因为返回来的坐标顺序的问题,即你是逆时针绘制图形还是顺时针绘制图形的问题,故造成虽然你绘制了几何图形,但是实际上连接顺序不一致。


解决方案:


对你传入的geometry进行检查,在你应用此geometry之前应该执行此代码:

((ITopologicalOperator)pGeometry).Simplify();

简单解释下此代码的意思,其实很简单就是将你的geometry强制转换为简单的几何。

ITopologicalOperator接口的介绍:https://blog.csdn.net/sydbc/article/details/17710235


5 ArcMap并不包含Editor的定义

错误原因:在程序中使用了如下语句

IEditor pEditor = ArcMap.Editor;


解决方案:将上述语句修改为

IEditor pEditor = ArcMap.Application.FindByExtensionByName("ESRI Object Editor")  as IEditor;

6 面积为负的几何图形处理

面积为负与节点的顺时针和逆时针有关系,正常的图形外环应为顺时针,内环为逆时针;可以调用反转操作函数解决该问题。

IArea pArea = pPolygon as IArea;
if(pArea < 0)
{
    pPolygon.ReverseOrientation();
}

官方示例代码:

public void ReverseOrientation(IFeatureClass featureClass, int oidToEdit)
    {
        IFeature feature = featureClass.GetFeature(oidToEdit);
        if (feature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
        {
            IArea area = feature.Shape as IArea;
            double beforeReverse = area.Area;
            ICurve curve = feature.Shape as ICurve;
            curve.ReverseOrientation();
            double afterReverse = area.Area;
            System.Windows.Forms.MessageBox.Show(String.Format("The polygon area is originally {0}, after the orientation was reversed the area is {1}.",beforeReverse,afterReverse));
        }
    }
相关文章
|
5月前
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
153 1
|
5月前
|
SQL C# 数据库
C#机房重构之错误集锦(三)
C#机房重构之错误集锦(三)
30 0
|
12月前
|
C#
CAD2015 C#二次开发 字体变形
CAD2015 C#二次开发 字体变形
|
5月前
|
C#
C#机房重构之错误集锦(二)
C#机房重构之错误集锦(二)
74 0
|
12月前
|
C# C++
[记录]c/c++和c#联调常见问题
[记录]c/c++和c#联调常见问题
|
C#
C#之四十二 C# 读写文本文件乱码解决方案
C#之四十二 C# 读写文本文件乱码解决方案
336 0
|
测试技术 C# C++
C# 如何部分加载“超大”解决方案中的部分项目
在有的特有的项目环境下,团队会将所有的项目使用同一个解决方案进行管理。这种方式方面了管理,但是却会导致解决方案变得非常庞大,导致加载时间过长。那么,如何部分加载解决方案中的部分项目呢?
191 0
C# 如何部分加载“超大”解决方案中的部分项目
|
程序员 C#
【C#】SignalR之主动推送信息的简单解决方案
在本篇文章中,将讲讲C#如何使用SignalR通讯 Core下的SignalR实现原理一样,只是写法不一样,主动推送消息的场景使用:页面登录后台管理系统,最新订单信息的通知等
298 0
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用