当前位置:数据库 > Oracle >>

基于ArcGIS10.0和Oracle10g的空间数据管理平台十六(C#开发)-空间数据编辑(上)

今天要介绍的内容比较高级,就是通过可视化的操作进行空间数据的编辑操作。不过这里面涉及到很多难度比较大的高级功能,例如怎样选中一个图元、怎样移动图元、怎样确认图元的位置以及实现编辑的撤销操作等等。下面按照自己实现的步骤详细介绍如下。

1.定义空间数据编辑类的成员变量,具体代码如下:

[csharp]
private IFeatureWorkspace pFW; 
private IMapControl3 m_MapControl;  //地图控件 
private IMap m_pMap;                //地图控件中的地图 
private ILayer m_pCurrentLayer;     //地图中的当前操作图层 
private IFeature m_pEditFeature;    //当前编辑的要素 
private IPoint m_pPoint;            //当前鼠标点击位置 
private IDisplayFeedback m_pFeedback; //用于地图显示 
private IPointCollection m_pPointCollection; //当前要素的点集 
private bool m_bInUse;              //是否处于同一个编辑状态 
private bool m_bEditingFtr;         //是否为编辑要素状态 
private bool m_bSketching;          //是否为新建要素状态 
private bool m_bSelecting;          //是否为选择要素状态 
private bool m_bMove;               //是否为移动要素状态 

2.初始相关成员变量和数据

[csharp]
private void FrmSpatialDataEdit_Load(object sender, EventArgs e) 

    // Setup the application 
    m_MapControl = (IMapControl3)axMapControl1.GetOcx(); //获取地图控件 
    m_pMap = m_MapControl.Map; 
    cboTasks.SelectedIndex = 0; 
    LoadLayers();       //载入图层 
    SetControlStates(); //设置四个命令按钮状态 

    上面代码首先由地图控件来获取它的一个实例对象,然后得到地图控件中的地图对象,接着就调用函数载入图层并设置相应操作按钮的初始化状态。载入图层的代码实现 如下:

[csharp]
/// <summary> 
/// 载入图层,并在地图空间中加入第一个图层 
/// </summary> 
private void LoadLayers() 

    //1.遍历SDE的每一个独立要素集中的要素类 
    IWorkspace pW = MapOperation.GetFeatrueWorkspace() as IWorkspace; 
    IEnumDataset pED = pW.get_Datasets(esriDatasetType.esriDTFeatureDataset); 
    IFeatureDataset pFD = pED.Next() as IFeatureDataset; 
 
    while (pFD != null) 
    { 
        IFeatureClass pFC; 
        IFeatureClassContainer pFCC = pFD as IFeatureClassContainer; 
        for (int i = 0; i < pFCC.ClassCount; i++) 
        { 
            pFC = pFCC.get_Class(i); 
            cboLayers.Items.Add(pFC.AliasName); 
        } 
 
        pFD = pED.Next() as IFeatureDataset; 
    } 
 
    //2.遍历SDE的每一个独立要素类 
    pED = pW.get_Datasets(esriDatasetType.esriDTFeatureClass); 
    IDataset pD = pED.Next(); 
    while (pD != null) 
    { 
        IFeatureClass pFC = pD as IFeatureClass; 
 
        cboLayers.Items.Add(pFC.AliasName); 
        pD = pED.Next(); 
    } 
 
    cboLayers.SelectedIndex = 0; 
    AddLayerToMapCtl(cboLayers.SelectedItem.ToString(), true);  

    设置操作按钮的代码如下:

[csharp]
/// <summary> 
/// 设置四个命令按键的功能 
/// </summary> 
private void SetControlStates() 

    bool bEnabled = InEdit(); 
 
    btnStartEditing.Enabled = !bEnabled; 
    btnDelete.Enabled = bEnabled; 
    btnUndo.Enabled = bEnabled; 
    btnStopEditing.Enabled = bEnabled; 
    cboTasks.Enabled = bEnabled; 
 
    if (bEnabled) 
    { 
        lblTask.ForeColor = Color.Black; 
    } 
    else 
    { 
        lblTask.ForeColor = Color.Gray; 
    } 

 

    也有禁止相应按钮功能的函数代码如下:
[csharp]
private void DisableControls() 

    // Disables all but the layer selection combo  
    btnStartEditing.Enabled = false; 
    btnDelete.Enabled = false; 
    btnUndo.Enabled = false; 
    btnStopEditing.Enabled = false; 
    lblTask.ForeColor = Color.Gray; 

3.实现加载图层到图层控件中去,这样就可以在图形控件中进行编辑操作了,具体加载代码如下:

[csharp]
/// <summary> 
/// 加入图层到地图空间中 
/// </summary> 
/// <param name="layerName">图层名称</param> 
/// <param name="isVisible">是否显示</param> 
private void AddLayerToMapCtl(string layerName, bool isVisible) 

    if (pFW == null) 
    { 
        pFW = MapOperation.GetFeatrueWorkspace(); 
    } 
    IFeatureClass pFC; 
    try 
    { 
        pFC = pFW.OpenFeatureClass(layerName); 
    } 
    catch (Exception) 
    { 
        return; 
    } 
 
    IFeatureLayer pFL = new FeatureLayerClass(); 
    pFL.FeatureClass = pFC; 
    pFL.Name = layerName; 
    pFL.Visible = isVisible; 
 
    axMapControl1.Map.AddLayer(pFL); 
    axMapControl1.ActiveView.Refresh(); 

4.检查工作空间中是否有数据处于编辑状态,是就返回true。

[csharp]
/// <summary> 
/// 检查工作空间中是否有数据处于编辑状态 
/// </summary> 
/// <returns>是否正在编辑</returns> 
private bool InEdit() 

    // Check edit condi

补充:软件开发 , C# ,
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,