Arcmap|关于Arcmap有时复制要素到另一图层不成功的问题

在ArcMap中,解决复制要素到现有图层失败的问题,可以通过选中目标要素,启动编辑,使用编辑器的复制和粘贴功能,直接将要素复制到同一文档内的其他图层,避免创建新图层。
摘要由CSDN通过智能技术生成

先选中要复制的要素,然后点击编辑器的“开始编辑”,点击复制、粘贴,就可以复制到另一图层中而不会粘贴出现新图层了。

您可以使用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(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

difizuhvovs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值