向SDE中添加图层(删除图层)

using System;
using System.Collections.Generic;
using System.Text;

using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Geometry;
using System.Runtime.InteropServices;

namespace ZSoft.GIS.ADF.GISCore
{
    public class SDETool:IDisposable
    {
        //工作空间
        private ESRI.ArcGIS.Geodatabase.IWorkspace m_pWorkspace = null;
        private bool m_connected = false;

        public bool Connected
        {
            get { return m_connected; }
            set { m_connected = value; }
        }

        //链接SDE
        public bool ConnectSDE(string strServer, string strUserName, string strPassword, string strInstance, string strDatabase, string strVersion)
        {
            IWorkspaceFactory2 pWorkspaceFactory = null;
            IPropertySet pConnectionProperties = new PropertySetClass();
           
            try
            {
                pWorkspaceFactory = new SdeWorkspaceFactoryClass();

                pConnectionProperties.SetProperties("SERVER", strServer);
                pConnectionProperties.SetProperties("USER", strUserName);
                pConnectionProperties.SetProperties("PASSWORD", strPassword);
                pConnectionProperties.SetProperties("INSTANCE", strInstance);
                pConnectionProperties.SetProperties("DATABASE", strDatabase);
                pConnectionProperties.SetProperties("VERSION", strVersion);
                pConnectionProperties.SetProperties("DATABASE", strDatabase);

                m_pWorkspace = pWorkspaceFactory.Open(pConnectionProperties, 0);
                m_connected = true;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                m_connected = false;
            }
            return m_connected;
        }

        //创建SDE图层
        public IFeatureLayer CreateSDELayer(string DataSetName, string AliaseName, int GeometryType, List<string> strFldsInfo)
        {
            //检查SDE是否连接
            if (m_connected == false)
                return null;

            //IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
            //IFeatureWorkspace inmemWor = (IFeatureWorkspace)workspaceFactory.OpenFromFile("c://", 0);

            IFields oFields = new FieldsClass();

            IFieldsEdit oFieldsEdit = oFields as IFieldsEdit;
            IFeatureClass oFeatureClass = null;
            IFeatureLayer oFeatureLayer = null;

            try
            {
                //增加string类型字段
                IField oField = new FieldClass();
                IFieldEdit oFieldEdit = oField as IFieldEdit;
                oFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                oFieldEdit.Name_2 = "MiscText";
                oFieldEdit.Length_2 = 30;
                oFieldsEdit.AddField(oField);

                //增加形体定义字段
                IGeometryDef geometryDef = new GeometryDefClass();
                IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
                geometryDefEdit.GeometryType_2 = (esriGeometryType)GeometryType;

                //geometryDefEdit.SpatialReference_2 = new UnknownCoordinateSystemClass();

                ISpatialReferenceFactory2 pSpaRefFact2 = new SpatialReferenceEnvironmentClass();
                IGeographicCoordinateSystem pGeoCoordSys = pSpaRefFact2.CreateGeographicCoordinateSystem(4326);
                ISpatialReference pSpatialReference = (ISpatialReference)pGeoCoordSys;
                ISpatialReferenceResolution pSpatialReferenceResolution = (ISpatialReferenceResolution)pSpatialReference;
                pSpatialReferenceResolution.ConstructFromHorizon();
                geometryDefEdit.SpatialReference_2 = pSpatialReference;

                oField = null;
                oField = new FieldClass();
                oFieldEdit = oField as IFieldEdit;
                oFieldEdit.Name_2 = "SHAPE";
                oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                oFieldEdit.GeometryDef_2 = geometryDef;
                oFieldEdit.IsNullable_2 = true;
                oFieldEdit.Required_2 = true;
                oFieldsEdit.AddField(oField);
                oFeatureClass = (m_pWorkspace as IFeatureWorkspace).CreateFeatureClass(DataSetName, oFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
                oFeatureLayer = new FeatureLayerClass();
                oFeatureLayer.Name = AliaseName;
                oFeatureLayer.FeatureClass = oFeatureClass;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return null;
            }
            finally {
                try
                {
                    Marshal.ReleaseComObject(oFieldsEdit);
                    Marshal.ReleaseComObject(oFeatureClass);
                }
                catch { }               
                GC.Collect();               
            }
            return oFeatureLayer;
        }

        //删除SDE图层
        public bool DeleteSDELayer(string SDEDSname)
        {
            try
            {
                IEnumDatasetName pEnumDsName = m_pWorkspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
                pEnumDsName.Reset();
                IDatasetName pSDEDSname = pEnumDsName.Next();

                while (pSDEDSname != null)
                {
                    if (pSDEDSname.Name.ToUpper() == SDEDSname.ToUpper())
                    {
                        break;
                    }
                    pSDEDSname = pEnumDsName.Next();
                }

                if (pSDEDSname != null)
                {
                    IFeatureWorkspace pFWS = m_pWorkspace as IFeatureWorkspace;
                    IFeatureWorkspaceManage pFWSM;
                    pFWSM = (IFeatureWorkspaceManage)pFWS;
                    pFWSM.DeleteByName(pSDEDSname);
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }

        #region IDisposable 成员

        public void Dispose()
        {
            if( m_pWorkspace != null )
                Marshal.ReleaseComObject(m_pWorkspace);
        }

        #endregion
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值