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的安装等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)