C#-ArcEngine 添加图层文件的小问题

C#-ArcEngine 添加图层文件的小问题,第1张

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

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

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

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

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

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

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

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

所以,自然会在左侧的 TocContral

中显示图层的名字。

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

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

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

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

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

// 使用 ArcEngine 将 PageLayout 中的内容保存为图片,可以使用 IActiveView.Output 方法:

// 获取 PageLayout 对象

IPageLayout pageLayout = axPageLayoutControl1.PageLayout

// 获取 IActiveView 对象

IActiveView activeView = pageLayout as IActiveView

// 设置图片的输出路径

string outputPath = @"D:\Test.jpg"

// 将 PageLayout 中的内容保存为图片

activeView.Output(outputPath, 0, 0, 300, 300, 96, 96)

这样的的开发主要用在 ArcSever 开发中;ArcEngine 是用来开发桌面的。

当然你想在 ArcEngine 中实现此功能,也不是不可以。

图钉 和 小泡 可通过 IElement接口来绘制。

思路可以是这样的:

(如:你想在 A 点实现这样的 *** 作)

1、你可以截取 图钉 和 小泡 的图片各两张,通过ArcGIS制作成点状

符号

2、在程序打开时,通过 IElement接口 在 A 点处 绘制一个图钉(即:

将做好的 图钉 符号通过代码加到 A 点的位置);

3、在AxMapControl添加一个单击事件,代码内容为:

如果,点击的是 A 点,则删除 A点处的 图钉 符号 并加载 小泡

符号,且d出 A点的信息窗体。如果,点击的不是是 A 点,且 A点

有 小泡 符号,则清空 小泡 符号,并加载 图钉 符号 ,同时关闭

信息窗体。

(下面有一些 关于 IElement 的代码,供你参考)

IElement pElement = null

IGeometry geometry = pFeature.Shape

switch (geometry.GeometryType)

{

case esriGeometryType.esriGeometryPolygon:

IFillShapeElement pPolygonElement = new PolygonElementClass()

pPolygonElement.Symbol = pFillSymbol// 面符号

pElement = pPolygonElement as IElement

pElement.Geometry = geometry

break

case esriGeometryType.esriGeometryPolyline:

ILineElement pLineElement = new LineElementClass()

pLineElement.Symbol = pLineSymbol// 线符号

pElement = pLineElement as IElement

pElement.Geometry = geometry

break

case esriGeometryType.esriGeometryPoint:

IMarkerElement pMarkerElement = new MarkerElementClass()

pMarkerElement.Symbol = pMarkerSymbol// 点符号

pElement = pMarkerElement as IElement

pElement.Geometry = pFeature.Shape

break

}axMapControl1.ActiveView.GraphicsContainer.AddElement(pElement, 0)// 添加 pElement

( 将 点符号 换成你需要添加 的 小泡 或 图标 符号即可!当然其它符号处也要做相应的 修改!)


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

原文地址: https://outofmemory.cn/bake/11271613.html

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

发表评论

登录后才能评论

评论列表(0条)

保存