ArcObjects使用AddLayer方法添加到图层的方法

运行坏境:vs2010,ArcGID10.1

AO中,通过AddLayer方法添加图层的代码如下:

1        IWorkspaceFactory workSpaceFactory = new ShapefileWorkspaceFactoryClass();
2             IFeatureWorkspace featureWorkspace = workSpaceFactory.OpenFromFile(@"D:\Program Files\ArcGIS\Desktop10.1\ArcGlobeData", 0) as IFeatureWorkspace;
3             IFeatureLayer featureLayer = new FeatureLayerClass();
4             featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass("continent.shp");
5             //featureLayer.Name = featureLayer.FeatureClass.AliasName;
6             this.axMapControl1.AddLayer(featureLayer as ILayer);
7             this.axMapControl1.Refresh();

需要添加的命名空间有:

using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesFile;

 其中,IWorkspaceFactory,IFeatureWorkspace属于ESRI.ArcGIS.Geodatabase这个命名空间, IFeatureLayer属于ESRI.ArcGIS.Carto命名空间,ShapefileWorkspaceFactoryClass则属于ESRI.ArcGIS.DataSourcesFile这个命名空间。

生成解决方案的时候会出现这样的错误:

这就是嵌入互操作的错误,解决方法如下:

 在解决方案资源管理器中找到FeatureLayerClass和ShapefileWorkspaceFactoryClass所引用的命名空间,即ESRI.ArcGIS.Carto和ESRI.ArcGIS.DataSourcesFile,右键选择属性,将嵌入互操作类型改为false,这样就OK了,生成成功!

但是在运行的时候,还会弹出这样一个错误:

说的很清楚,ArcGIS的版本指定不明确,所以在Program.cs中添加

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);

这样一句话就OK了,如下所示:

static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
            Application.Run(new Form1());
        }


这样,整个应用程序就都运行成了!

转载于:https://www.cnblogs.com/zhzhx/archive/2013/04/11/3015033.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用C# ArcObjects中的以下代码从一个层中复制要素并粘贴到另一个层。假设您已经创建了两个要素层`sourceFeatureLayer`和`targetFeatureLayer`,并且已经选择了要复制的要素。 ``` // 获取源层和目标层的FeatureClass IFeatureClass sourceFeatureClass = sourceFeatureLayer.FeatureClass; IFeatureClass targetFeatureClass = targetFeatureLayer.FeatureClass; // 获取源层和目标层的字段 IFields sourceFields = sourceFeatureClass.Fields; IFields targetFields = targetFeatureClass.Fields; // 创建查询过滤器 IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.WhereClause = sourceFeatureLayer.SelectionSet.IDs.Count > 0 ? sourceFeatureLayer.SelectionSet.IDs.AsArray().Select(x => $"{sourceFeatureClass.OIDFieldName} = {x}").Aggregate((x, y) => $"{x} OR {y}") : null; // 使用游标遍历要素并复制到目标层 IFeatureCursor sourceFeatureCursor = sourceFeatureClass.Search(queryFilter, true); IFeatureCursor targetFeatureCursor = targetFeatureClass.Insert(true); IFeature sourceFeature = null; IFeatureBuffer targetFeatureBuffer = null; while ((sourceFeature = sourceFeatureCursor.NextFeature()) != null) { // 创建目标要素 targetFeatureBuffer = targetFeatureClass.CreateFeatureBuffer(); sourceFeature.Store(); // 复制字段值 for (int i = 0; i < sourceFields.FieldCount; i++) { IField sourceField = sourceFields.get_Field(i); IField targetField = targetFields.get_Field(targetFields.FindField(sourceField.Name)); if (sourceField.Type == targetField.Type) { targetFeatureBuffer.set_Value(i, sourceFeature.get_Value(i)); } } // 复制几何 IGeometry sourceGeometry = sourceFeature.ShapeCopy; IGeometry targetGeometry = sourceGeometry.Copy(); targetFeatureBuffer.Shape = targetGeometry; // 插入目标要素 targetFeatureCursor.InsertFeature(targetFeatureBuffer); } // 释放游标 System.Runtime.InteropServices.Marshal.ReleaseComObject(sourceFeatureCursor); System.Runtime.InteropServices.Marshal.ReleaseComObject(targetFeatureCursor); // 更新目标层 targetFeatureLayer.FeatureClass = targetFeatureClass; targetFeatureLayer.Name = "New Feature Layer"; // 显示目标层 IMxDocument mxDocument = (IMxDocument)ArcMap.Application.Document; IMap map = mxDocument.FocusMap; map.AddLayer(targetFeatureLayer); mxDocument.UpdateContents(); mxDocument.ActiveView.Refresh(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值