C#ARCENGINE编程问题,我设计了一个窗体,现在想通过一个按钮然后在MAPCONTROL上添加点

C#ARCENGINE编程问题,我设计了一个窗体,现在想通过一个按钮然后在MAPCONTROL上添加点,第1张

private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)

{

try

{

IMap pFoucusMap = axMapControl1Map;

//// 根据鼠标点构造点图形

IPoint pMousePoint = new PointClass()

{

X = emapX,

Y = emapY,

SpatialReference = pFoucusMapSpatialReference

};

// 方式一

IColor pPointColor=new RgbColorClass(){Green=200,Red=130,Blue=0}; // 点颜色

ISymbol pDrawSymbol = new SimpleMarkerSymbolClass(); // 符号样式

(pDrawSymbol as ISimpleMarkerSymbol)Color = pPointColor;

axMapControl1DrawShape(pPointColor,ref pDrawSymbol); // 绘制点

// 方式二

IElement pPointElement = new MarkerElementClass();

pPointElementGeometry = pMousePoint;

(pPointElement as IMarkerElement)Symbol = pDrawSymbol;

(pFoucusMap as IGraphicsContainer)AddElement(pPointElement,0);

(pFoucusMap as IActiveView)Refresh();

}

catch (Exception ex)

{

MessageBoxShow("绘制异常:" + exMessage);

}

}

出现红色叹号,估计你是加载的mxd文档吧,那原因可能是数据源出错,也就是说图层的路径改变了。 这种情况最好的解决办法是:用arcmap打开mxd文档,重新设置数据源(最好是把数据源和mxd放在一个文件夹中),再设置mxd的属性,勾选 以相对路径储存数据。这样当你移动数据时,将mxd文档和数据一起移动,只要保证他们的相对位置不变就可以了。

ArcGIS软件 可分为三个部分:

一、桌面 *** 作即ArcGIS Desktop ( 35G 左右),

二、桌面二次开发即ArcEngine (300MB 左右),

三、网络服务即ArcServer (26G 左右)、

ArcIMS(93以后就没了)

其它,的还有数据库引擎 ArcSDE (350MB 左右) 等

不同模块版本必须统一,也就是说,要是装了93 Desktop ,以后其它组件都要装93的(ArcServer92 和 ArcServer93 有很大差别 不兼容!ArcEngine 区别不大)。

且每个模块有不同的 许可文件 (你的 licensedat 是用来 安装 ArcGIS Desktop 的, 而 ArcEngine 的许可文件为 ecp 文件) 因为你没有安装 ArcEngine 所以,才会出现 license Failure 的错误提示。虽然,你能在VS中找到它们,但由于你没有安装 ArcEngine ,所以,没有使用它们的权限。

我这有 93 的破解文件,和相关的安装包。

你给我邮箱 我发你!

没去实际做过,但有个想法:将不同比例尺的数据分开存放,监听MapControl的Map_Extend事件,在其中得到当前实时的地图比例尺,在事件处理代码中根据当前比例尺的大小加载相应比例尺的数据,同时清除不需要显示的数据。希望帮助到你。

lyr文件 和 mxd 文件类似,相当于一个小的工程文件。是用来存储图层相关信息的,而不存储图层本身的内容,它通过存储图层的绝对路径或相对路径来获取图层。在打开 lyr 文件时,程序通过 绝对路径或相对路径来 寻找图层并加载到 axMapControl 控件中,同时也将上次保存的相关图层信息(如:上次你保存颜色等。如果直接打开 shp 文件 系统会随机生成颜色和其它信息)加载进去。这样会有一个弊端,那就是如果你改变了 图层的 路径,文件打开就会出错。

而出现在MapContral控件中不显示任何内容,但左侧的TocContral中显示图层的名字,但是有叹号的原因是:

在MapContral控件中不显示任何内容,是由于无法找到图层自然无法加载

图层,也就不会显示内容,存储的

图层信息(关于显示图层 或 图层

修饰信息)自然也就无效了。

左侧的TocContral中显示图层的名字,是因为 lyr文件 的确存在,它存储

图层的相关信息(如:图层名称等)

所以,自然会在左侧的 TocContral

中显示图层的名字。

有叹号,是因为无法寻找到 图层 导致 FeatureClass 属性为 空(null)

也就是说图层不存在,接下对图层的任何 *** 作(如:添加了一条

记录 Feature ,或删除 一条记录 等)都会出错!

所以说该状况的出现是由于 路径 问题引起的。你可以在 ArcMap 中,找到

原图层,重新 保存为 lyr文件 即可。

可以不用ITopologicalOperator,直接用空间查询就可以实现

//spatial query

ISpatialFilter pSpatialFilter = new SpatialFilterClass();

pSpatialFilterGeometry = (IGeometry)pPolyline;//用于查询的polyline

SpatialFilterSpatialRel = esriSpatialRelEnumesriSpatialRelIntersects;//Intersect

IFeatureCursor pFeatureCursor = pFeatureClassSearch(pSpatialFilter, false);//query

IFeature pFeature = pFeatureCursorNextFeature();

while (pFeature != null)

{

IPolyline pQueryPolyline = (IPolyline)pFeatureShape ; //查询出来的polyline

pFeature = pFeatureCursorNextFeature();

}

//release com resource

SystemRuntimeInteropServicesMarshalReleaseComObject(pFeatureCursor);

以上就是关于C#/ARCENGINE编程问题,我设计了一个窗体,现在想通过一个按钮然后在MAPCONTROL上添加点全部的内容,包括:C#/ARCENGINE编程问题,我设计了一个窗体,现在想通过一个按钮然后在MAPCONTROL上添加点、C# arcengine 开发,求教。。。、关于ArcEngine的安装等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10141674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存