ArcEngine创建SDE的workspace,包括FeatureWorkSpace和RasterWorSpaceEx

说明:

 

在这里提醒大家注意,读取处理SDE上的栅格数据的时候一定要注意,其workspace是扩展的工作空间,即:RasterWorSpaceEx。

 

不能使用RasterWorSpace,转换的时候会失败。

 

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.esriSystem;

namespace RadioAnalysisGIS.DataToSDE
{
    /// <summary>
    /// 连接类型
    /// </summary>
    public enum ConnectWorkSpaceType
    {
      FeatureClassWorkSpace=0,
      RasterWorkSpace=1
    };

    public abstract class ConnectWorkSpaceDef
    {
        protected ConnectWorkSpaceType CurrentWorkSpaceType = ConnectWorkSpaceType.FeatureClassWorkSpace;
        public ConnectWorkSpaceDef() { }
        public ConnectWorkSpaceType GetWorkSpaceType()
        {
            return CurrentWorkSpaceType;
        }
    }

    public class SDEConnectPara   //SDE的连接参数
    {
        public string Server;
        public string Instance;
        public string User;
        public string Password;
        public string Database;
        public string Version;
        public SDEConnectPara()
        {
            Version = "SDE.DEFAULT";
        }
    }

    #region 定义连接参数
    public class ConnectFeatureWorkSpaceDef : ConnectWorkSpaceDef
    {
        public readonly SDEConnectPara ConnectPara;
        public ConnectFeatureWorkSpaceDef(SDEConnectPara Connparas)
        {
            CurrentWorkSpaceType = ConnectWorkSpaceType.FeatureClassWorkSpace;
            ConnectPara = Connparas;
        }
    }
    public class ConnectRasterWorkSpaceDef : ConnectWorkSpaceDef
    {
        public readonly SDEConnectPara ConnectPara;
        public ConnectRasterWorkSpaceDef(SDEConnectPara Connparas)
        {
            CurrentWorkSpaceType = ConnectWorkSpaceType.RasterWorkSpace;
            ConnectPara = Connparas;
        }
    }
    #endregion

    #region 获取工作空间
    /// <summary>
    /// 连接到SDE feature数据工作空间
    /// </summary>
    public class ConnectFeatureWorkSpaceGet
    {
        private ConnectFeatureWorkSpaceDef pDef;
        public ConnectFeatureWorkSpaceGet(ConnectFeatureWorkSpaceDef ConnDef)
        {
            pDef = ConnDef;
        }
        public IFeatureWorkspace GetSDEWorkspace()
        //依据pDef得到SDE的工作空间
        {
            IWorkspaceFactory pWorkspaceFactory = new SdeWorkspaceFactoryClass();
            IFeatureWorkspace pWorkspace;
            SDEConnectPara para = pDef.ConnectPara;
            IPropertySet pPropSet = new PropertySetClass();
            pPropSet.SetProperty("SERVER", para.Server);
            pPropSet.SetProperty("INSTANCE", para.Instance);
            pPropSet.SetProperty("USER", para.User);
            pPropSet.SetProperty("PASSWORD", para.Password);
            pPropSet.SetProperty("VERSION", para.Version);//可选,缺省为SDE.DEFAULT版本
            pPropSet.SetProperty("Database", para.Database);
            try
            {
                pWorkspace = pWorkspaceFactory.Open(pPropSet, 0) as IFeatureWorkspace;
            }
            catch (Exception ex)
            {
                return null;
            }
            return pWorkspace;
        }
    }
    /// <summary>
    /// 连接到SDE栅格数据工作空间
    /// </summary>
    public class ConnectRasterWorkSpaceGet
    {
        private ConnectRasterWorkSpaceDef pDef;
        public ConnectRasterWorkSpaceGet(ConnectRasterWorkSpaceDef ConnDef)
        {
            pDef = ConnDef;
        }
        public IRasterWorkspaceEx GetSDEWorkspace()
        //依据pDef得到SDE的工作空间
        {
            IWorkspaceFactory pWorkspaceFactory = new SdeWorkspaceFactoryClass();
            IRasterWorkspaceEx pWorkspace;
            SDEConnectPara para = pDef.ConnectPara;
            IPropertySet pPropSet = new PropertySetClass();
            pPropSet.SetProperty("SERVER", para.Server);
            pPropSet.SetProperty("INSTANCE", para.Instance);
            pPropSet.SetProperty("USER", para.User);
            pPropSet.SetProperty("PASSWORD", para.Password);
            pPropSet.SetProperty("VERSION", para.Version);//可选,缺省为SDE.DEFAULT版本
            pPropSet.SetProperty("Database", para.Database);
            try
            {
                pWorkspace = pWorkspaceFactory.Open(pPropSet, 0) as IRasterWorkspaceEx;
            }
            catch (Exception ex)
            {
                return null;
            }
            return pWorkspace;
        }
    }
    #endregion

    #region 连接参数设置
    public class SDEConnectParas
    {
        #region SDE连接参数
        string Server = "gisserver";
        string Instance = "5152/tcp";
        string User = "sde";
        string Pass = "sde";
        string Database = "sde";
        string Version = "SDE.DEFAULT";
        #endregion
        public void GetSDEParameters(out string server, out string instance, out string user, out string password, out string database, out string version)
        {
            server = Server;
            instance = Instance;
            user = User;
            password = Pass;
            database = Database;
            version = Version;
        }//得到SDE连接参数
        public bool ReadFromFile()
        //从连接参数txt文件读取属性库和SDE的连接关键参数,以及站点关键表和关键SDE要素
        {
            string lpszPathName = FilePath.GetApplicationDir();
            lpszPathName = lpszPathName + "//sdeconn.txt";
            StreamReader reader = null;
            try
            {
                reader = new StreamReader(lpszPathName);
                string line = reader.ReadLine();
                line = reader.ReadLine();
                string[] SubStrings = line.Split(':');
                Server = SubStrings[1];
                line = reader.ReadLine();
                SubStrings = line.Split(':');
                Instance = SubStrings[1];
                line = reader.ReadLine();
                SubStrings = line.Split(':');
                User = SubStrings[1];
                line = reader.ReadLine();
                SubStrings = line.Split(':');
                Pass = SubStrings[1];
                line = reader.ReadLine();
                SubStrings = line.Split(':');
                Database = SubStrings[1];
                line = reader.ReadLine();
                SubStrings = line.Split(':');
                Version = SubStrings[1];
            }
            catch (IOException e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
            catch
            {
                return false;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
            return true;
        }
        public void WhiteToLogFile()
        //写入连接参数txt文件-----属性库和SDE的连接关键参数,以及站点关键表和关键SDE要素
        {
            string lpszPathName = FilePath.GetCurrentDir();
            lpszPathName = lpszPathName + "//sdeconn.txt";
            StreamWriter writer = File.CreateText(lpszPathName);
            writer.Write("SDE配置参数");
            writer.Write(writer.NewLine);
            writer.Write("1、服务器:" + Server);
            writer.Write(writer.NewLine);
            writer.Write("2、SDE端口:" + Instance);
            writer.Write(writer.NewLine);
            writer.Write("3、用户:" + User);
            writer.Write(writer.NewLine);
            writer.Write("4、密码:" + Pass);
            writer.Write(writer.NewLine);
            writer.Write("5、数据库:" + Database);
            writer.Write(writer.NewLine);
            writer.Write("6、版本:" + Version);
            writer.Write(writer.NewLine);
            writer.Write(@"///");
            writer.Write(writer.NewLine);
            writer.Close();
        }
    }
        #endregion
}

 

以上代码在SDE for Sql2005上测试通过。AE为9.3。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值