private void addFeature(string layerName, IGeometry geometry)
{
    int i = 0;
    ILayer layer = null;
    // 查找目标图层
    for (i = 0; i < axMapControl1.LayerCount; i++)
    {
        layer = axMapControl1.Map.get_Layer(i);
        if (layer.Name.ToLower() == layerName)
        {
            break;
        }
    }

    // 获取要素图层和要素类
    IFeatureLayer featureLayer = layer as IFeatureLayer;
    IFeatureClass featureClass = featureLayer.FeatureClass;
    IDataset dataset = (IDataset)featureClass;
    IWorkspace workspace = dataset.Workspace;

    // 开始空间编辑
    IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
    workspaceEdit.StartEditing(true);
    workspaceEdit.StartEditOperation();

    // 清除图层原有的实体对象
    IFeatureCursor featureCursor = featureClass.Search(null, true);
    IFeature feature;
    feature = featureCursor.NextFeature();
    while (feature != null)
    {
        feature.Delete();
        feature = featureCursor.NextFeature();
    }

    // 开始插入新的实体对象
    featureCursor = featureClass.Insert(true);
    IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
    featureBuffer.Shape = geometry; // 设置几何形状
    object featureOID = featureCursor.InsertFeature(featureBuffer);

    // 保存实体
    featureCursor.Flush();

    // 结束空间编辑
    workspaceEdit.StopEditOperation();
    workspaceEdit.StopEditing(true);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
}

// 单击 AddGeometry 菜单项时触发的事件
private void addGeometryToolStripMenuItem_Click(object sender, EventArgs e)
{
    // 创建一个几何要素集合
    IGeometryCollection geometryCollection = new MultipointClass();
    object missing = Type.Missing;
    IPoint point;

    // 添加 10 个点到集合
    for (int i = 0; i < 10; i++)
    {
        point = new PointClass();
        point.PutCoords(i * 2, i * 2);
        geometryCollection.AddGeometry(point as IGeometry, ref missing, ref missing);
    }

    // 将集合转换为多点对象
    IMultipoint multipoint = geometryCollection as IMultipoint;

    // 调用 addFeature 方法添加多点到地图
    addFeature('multipoint', multipoint as IGeometry);

    // 设置地图显示范围
    this.axMapControl1.Extent = multipoint.Envelope;
    this.axMapControl1.Refresh();
}

代码说明:

  • addFeature 方法用于向指定名称的图层添加几何要素。
    • 首先,它循环遍历地图控件中的所有图层,找到与给定名称匹配的图层。
    • 然后,获取该图层的要素类,并使用 IWorkspaceEdit 接口开始编辑工作空间。
    • 接着,删除图层中所有现有的要素。
    • 最后,使用 IFeatureCursorIFeatureBuffer 将新的几何要素插入到图层中,保存更改并结束编辑会话。
  • addGeometryToolStripMenuItem_Click 方法演示了如何创建一个包含 10 个点的多点几何对象,并将其添加到名为 'multipoint' 的图层中。
    • 首先,创建一个 MultipointClass 对象,并使用循环添加 10 个点。
    • 然后,将 MultipointClass 对象转换为 IMultipoint 接口。
    • 最后,调用 addFeature 方法将多点添加到地图,设置地图显示范围并刷新地图。

这段代码演示了如何使用 C# 和 ArcGIS API 向地图添加几何要素。 这对于开发自定义 GIS 应用程序非常有用。

C# ArcGIS 添加几何要素到地图图层

原文地址: https://www.cveoy.top/t/topic/bedR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录