基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-AE常用操作代码

来源:互联网 发布:重启网卡 linux 编辑:程序博客网 时间:2024/05/16 07:30
本来打算睡觉了,但是突然看到自己保留的一个单独的C#文件,原来是AE常用操作的代码,这也是自己在做ArcGIS空间数据管理平台的项目时积累下来的,这里贴出来供需要使用的人。
/******************************************************** *  * 本类部分功能接口依附于_workSpaceInstance * 必须首先使用CreateWorkspace或者OpenWorkspaceFromFile * 实例化_workSpaceInstance,才能使用 *********************************************************/using System;using System.Windows.Forms;using System.IO;using System.Data;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.CatalogUI;namespace ControlLibrary{    class RuleDBCreater    {        private static IWorkspace _workSpaceInstance;        public RuleDBCreater()        {            //            // TODO: 在此处添加构造函数逻辑            //        }        public static void setWorkSpaceInstance(IWorkspace ws)        {            _workSpaceInstance = ws;        }        public static IWorkspace getWorkSpaceInstance()        {            return _workSpaceInstance;        }        /// <summary>        /// 创建规则数据库workspace        /// </summary>        /// <param name="workspaceType"></param>        /// <param name="WorkspaceDirectory"></param>        /// <returns>返回workspace实例</returns>        public static IWorkspace CreateWorkspace(string pName, string pPath)        {            IWorkspaceFactory workspaceFactory = null;            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory");            workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);            Directory.CreateDirectory(pPath);            IWorkspaceName workspaceName = workspaceFactory.Create(pPath, pName,null, 0);            IName Name = (IName)workspaceName;            _workSpaceInstance = (IWorkspace)(Name.Open());            return _workSpaceInstance;        }        /// <summary>        /// 从文件创建规则数据库workspace        /// </summary>        /// <param name="WorkspaceDirectory"></param>        /// <returns>返回workspace实例</returns>        public static IWorkspace OpenWorkspaceFromFile(string WorkspaceDirectory)        {            IWorkspaceFactory workspaceFactory = null;            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory");            workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);            _workSpaceInstance = workspaceFactory.OpenFromFile(WorkspaceDirectory, 0);            return _workSpaceInstance;        }        /// <summary>        /// 创建要素数据集        /// </summary>        /// <param name="name"></param>        /// <returns>IFeatureDataset</returns>        public static IFeatureDataset CreateFeatureDataSet(/*string name,ISpatialReference srf*/)        {            IFeatureDatasetDialog fdlg = new FeatureDatasetDefDialog();            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)_workSpaceInstance;            return fdlg.DoModalCreate(featureWorkspace, 0);            //if (_workSpaceInstance == null) return null;            //IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)_workSpaceInstance;            //IFeatureDataset tmp = featureWorkspace.CreateFeatureDataset(name, srf);            //return tmp;        }        /// <summary>        /// 删除要素数据集        /// </summary>        /// <param name="name"></param>        /// <param name="srf"></param>        /// <returns></returns>        public static void DeleteFeatureDataSet(string name)        {            IFeatureDataset fds = GetFeatureDataSet(name);            if (fds != null)                fds.Delete();        }        /// <summary>        /// 获取数据库中IFeatureDataset        /// </summary>        /// <param name="name"></param>        /// <returns></returns>        public static IFeatureDataset GetFeatureDataSet(string name)        {            if (_workSpaceInstance == null) return null;            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)_workSpaceInstance;            IFeatureDataset tmp = featureWorkspace.OpenFeatureDataset(name);            return tmp;        }        /// <summary>        /// 重命名DataSet        /// </summary>        /// <param name="fds"></param>        /// <param name="newname"></param>        public static void RenameFeatureDataSet(IFeatureDataset fds,string newname)        {            if (fds.CanRename())            {                fds.Rename(newname);            }        }        /// <summary>        /// 获取IFeatureDataset空间参照        /// </summary>        /// <param name="ds"></param>        /// <returns></returns>        public static ISpatialReference GetFdsSpatialReference(IFeatureDataset ds)        {            IGeoDataset gds = ds as IGeoDataset;            return gds.SpatialReference;        }        /// <summary>        /// 设置IFeatureDataset空间参照        /// </summary>        /// <param name="ds"></param>        /// <returns></returns>        public static void SetFdsSpatialReference(IFeatureDataset ds)        {            IGeoDataset gds = ds as IGeoDataset;            // Cast the geodataset to the IGeoDatasetSchemaEdit interface and set the Spatial Reference.                IGeoDatasetSchemaEdit geoDatasetSchemaEdit = (IGeoDatasetSchemaEdit)gds;            if (geoDatasetSchemaEdit.CanAlterSpatialReference)            {                geoDatasetSchemaEdit.AlterSpatialReference(EditSpatialReferenceDlg(gds.SpatialReference));            }        }        /// <summary>        /// 创建属性字段        /// </summary>        /// <param name="shapeType"></param>        /// <param name="dgrc"></param>        /// <param name="spr"></param>        /// <returns></returns>        public static IFields CreateFields(string shapeType, DataTable dt, ISpatialReference spr,bool hasM,bool hasZ)        {            IField oField = new FieldClass();            IFieldEdit oFieldEdit = oField as IFieldEdit;            IFields oFields = new FieldsClass();            IFieldsEdit oFieldsEdit = oFields as IFieldsEdit;            IGeometryDef geometryDef = new GeometryDefClass();            IGeometryDefEdit geometryDefEdit = geometryDef as IGeometryDefEdit;            foreach(DataRow dr in dt.Rows)            {                switch (dr[1].ToString())                {                    case "Object ID":                        oFieldEdit.Name_2 = "ObjectID";                        oFieldEdit.AliasName_2 = "FID";                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;                        oFieldsEdit.AddField(oField);                        break;                    case "Multipoint Features":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = "SHAPE";                        oFieldEdit.IsNullable_2 = true;                        oFieldEdit.Required_2 = true;                        geometryDefEdit.AvgNumPoints_2 = 1;                        geometryDefEdit.GridCount_2 = 0;                        geometryDefEdit.HasM_2 = hasM;                        geometryDefEdit.HasZ_2 = hasZ;                        geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryMultipoint;                        geometryDefEdit.SpatialReference_2 = spr;                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;                        oFieldEdit.GeometryDef_2 = (GeometryDef)geometryDefEdit;                        oFieldsEdit.AddField(oField);                        break;                    case "MultiPatch Features":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = "SHAPE";                        oFieldEdit.IsNullable_2 = true;                        oFieldEdit.Required_2 = true;                                               geometryDef = new GeometryDefClass();                        geometryDefEdit = geometryDef as IGeometryDefEdit;                        geometryDefEdit.AvgNumPoints_2 = 1;                        geometryDefEdit.GridCount_2 = 0;                        geometryDefEdit.HasM_2 = hasM;                        geometryDefEdit.HasZ_2 = hasZ;                        geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryMultiPatch;                        geometryDefEdit.SpatialReference_2 = spr;                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;                        oFieldEdit.GeometryDef_2 = (GeometryDef)geometryDefEdit;                        oFieldsEdit.AddField(oField);                        break;                    case "Point Features":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = "SHAPE";                        oFieldEdit.IsNullable_2 = true;                        oFieldEdit.Required_2 = true;                        geometryDef = new GeometryDefClass();                        geometryDefEdit = geometryDef as IGeometryDefEdit;                        geometryDefEdit.AvgNumPoints_2 = 1;                        geometryDefEdit.GridCount_2 = 0;                        geometryDefEdit.HasM_2 = hasM;                        geometryDefEdit.HasZ_2 = hasZ;                        geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;                        geometryDefEdit.SpatialReference_2 = spr;                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;                        oFieldEdit.GeometryDef_2 = (GeometryDef)geometryDefEdit;                        oFieldsEdit.AddField(oField);                        break;                    case "Line Features":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = "SHAPE";                        oFieldEdit.IsNullable_2 = true;                        oFieldEdit.Required_2 = true;                                    geometryDef = new GeometryDefClass();                        geometryDefEdit = geometryDef as IGeometryDefEdit;                        geometryDefEdit.AvgNumPoints_2 = 1;                        geometryDefEdit.GridCount_2 = 0;                        geometryDefEdit.HasM_2 = hasM;                        geometryDefEdit.HasZ_2 = hasZ;                        geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryLine;                        geometryDefEdit.SpatialReference_2 = spr;                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;                        oFieldEdit.GeometryDef_2 = (GeometryDef)geometryDefEdit;                        oFieldsEdit.AddField(oField);                        break;                    case "Polygon Features":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = "SHAPE";                        oFieldEdit.IsNullable_2 = true;                        oFieldEdit.Required_2 = true;                        geometryDef = new GeometryDefClass();                        geometryDefEdit = geometryDef as IGeometryDefEdit;                        geometryDefEdit.AvgNumPoints_2 = 1;                        geometryDefEdit.GridCount_2 = 0;                        geometryDefEdit.HasM_2 = hasM;                        geometryDefEdit.HasZ_2 = hasZ;                        geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;                        geometryDefEdit.SpatialReference_2 = spr;                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;                        oFieldEdit.GeometryDef_2 = (GeometryDef)geometryDefEdit;                        oFieldsEdit.AddField(oField);                        break;                    case "Short Int":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = dr[0].ToString();                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;                        oFieldEdit.IsNullable_2 = true;                        oFieldsEdit.AddField(oField);                        break;                    case "Long Int":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = dr[0].ToString();                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;                        oFieldsEdit.AddField(oField);                        break;                    case "Float":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = dr[0].ToString();                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeSingle;                        oFieldsEdit.AddField(oField);                        break;                    case "Double":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = dr[0].ToString();                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;                        oFieldsEdit.AddField(oField);                        break;                    case "Text":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = dr[0].ToString();                        oFieldEdit.Length_2 = 30; // Only string fields require that you set the length.                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;                        oFieldsEdit.AddField(oField);                        break;                    case "Date":                        oField = new FieldClass();                        oFieldEdit = oField as IFieldEdit;                        oFieldEdit.Name_2 = dr[0].ToString();                        oFieldEdit.Type_2 = esriFieldType.esriFieldTypeDate;                        oFieldsEdit.AddField(oField);                        break;                    //case "Guid":                    //    IField fld12 = new FieldClass();                    //    IFieldEdit fldedt12 = (IFieldEdit)fld12;                    //    fldedt12.Name_2 = dr[0].ToString();                    //    fldedt12.Type_2 = esriFieldType.esriFieldTypeGUID;                    //    fieldsEdit.set_Field(i, fld12);                    //    break;                    //case "Geomery":                    //    IField fld13 = new FieldClass();                    //    IFieldEdit fldedt13 = (IFieldEdit)fld13;                    //    fldedt13.Name_2 = dr[0].ToString();                    //    fldedt13.IsNullable_2 = true;                    //    fldedt13.Required_2 = true;                    //    IGeometryDef geometryDef13 = new GeometryDefClass();                    //    IGeometryDefEdit geometryDefEdit13 = (IGeometryDefEdit)geometryDef13;                    //    geometryDef13 = new GeometryDefClass();                    //    geometryDefEdit13 = (IGeometryDefEdit)geometryDef13;                    //    geometryDefEdit13.AvgNumPoints_2 = 1;                    //    geometryDefEdit13.GridCount_2 = 0;                    //    geometryDefEdit13.HasM_2 = hasM;                    //    geometryDefEdit13.HasZ_2 = hasZ;                    //    fldedt13.Type_2 = esriFieldType.esriFieldTypeGeometry;                    //    geometryDefEdit13.GeometryType_2 = esriGeometryType.esriGeometryAny;                    //    //Generate a default Spatial Reference                    //    geometryDefEdit13.SpatialReference_2 = spr;                    //    fldedt13.GeometryDef_2 = (GeometryDef)geometryDefEdit13;                    //    fldedt13.Type_2 = esriFieldType.esriFieldTypeGeometry;                    //    fieldsEdit.set_Field(i, fld13);                    //    break;                    //case "Raster":                    //    IField fld14 = new FieldClass();                    //    IFieldEdit fldedt14 = (IFieldEdit)fld14;                    //    fldedt14.Name_2 = dr[0].ToString();                    //    fldedt14.Type_2 = esriFieldType.esriFieldTypeRaster;                    //    fieldsEdit.set_Field(i, fld14);                    //    break;                }            }            return oFields;        }             /// <summary>        /// 创建要素类        /// </summary>        /// <param name="workspace"></param>        /// <param name="featureDataset"></param>        /// <param name="featureClassName"></param>        /// <param name="fields"></param>        /// <param name="CLSID"></param>        /// <param name="CLSEXT"></param>        /// <param name="strConfigKeyword"></param>        /// <returns></returns>        public static IFeatureClass CreateFeatureClass(IFeatureDataset featureDataset, String featureClassName, IFields fields)        {            if (_workSpaceInstance == null) return null;            IFeatureClass featureClass = null;            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)_workSpaceInstance;             // assign the class id value if not assigned            ESRI.ArcGIS.esriSystem.UID CLSID = null;            ESRI.ArcGIS.esriSystem.UID CLSEXT = null;            string strConfigKeyword = "";            if (CLSID == null)            {                CLSID = new ESRI.ArcGIS.esriSystem.UIDClass();                CLSID.Value = "esriGeoDatabase.Feature";            }            System.String strShapeField = "";            // locate the shape field            for (Int32 j = 0; j < fields.FieldCount; j++)            {                esriFieldType dd = fields.get_Field(j).Type;                if (dd == esriFieldType.esriFieldTypeGeometry)                {                    strShapeField = fields.get_Field(j).Name;                }            }            // finally create and return the feature class            if (featureDataset != null)            {                featureClass = featureDataset.CreateFeatureClass(featureClassName, fields, CLSID, CLSEXT, esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword);            }                        return featureClass;        }        /// <summary>        /// 获取FeatureClass从IFeatureDataset        /// </summary>        /// <param name="featDs"></param>        /// <param name="className"></param>        /// <returns></returns>        public static IFeatureClass GetFeatureClassFromFeatureDataset(IFeatureDataset featDs, string className)        {            IFeatureClass featClass;            IFeatureClassContainer fcContainer = featDs as IFeatureClassContainer;            for (int i = 0; i < fcContainer.ClassCount; i++)            {                featClass = fcContainer.get_Class(i);                if (RuleDBCreater.GetFeatureClassName(featClass) == className)                {                    return featClass;                }            }            return null;        }        /// <summary>        /// 重命名FeatureClass        /// </summary>        /// <param name="fds"></param>        /// <param name="newname"></param>        public static void RenameFeatureClass(IFeatureClass fc,string newname)        {            IDataset ds = fc as IDataset;            if (ds.CanRename())            {                ds.Rename(newname);            }        }        /// <summary>        /// 从数据集删除要素类        /// </summary>        /// <param name="featureDataset"></param>        /// <param name="featureClassName"></param>        /// <param name="fields"></param>        /// <returns></returns>        public static void DeleteFeatureClass(IFeatureDataset featureDataset, String featureClassName)        {            IFeatureClass fc = GetFeatureClassFromFeatureDataset(featureDataset, featureClassName);            if (fc != null)            {                IDataset ds = fc as IDataset;                if (ds.CanDelete())                {                    ds.Delete();                }            }        }        /// <summary>        /// 编辑空间参照        /// </summary>        /// <param name="inputSpr"></param>        /// <returns></returns>        public static ISpatialReference EditSpatialReferenceDlg(ISpatialReference inputSpr)        {            ESRI.ArcGIS.CatalogUI.ISpatialReferenceDialog2 spatialReferenceDialog2 = new ESRI.ArcGIS.CatalogUI.SpatialReferenceDialogClass();            ISpatialReference spf = spatialReferenceDialog2.DoModalEdit(inputSpr, false, false, false, false, false, false, false, 0);            return spf;        }        /// <summary>        /// 创建空间参照        /// </summary>        /// <param name="coordinateSystem"></param>        /// <returns></returns>        public static ISpatialReference CreateSpatialReferenceDlg()//        {            ESRI.ArcGIS.CatalogUI.ISpatialReferenceDialog2 spatialReferenceDialog2 = new ESRI.ArcGIS.CatalogUI.SpatialReferenceDialogClass();            ISpatialReference spatialReference = spatialReferenceDialog2.DoModalCreate(true, false, false, 0);            //ISpatialReferenceTolerance spatialReferenceTolerance = spatialReference as ISpatialReferenceTolerance;            return spatialReference;        }        public static ISpatialReference SetXYZMTolerance(ISpatialReference srf,double xytolerance,double ztolerance,double mtolerance)        {            ISpatialReferenceTolerance spatialReferenceTolerance = srf as ISpatialReferenceTolerance;            //spatialReferenceTolerance.XYTolerance = xytolerance;            //spatialReferenceTolerance.ZTolerance = ztolerance;            //spatialReferenceTolerance.MTolerance = mtolerance;            return srf;        }        public static void GetXYZMTolerance(ISpatialReference srf,out double xytolerance,out double ztolerance,out double mtolerance)        {            ISpatialReferenceTolerance spatialReferenceTolerance = srf as ISpatialReferenceTolerance;            xytolerance = spatialReferenceTolerance.XYTolerance;            ztolerance = spatialReferenceTolerance.ZTolerance;            mtolerance = spatialReferenceTolerance.MTolerance;        }        /// <summary>        /// 获取工作区内所有数据集名称        /// </summary>        /// <param name="ws"></param>        /// <returns></returns>        public static IEnumDatasetName GetFeatureDataSetNames(IWorkspace ws)        {            return ws.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);        }        public static bool IsArcDbFile(string path)        {            IWorkspaceFactory workspaceFactory = null;            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory");            workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);            return workspaceFactory.IsWorkspace(path);        }        public static string GetFeatureClassName(IFeatureClass fc)        {            IDataset ds = fc as IDataset;            return ds.Name;        }        public static IEnumFeatureClass GetFeatureClasses(IFeatureDataset fds)        {            IFeatureClassContainer pFeatureclassContainer = (IFeatureClassContainer)fds;            return (IEnumFeatureClass)pFeatureclassContainer.Classes;        }        public static bool IsFeatureDataSetExist(string name)        {            //if (_workSpaceInstance == null) return true;            IEnumDatasetName iEdn = GetFeatureDataSetNames(_workSpaceInstance);            iEdn.Reset();            IDatasetName iDsn = iEdn.Next();            while (iDsn is IFeatureDatasetName)            {                if (iDsn.Name == name)                       return true;                iDsn = iEdn.Next();            }            return false;        }        public static bool IsFeatureClassExist(string dsname, string fcname)        {            IEnumFeatureClass iEfc = GetFeatureClasses(GetFeatureDataSet(dsname));            iEfc.Reset();            IFeatureClass fcn = iEfc.Next();            while (fcn is IFeatureClass)            {                if (fcname == fcn.AliasName)                    return true;                fcn = iEfc.Next();            }            return false;        }        /// <summary>        /// 设置VerticalCoordinateSystem        /// </summary>        public static ISpatialReference3 SetVerticalCoordinateSystem(ISpatialReference3 spatialReference3)        {            ISpatialReferenceFactory3 spatialReferenceFactory3 = new SpatialReferenceEnvironmentClass();            IVerticalCoordinateSystem verticalCoordinateSystem = spatialReferenceFactory3.CreateVerticalCoordinateSystem((int)esriSRVerticalCSType.esriSRVertCS_NAVD1988);            spatialReference3.VerticalCoordinateSystem = verticalCoordinateSystem;            return spatialReference3;        }    }}//public static bool IsNameValid(string str)//{//    System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z]\w{0,17}{1}quot;);//    if (reg.IsMatch(s))//    {//        return true;//    }//    else//    {//        return false;//    }//}


 

原创粉丝点击