示例#1
0
        /// <summary>
        /// 创建FileGDB和PGDB Workspace
        /// @remark
        /// 1.Shp创建Workspace没有意义
        /// 2.不支持SDE创建
        /// </summary>
        /// <param name="wsType"></param>
        /// <param name="strPath"></param>
        /// <param name="strName"></param>
        /// <returns></returns>
        public static IWorkspace CreateWorkspace(enumWorkspaceType wsType, string strPath, string strName)
        {
            try
            {
                IWorkspaceFactory wsf = null;
                switch (wsType)
                {
                case enumWorkspaceType.SDE:
                    throw new Exception("CreateWorkspace方法被设计为不支持SDE方式创建");

                case enumWorkspaceType.FileGDB:
                    wsf = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass();
                    break;

                case enumWorkspaceType.PGDB:
                    wsf = new AccessWorkspaceFactoryClass();
                    break;

                case enumWorkspaceType.File:
                    wsf = new ShapefileWorkspaceFactoryClass();
                    break;
                }
                IWorkspaceName wsName = wsf.Create(strPath, strName, null, 0);
                return((wsName as IName).Open() as IWorkspace);
            }
            catch
            {
                return(null);
            }
        }
        /// <summary>
        /// 创建工作空间工厂
        /// </summary>
        /// <returns></returns>
        private static IWorkspaceFactory CreateWksFactory(enumWorkspaceType fileWksType)
        {
            IWorkspaceFactory wksFactory = null;

            switch (fileWksType)
            {
            case enumWorkspaceType.Shapefile:
                wksFactory = new ShapefileWorkspaceFactoryClass();
                break;

            case enumWorkspaceType.Gdb:
                wksFactory = new FileGDBWorkspaceFactoryClass();
                break;

            case enumWorkspaceType.Mdb:
                wksFactory = new AccessWorkspaceFactoryClass();
                break;

            case enumWorkspaceType.Cad:
                wksFactory = new CadWorkspaceFactoryClass();
                break;

            case enumWorkspaceType.RasterFile:
                wksFactory = new RasterWorkspaceFactoryClass();
                break;

            default:
                break;
            }
            return(wksFactory);
        }
示例#3
0
 public WorkspaceCatalogItem(object objWorksapceConnction, enumWorkspaceType wsType, ICatalogItem parent,string strName)
     : base(null,parent)
 {
     this.m_WorkapcePropertySet = objWorksapceConnction;
     this.m_WorkspaceType = wsType;
     this.m_Caption = strName;
 }
示例#4
0
        /// <summary>
        /// 创建FileGDB和PGDB Workspace
        /// @remark 
        /// 1.Shp创建Workspace没有意义
        /// 2.不支持SDE创建
        /// </summary>
        /// <param name="wsType"></param>
        /// <param name="strPath"></param>
        /// <param name="strName"></param>
        /// <returns></returns>
        public static IWorkspace CreateWorkspace(enumWorkspaceType wsType, string strPath, string strName)
        {
            try
            {
                IWorkspaceFactory wsf = null;
                switch (wsType)
                {
                    case enumWorkspaceType.SDE:
                        throw new Exception("CreateWorkspace方法被设计为不支持SDE方式创建");

                    case enumWorkspaceType.FileGDB:
                        wsf = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass();
                        break;

                    case enumWorkspaceType.PGDB:
                        wsf = new AccessWorkspaceFactoryClass();
                        break;

                    case enumWorkspaceType.File:
                        wsf = new ShapefileWorkspaceFactoryClass();
                        break;

                }
                IWorkspaceName wsName = wsf.Create(strPath, strName, null, 0);
                return (wsName as IName).Open() as IWorkspace;
            }
            catch
            {
                return null;
            }
        }
        public static bool Exists(string path, enumWorkspaceType fileWksType = enumWorkspaceType.AutoDetect)
        {
            switch (fileWksType)
            {
            case enumWorkspaceType.AutoDetect:
            case enumWorkspaceType.RasterFile:
                if (Directory.Exists(path) || File.Exists(path))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }

            case enumWorkspaceType.Cad:
            case enumWorkspaceType.Shapefile:
            case enumWorkspaceType.Mdb:
                return(File.Exists(path));

            case enumWorkspaceType.Gdb:
                return(Directory.Exists(path));

            default:
                break;
            }
            return(false);
        }
示例#6
0
        /// <summary>
        /// 打开Workspace
        /// </summary>
        /// <param name="wsType"></param>
        /// <param name="objWorkspace">当为SDE时使用IPropertySet,其余情况使用路径(string)</param>
        /// <returns></returns>
        public static IWorkspace OpenWorkspace(enumWorkspaceType wsType, object objWorkspace)
        {
            IWorkspaceFactory wsf = null;

            try
            {
                switch (wsType)
                {
                case enumWorkspaceType.FileGDB:
                    wsf = new FileGDBWorkspaceFactoryClass();

                    return(wsf.OpenFromFile(objWorkspace as string, 0));

                case enumWorkspaceType.PGDB:
                    wsf = new AccessWorkspaceFactoryClass();
                    return(wsf.OpenFromFile(objWorkspace as string, 0));

                case enumWorkspaceType.File:
                    wsf = new ShapefileWorkspaceFactoryClass();
                    return(wsf.OpenFromFile(objWorkspace as string, 0));

                case enumWorkspaceType.SDE:
                    wsf = new SdeWorkspaceFactoryClass();
                    IPropertySet pSet = objWorkspace as IPropertySet;
                    if (pSet == null)
                    {
                        string strArgs = objWorkspace as string;
                        pSet = new PropertySetClass();
                        string[] argList = strArgs.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string strArg in argList)
                        {
                            string[] argPair = strArg.Split(new char[] { '=' });
                            pSet.SetProperty(argPair[0], argPair[1]);
                        }
                    }

                    return(wsf.Open(pSet, 0));
                }
            }
            catch
            {
                return(null);
            }
            finally
            {
                if (wsf != null)
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(wsf);
                }
            }

            return(null);
        }
        public static IWorkspace OpenFromFile(string path, enumWorkspaceType fileWksType = enumWorkspaceType.AutoDetect, bool isRelative = false)
        {
            if (isRelative)
            {
                path += Application.StartupPath + "\\";
            }
            //不存在的路径
            if (!Exists(path, fileWksType))
            {
                return(null);
            }
            //识别类型
            if (fileWksType == enumWorkspaceType.AutoDetect)
            {
                fileWksType = AutoDetectFile(path);
            }
            var wksFactory = CreateWksFactory(fileWksType);

            //无法识别的类型
            if (wksFactory == null)
            {
                return(null);
            }
            IWorkspace workspace = null;

            try
            {
                if (fileWksType == enumWorkspaceType.Cad ||
                    fileWksType == enumWorkspaceType.Shapefile ||
                    fileWksType == enumWorkspaceType.RasterFile)
                {
                    //todo是否已经被其他用户打开
                    workspace = wksFactory.OpenFromFile(Path.GetDirectoryName(path), 0);
                }
                else
                {
                    workspace = wksFactory.OpenFromFile(path, 0);
                }
                return(workspace);
            }
            catch (System.Exception ex)
            {
                if (ex.Message.Contains("0x80040228"))
                {
                    //"ArcEngine没有进行初始化Lincense";
                }
                else
                {
                }
            }
            return(workspace);
        }
示例#8
0
        /// <summary>
        /// 打开Workspace
        /// </summary>
        /// <param name="wsType"></param>
        /// <param name="objWorkspace">当为SDE时使用IPropertySet,其余情况使用路径(string)</param>
        /// <returns></returns>
        public static IWorkspace OpenWorkspace(enumWorkspaceType wsType, object objWorkspace)
        {
            IWorkspaceFactory wsf = null;
            try
            {
                switch (wsType)
                {
                    case enumWorkspaceType.FileGDB:
                        wsf = new FileGDBWorkspaceFactoryClass();

                        return wsf.OpenFromFile(objWorkspace as string, 0);

                    case enumWorkspaceType.PGDB:
                        wsf = new AccessWorkspaceFactoryClass();
                        return wsf.OpenFromFile(objWorkspace as string, 0);

                    case enumWorkspaceType.File:
                        wsf = new ShapefileWorkspaceFactoryClass();
                        return wsf.OpenFromFile(objWorkspace as string, 0);

                    case enumWorkspaceType.SDE:
                        wsf = new SdeWorkspaceFactoryClass();
                        IPropertySet pSet = objWorkspace as IPropertySet;
                        if (pSet == null)
                        {
                            string strArgs = objWorkspace as string;
                            pSet = new PropertySetClass();
                            string[] argList = strArgs.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                            foreach (string strArg in argList)
                            {
                                string[] argPair = strArg.Split(new char[] { '=' });
                                pSet.SetProperty(argPair[0], argPair[1]);
                            }
                        }

                        return wsf.Open(pSet, 0);
                }
            }
            catch
            {
                return null;
            }
            finally
            {
                if (wsf != null)
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(wsf);
            }

            return null;
        }
示例#9
0
        private void cmbWorkspaceType_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtWorkspace.Text       = "";
            m_Workspace             = null;
            m_SelectedWorkspaceType = (enumWorkspaceType)cmbWorkspaceType.SelectedIndex;

            if (m_SelectedWorkspaceType == enumWorkspaceType.File)
            {
                cmbDataset.Enabled = false;
            }
            else
            {
                cmbDataset.Enabled = true;
            }
        }
示例#10
0
        //public WorkspaceCatalogItem(IDataset dsWorkspace,ICatalogItem parent):base(dsWorkspace,parent)
        //{
        //    if (!(dsWorkspace is IWorkspace))
        //        throw new Exception("内部错误:WorksapceCatalogItem 的构造参数必须为Workspace");

        //    this.m_Dataset = dsWorkspace;
        //    m_Caption = this.m_Dataset.BrowseName ?? this.m_Dataset.Name;
        //    IWorkspace wsSource=(dsWorkspace as IWorkspace);
        //    m_WorkapcePropertySet = wsSource.ConnectionProperties;
        //    m_WorkspaceType = (wsSource.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace ? enumWorkspaceType.SDE :
        //        (wsSource.Type == esriWorkspaceType.esriFileSystemWorkspace ? enumWorkspaceType.File : enumWorkspaceType.Unknown));
        //}

        public WorkspaceCatalogItem(IDatasetName dsName, ICatalogItem parent)
            : base(dsName, parent)
        {
            if (!(dsName is IWorkspaceName))
            {
                throw new Exception("内部错误:WorksapceCatalogItem 的构造参数必须为WorkspaceName");
            }

            //this.m_Dataset = (dsName as IName).Open() as IDataset;
            this.m_DatasetName = dsName;
            m_Caption          = this.m_DatasetName.WorkspaceName.BrowseName ?? this.m_DatasetName.Name;
            IWorkspaceName wsSource = this.m_DatasetName.WorkspaceName;

            m_WorkapcePropertySet = wsSource.ConnectionProperties;
            //m_WorkspaceType = (wsSource.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace ? enumWorkspaceType.SDE :
            //    (wsSource.Type == esriWorkspaceType.esriFileSystemWorkspace ? enumWorkspaceType.File : enumWorkspaceType.Unknown));
            if (wsSource.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace)
            {
                m_WorkspaceType = enumWorkspaceType.SDE;
            }
            else if (wsSource.Type == esriWorkspaceType.esriFileSystemWorkspace)
            {
                m_WorkspaceType = enumWorkspaceType.File;
            }
            else
            {
                string strPath = wsSource.PathName;
                string strType = System.IO.Path.GetExtension(strPath);
                if (string.IsNullOrEmpty(strType))
                {
                    m_WorkspaceType = enumWorkspaceType.Unknown;
                }

                strType = strType.ToUpper();
                if (strType == "MDB")
                {
                    m_WorkspaceType = enumWorkspaceType.PGDB;
                }
                else if (strType == "GDB")
                {
                    m_WorkspaceType = enumWorkspaceType.FileGDB;
                }
                else
                {
                    m_WorkspaceType = enumWorkspaceType.Unknown;
                }
            }
        }
示例#11
0
        public static string GetTELayerString(object objWorkspacePropertySet, enumWorkspaceType wsType, string strName)
        {
            if (objWorkspacePropertySet == null || string.IsNullOrWhiteSpace(strName))
            {
                return(null);
            }

            if (wsType == enumWorkspaceType.SDE)
            {
                IPropertySet propertySet = objWorkspacePropertySet as IPropertySet;
                if (propertySet == null)
                {
                    return(null);
                }

                object[] objParameters =
                {
                    propertySet.GetProperty("SERVER"),
                    propertySet.GetProperty("USER"),
                    propertySet.GetProperty("PASSWORD"),
                    strName,
                    propertySet.GetProperty("INSTANCE")
                };

                return(string.Format("Server={0};User={1};Password={2};LayerName={3};Instance={4};TEPlugName=arcsde;", objParameters));
            }
            else if (wsType == enumWorkspaceType.File)
            {
                return(string.Format("{0}\\{1}{2}", objWorkspacePropertySet, strName, strName.ToLower().Contains(".shp")?null:".shp"));
            }
            else if (wsType == enumWorkspaceType.PGDB)
            {
                return(string.Format("FileName={0};LayerName={1}", objWorkspacePropertySet, strName));
            }

            return(null);
        }
示例#12
0
        //public WorkspaceCatalogItem(IDataset dsWorkspace,ICatalogItem parent):base(dsWorkspace,parent)
        //{
        //    if (!(dsWorkspace is IWorkspace))
        //        throw new Exception("内部错误:WorksapceCatalogItem 的构造参数必须为Workspace");
        //    this.m_Dataset = dsWorkspace;
        //    m_Caption = this.m_Dataset.BrowseName ?? this.m_Dataset.Name;
        //    IWorkspace wsSource=(dsWorkspace as IWorkspace);
        //    m_WorkapcePropertySet = wsSource.ConnectionProperties;
        //    m_WorkspaceType = (wsSource.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace ? enumWorkspaceType.SDE :
        //        (wsSource.Type == esriWorkspaceType.esriFileSystemWorkspace ? enumWorkspaceType.File : enumWorkspaceType.Unknown));
        //}
        public WorkspaceCatalogItem(IDatasetName dsName, ICatalogItem parent)
            : base(dsName, parent)
        {
            if (!(dsName is IWorkspaceName))
                throw new Exception("内部错误:WorksapceCatalogItem 的构造参数必须为WorkspaceName");

            //this.m_Dataset = (dsName as IName).Open() as IDataset;
            this.m_DatasetName = dsName;
            m_Caption = this.m_DatasetName.WorkspaceName.BrowseName ?? this.m_DatasetName.Name;
            IWorkspaceName wsSource = this.m_DatasetName.WorkspaceName;
            m_WorkapcePropertySet = wsSource.ConnectionProperties;
            //m_WorkspaceType = (wsSource.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace ? enumWorkspaceType.SDE :
            //    (wsSource.Type == esriWorkspaceType.esriFileSystemWorkspace ? enumWorkspaceType.File : enumWorkspaceType.Unknown));
            if (wsSource.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace)
            {
                m_WorkspaceType = enumWorkspaceType.SDE;
            }
            else if (wsSource.Type == esriWorkspaceType.esriFileSystemWorkspace)
            {
                m_WorkspaceType = enumWorkspaceType.File;
            }
            else
            {
                string strPath = wsSource.PathName;
                string strType = System.IO.Path.GetExtension(strPath);
                if (string.IsNullOrEmpty(strType))
                    m_WorkspaceType = enumWorkspaceType.Unknown;

                strType = strType.ToUpper();
                if (strType == "MDB")
                    m_WorkspaceType = enumWorkspaceType.PGDB;
                else if (strType == "GDB")
                    m_WorkspaceType = enumWorkspaceType.FileGDB;
                else
                    m_WorkspaceType = enumWorkspaceType.Unknown;
            }
        }
示例#13
0
        private void cmbWorkspaceType_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtWorkspace.Text       = "";
            m_Workspace             = null;
            m_SelectedWorkspaceType = (enumWorkspaceType)cmbWorkspaceType.SelectedIndex;

            if (m_SelectedWorkspaceType == enumWorkspaceType.File)
            {
                cmbDataset.Enabled = false;
                if (this.m_PathType == enumPathType.Raster)
                {
                    txtFeatureClassName.Width = cmbDataset.Width - (lblFormat.Width + cmbFormat.Width + 15);
                }
                else
                {
                    txtFeatureClassName.Width = cmbDataset.Width;
                }
            }
            else
            {
                txtFeatureClassName.Width = cmbDataset.Width;
                cmbDataset.Enabled        = true;
            }
        }
示例#14
0
 public WorkspaceCatalogItem(object objWorksapceConnction, enumWorkspaceType wsType, ICatalogItem parent, string strName) : base(null, parent)
 {
     this.m_WorkapcePropertySet = objWorksapceConnction;
     this.m_WorkspaceType       = wsType;
     this.m_Caption             = strName;
 }
示例#15
0
        public static string GetTELayerString(object objWorkspacePropertySet, enumWorkspaceType wsType, string strName)
        {
            if (objWorkspacePropertySet==null|| string.IsNullOrWhiteSpace(strName))
                return null;

            if (wsType == enumWorkspaceType.SDE)
            {
                IPropertySet propertySet = objWorkspacePropertySet as IPropertySet;
                if (propertySet == null)
                    return null;

                object[] objParameters =
                    {
                        propertySet.GetProperty("SERVER"),
                        propertySet.GetProperty("USER"),
                        propertySet.GetProperty("PASSWORD"),
                        strName,
                        propertySet.GetProperty("INSTANCE")
                    };

                return string.Format("Server={0};User={1};Password={2};LayerName={3};Instance={4};TEPlugName=arcsde;", objParameters);

            }
            else if(wsType==enumWorkspaceType.File)
            {
                return string.Format("{0}\\{1}{2}",objWorkspacePropertySet,strName,strName.ToLower().Contains(".shp")?null:".shp");
            }
            else if(wsType==enumWorkspaceType.PGDB)
            {
                return string.Format("FileName={0};LayerName={1}", objWorkspacePropertySet, strName);
            }

            return null;
        }
示例#16
0
        private void cmbWorkspaceType_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtWorkspace.Text = "";
            m_Workspace = null;
            m_SelectedWorkspaceType = (enumWorkspaceType)cmbWorkspaceType.SelectedIndex;

            if (m_SelectedWorkspaceType == enumWorkspaceType.File)
            {
                cmbDataset.Enabled = false;
                cmbClass.Enabled = false;
            }
            else
            {
                cmbDataset.Enabled = true;
                cmbClass.Enabled = true;
            }
        }
示例#17
0
        private void cmbWorkspaceType_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtWorkspace.Text = "";
            m_Workspace = null;
            m_SelectedWorkspaceType = (enumWorkspaceType)cmbWorkspaceType.SelectedIndex;

            if (m_SelectedWorkspaceType == enumWorkspaceType.File)
            {
                cmbDataset.Enabled = false;
                if (this.m_PathType == enumPathType.Raster)
                {
                    txtFeatureClassName.Width = cmbDataset.Width - (lblFormat.Width + cmbFormat.Width + 15);
                }
                else
                {
                    txtFeatureClassName.Width = cmbDataset.Width;
                }
            }
            else
            {
                txtFeatureClassName.Width = cmbDataset.Width;
                cmbDataset.Enabled = true;

            }
        }