/// <summary>
 /// 在地理数据库中创建要素类
 /// </summary>
 /// <param name="workspacePath">工作空间路径</param>
 /// <param name="feaclassName">所创建要素类名称</param>
 /// <param name="GeometeyType">枚举要素类类型: esriGeimetryType(</param>
 /// <param name="gcsType">地理空间坐标系类型,格式如: (int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980</param>
 /// <returns></returns>
 public IFeatureClass CreateFeatureClass(string workspacePath, string feaclassName, esriGeometryType GeometeyType, int gcsType)
 {
     AccessGeoData accData = new AccessGeoData();
     IFeatureWorkspace pFeaWorkspace = accData.OpenFeatureWorkspace(workspacePath);
     spatialRef = spatialRefFactory.CreateGeographicCoordinateSystem(gcsType);
     //字段编辑:包括ObjectID 与 Shape
     IFields fields = new FieldsClass();
     IFieldsEdit fedits = (IFieldsEdit)fields;
     //构建唯一标识符字段
     IField objfield = new FieldClass();
     IFieldEdit objEdit = (IFieldEdit)objfield;
     objEdit.Name_2 = "OBJECTID";
     objEdit.Type_2 = esriFieldType.esriFieldTypeOID;
     fedits.AddField(objEdit);
     //构建shape
     IField Spfield = new FieldClass();
     IFieldEdit fEdit = (IFieldEdit)Spfield;
     IGeometryDef pGeoDef = new GeometryDefClass();
     IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
     pGeoDefEdit.GeometryType_2 = GeometeyType;
     pGeoDefEdit.SpatialReference_2 = spatialRef;
     fEdit.Name_2 = "Shape";
     fEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
     fEdit.GeometryDef_2 = pGeoDef;
     fedits.AddField(Spfield);
     //附加一个可编辑字段,存放属性值
     IField fieldZ = new FieldClass();
     IFieldEdit EditZ = (IFieldEdit)fieldZ;
     EditZ.Name_2 = "Value";
     EditZ.Type_2 = esriFieldType.esriFieldTypeDouble;
     fedits.AddField(EditZ);
     //若有其他需求,在此处添加字段,参加Value字段添加方式
     IFeatureClass pFeaClass = pFeaWorkspace.CreateFeatureClass(feaclassName, fields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
     return pFeaClass;
 }
Example #2
0
        /// <summary>
        /// 向字段集添加或修改ObjectID和拥有指定几何类型与坐标系Shape字段,若字段存在且符合要求则不添加或修改
        /// (ObjectID会在不同数据源中自动转换为OID/FID/OJBECTID)
        /// </summary>
        /// <param name="fields">字段集</param>
        /// <param name="geometryType">需要添加的Shape字段存储的几何类型</param>
        /// <param name="spatialRef">需要添加的Shape字段存储的坐标系</param>
        /// <returns></returns>
        public static IFields AddBaseFields(this IFields fields, esriGeometryType geometryType, ISpatialReference spatialRef)
        {
            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
            var         oidField   = fields.GetFirstFieldsByType(esriFieldType.esriFieldTypeOID);

            if (oidField == null)
            {
                fieldsEdit.AddField(CreateOidField());
            }

            var shapeField = fields.GetFirstFieldsByType(esriFieldType.esriFieldTypeGeometry);

            if (shapeField == null)
            {
                fieldsEdit.AddField(CreateShapeField(geometryType, spatialRef));
            }
            else if (shapeField.GeometryDef.GeometryType != geometryType ||
                     shapeField.GeometryDef.SpatialReference != spatialRef)
            {
                IFieldEdit shapeFieldEdit = (IFieldEdit)shapeField;
                shapeFieldEdit.GeometryDef_2 = CreateGeometryDef(geometryType, spatialRef);
            }

            return(fields);
        }
Example #3
0
        /// <summary>
        /// 添加注记类的附加字段
        /// </summary>
        /// <param name="pFields"></param>
        /// <param name="strObjNum"></param>
        private void addAnnoField(ref IFields pFields, string strObjNum)
        {
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

            IField     newField   = new FieldClass();
            IFieldEdit pFieldEdit = (IFieldEdit)newField;

            pFieldEdit.Name_2      = strObjNum;
            pFieldEdit.AliasName_2 = strObjNum;
            pFieldEdit.Type_2      = esriFieldType.esriFieldTypeString;
            pFieldsEdit.AddField(newField);

            newField               = new FieldClass();
            pFieldEdit             = (IFieldEdit)newField;
            pFieldEdit.Name_2      = "SMSCode";
            pFieldEdit.AliasName_2 = "SMSCode";
            pFieldEdit.Type_2      = esriFieldType.esriFieldTypeString;
            pFieldsEdit.AddField(newField);

            newField               = new FieldClass();
            pFieldEdit             = (IFieldEdit)newField;
            pFieldEdit.Name_2      = "SMSSymbol";
            pFieldEdit.AliasName_2 = "SMSSymbol";
            pFieldEdit.Type_2      = esriFieldType.esriFieldTypeString;

            pFieldsEdit.AddField(newField);
        }
Example #4
0
        //
        //create fields needed in roi shp file
        //
        private IFields CreateFields()
        {
            IObjectClassDescription objectClassDescription = new FeatureClassDescriptionClass();
            IFields     requiredFields = objectClassDescription.RequiredFields;
            IFieldsEdit fieldsEdit     = requiredFields as IFieldsEdit;
            IField      field1         = new FieldClass();
            IFieldEdit  fieldEdit1     = field1 as IFieldEdit;

            fieldEdit1.Name_2   = "CLASS_NAME";
            fieldEdit1.Type_2   = esriFieldType.esriFieldTypeString;
            fieldEdit1.Length_2 = 50;
            IField     field2     = new FieldClass();
            IFieldEdit fieldEdit2 = field2 as IFieldEdit;

            fieldEdit2.Name_2 = "CLASS_ID";
            fieldEdit2.Type_2 = esriFieldType.esriFieldTypeInteger;
            IField     field3     = new FieldClass();
            IFieldEdit fieldEdit3 = field3 as IFieldEdit;

            fieldEdit3.Name_2   = "CLASS_CLRS";
            fieldEdit3.Type_2   = esriFieldType.esriFieldTypeString;
            fieldEdit3.Length_2 = 50;
            fieldsEdit.AddField(field1);
            fieldsEdit.AddField(field2);
            fieldsEdit.AddField(field3);
            return(requiredFields);
        }
Example #5
0
        public static void EditDoubleField(IFeatureClass featureClass, string fieldName, int length, int precision,
                                           IDomain domain = null)
        {
            int idx = featureClass.FindField(fieldName);

            if (idx == -1)
            {
                return;
            }
            IField     pField     = featureClass.Fields.Field[idx];
            IFieldEdit pFieldEdit = pField as IFieldEdit;

            pFieldEdit.Name_2       = fieldName;
            pFieldEdit.AliasName_2  = fieldName;
            pFieldEdit.Type_2       = esriFieldType.esriFieldTypeDouble;
            pFieldEdit.IsNullable_2 = true;
            pFieldEdit.Editable_2   = true;
            pFieldEdit.Length_2     = length;
            pFieldEdit.Precision_2  = precision;
            if (domain != null)
            {
                pFieldEdit.Domain_2 = domain;
            }
            pField = pFieldEdit;
        }
Example #6
0
        //
        //create fields needed in roi shp file
        //
        private static IFields CreateFields(string xzqmc, string layer)
        {
            IObjectClassDescription objectClassDescription = new FeatureClassDescriptionClass();
            IFields     requiredFields = objectClassDescription.RequiredFields;
            IFieldsEdit fieldsEdit     = requiredFields as IFieldsEdit;

            IField     field1     = new FieldClass();
            IFieldEdit fieldEdit1 = field1 as IFieldEdit;

            fieldEdit1.Name_2 = _YFBH;
            fieldEdit1.Type_2 = esriFieldType.esriFieldTypeInteger;

            IField     field2     = new FieldClass();
            IFieldEdit fieldEdit2 = field2 as IFieldEdit;

            fieldEdit2.Name_2   = xzqmc;
            fieldEdit2.Type_2   = esriFieldType.esriFieldTypeString;
            fieldEdit2.Length_2 = 50;

            IField     field3     = new FieldClass();
            IFieldEdit fieldEdit3 = field3 as IFieldEdit;

            fieldEdit3.Name_2 = layer;
            fieldEdit3.Type_2 = esriFieldType.esriFieldTypeInteger;

            fieldsEdit.AddField(field1);
            fieldsEdit.AddField(field2);
            fieldsEdit.AddField(field3);

            return(requiredFields);
        }
        private void AddHField(IFeatureClass fc)
        {
            FacilityClass fac = FacilityClassManager.Instance.GetFacilityClassByName("GCD");

            DFDataConfig.Class.FieldInfo fi = fac.GetFieldInfoBySystemName("Height");
            if (fi == null)
            {
                return;
            }

            int index = fc.FindField(fi.Name);

            if (index == -1)
            {
                IField     Field      = new FieldClass();
                IFieldEdit pFieldEdit = Field as IFieldEdit;
                pFieldEdit.Name_2 = "HEIGHT";
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                fc.AddField(Field);
            }
            else
            {
                return;
            }
        }
Example #8
0
        public IField2 GetGeometryField(string geometryType, string geometryFieldName)
        {
            esriGeometryType type = _geometryTypeProvider.GetGeometryType(geometryType);
            // Create the geometry field
            IGeometryDef     geometryDef     = new GeometryDefClass();
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

            // Assign Geometry Definition
            geometryDefEdit.GeometryType_2 = type;
            geometryDefEdit.GridCount_2    = 1;
            geometryDefEdit.set_GridSize(0, 0.5);
            geometryDefEdit.AvgNumPoints_2 = 2;
            geometryDefEdit.HasM_2         = false;
            geometryDefEdit.HasZ_2         = false;

            // Create Geometry Field
            IField     fieldShape     = new FieldClass();
            IFieldEdit fieldEditShape = (IFieldEdit)fieldShape;

            fieldEditShape.Name_2        = geometryFieldName;
            fieldEditShape.AliasName_2   = geometryFieldName;
            fieldEditShape.Type_2        = esriFieldType.esriFieldTypeGeometry;
            fieldEditShape.GeometryDef_2 = geometryDef;

            return(null);
        }
Example #9
0
        /// <summary>
        /// 向已有表格添加新字段,若字段存在则不添加,并返回字段索引
        /// (注意,向已有表格添加字段使用IClass.AddFiled,而在创建表格时设置字段使用IFieldsEdit.AddField)
        /// </summary>
        /// <param name="table">操作的表格</param>
        /// <param name="name">字段名</param>
        /// <param name="aliasName">字段别名</param>
        /// <param name="fieldType">字段类型</param>
        /// <param name="length">字段长度,若为0则不设置长度(使用默认长度)</param>
        /// <returns>添加的字段的索引</returns>
        public static int AddField(this ITable table, string name, string aliasName, esriFieldType fieldType, int length = 0)
        {
            //若存在,则不需添加
            int index = -1;

            if ((index = table.Fields.FindField(name)) > -1)
            {
                return(index);
            }

            IField     field     = new FieldClass();
            IFieldEdit fieldEdit = field as IFieldEdit;

            fieldEdit.Name_2      = name;
            fieldEdit.AliasName_2 = aliasName;
            fieldEdit.Type_2      = fieldType;
            if (length > 0)
            {
                fieldEdit.Length_2 = length;
            }
            IClass cls = table as IClass;

            cls.AddField(fieldEdit); //此处使用IClass.AddFiled方法,不使用IFieldsEdit.AddField方法

            return(cls.FindField(name));
        }
Example #10
0
        /// <summary>
        /// 将源表的字段放在目标数据库环境中进行检查,生成新的字段
        /// </summary>
        /// <param name="pClass"></param>
        /// <param name="pTargetWks"></param>
        /// <param name="sError"></param>
        /// <returns></returns>
        public bool CheckFields(IClass pClass, IWorkspace pTargetWks, out IFields ResultFields)
        {
            ResultFields = null;
            IFields sourceFields = pClass.Fields;
            string  sTableName   = (pClass as IDataset).Name;

            if (sTableName.IndexOf('.') > 0)
            {
                //面积字段
                string sAreaFieldName = sTableName + ".AREA";
                int    iAreaIndex     = sourceFields.FindField(sAreaFieldName);
                if (iAreaIndex >= 0)
                {
                    IFieldEdit fieldEdit = sourceFields.get_Field(iAreaIndex) as IFieldEdit;
                    fieldEdit.Name_2      = "AREA";
                    fieldEdit.AliasName_2 = "面积";
                }
                //长度字段
                string sLenFieldName = sTableName + ".LEN";
                int    iLenIndex     = sourceFields.FindField(sLenFieldName);
                if (iLenIndex >= 0)
                {
                    IFieldEdit fieldEdit = sourceFields.get_Field(iLenIndex) as IFieldEdit;
                    fieldEdit.Name_2      = "LEN";
                    fieldEdit.AliasName_2 = "长度";
                }
            }
            // 创建字段检查对象
            IFieldChecker pFieldChecker = new FieldChecker();

            pFieldChecker.InputWorkspace    = (pClass as IDataset).Workspace;
            pFieldChecker.ValidateWorkspace = pTargetWks;
            // 验证字段
            IEnumFieldError pEnumFieldError = null;

            try
            {
                ErrorMessage = "";
                IList <string> tempError = new List <string>();
                pFieldChecker.Validate(sourceFields, out pEnumFieldError, out ResultFields);
                if (pEnumFieldError != null)
                {
                    IFieldError pFieldError = null;
                    while ((pFieldError = pEnumFieldError.Next()) != null)
                    {
                        tempError.Add(sourceFields.get_Field(pFieldError.FieldIndex).Name + GetFieldNameError(pFieldError.FieldError));
                    }
                }
                ErrorMessage = string.Join(",", tempError);
            }
            finally
            {
                if (pEnumFieldError != null)
                {
                    Marshal.ReleaseComObject(pEnumFieldError);
                }
                Marshal.ReleaseComObject(pFieldChecker);
            }
            return(string.IsNullOrEmpty(ErrorMessage));
        }
Example #11
0
        public IFeatureClass CreateShapeFile(DataSet ds, string strOutShpName, ISpatialReference pSRF)
        {
            try
            {
                DirectoryInfo    di         = new DirectoryInfo(strOutShpName);
                string           filefolder = di.Parent.FullName;
                ClsGDBDataCommon cdc        = new ClsGDBDataCommon();
                //cdc.OpenFromShapefile(filefolder);
                IFields     pFields     = new FieldsClass();
                IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

                //设置字段
                IField     pField     = new FieldClass();
                IFieldEdit pFieldEdit = (IFieldEdit)pField;

                //创建类型为几何类型的字段
                IGeometryDef     pGeoDef     = new GeometryDefClass();
                IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
                pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;

                pGeoDefEdit.HasM_2             = false;
                pGeoDefEdit.HasZ_2             = false;
                pGeoDefEdit.SpatialReference_2 = pSRF;

                pFieldEdit.Name_2        = "SHAPE";
                pFieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
                pFieldEdit.GeometryDef_2 = pGeoDef;
                //pFieldEdit.IsNullable_2 = true;
                //pFieldEdit.Required_2 = true;
                pFieldsEdit.AddField(pField);

                for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                {
                    pField                  = new FieldClass();
                    pFieldEdit              = (IFieldEdit)pField;
                    pFieldEdit.Name_2       = ds.Tables[0].Columns[i].ColumnName;
                    pFieldEdit.Type_2       = esriFieldType.esriFieldTypeString;
                    pFieldEdit.IsNullable_2 = true;
                    pFieldsEdit.AddField(pField);
                }

                ClsGDBDataCommon comm     = new ClsGDBDataCommon();
                IWorkspace       inmemWor = comm.OpenFromShapefile(filefolder);
                // ifeatureworkspacee
                IFeatureWorkspace pFeatureWorkspace = inmemWor as IFeatureWorkspace;
                IFeatureClass     pFeatureClass     = pFeatureWorkspace.CreateFeatureClass(di.Name, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");

                return(pFeatureClass);
                //IFeatureLayer pFeatureLayer = new FeatureLayerClass();
                //pFeatureLayer.FeatureClass = pFeatureClass;
                //pFeatureLayer.Name = System.IO.Path.GetFileNameWithoutExtension(di.Name);
                //m_mapControl.AddLayer(pFeatureLayer as ILayer, 0);
                //m_mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            }
            catch (SystemException ee)
            {
                MessageBox.Show(ee.Message);
                return(null);
            }
        }
        /// <summary>
        /// 要素添加属性字段
        /// </summary>
        /// <param name="pFeatureClass">待添加字段的要素类</param>
        /// <param name="name">添加字段的名称</param>
        /// <param name="aliasName">添加字段的别名</param>
        /// <param name="FieldType">添加字段的类型</param>
        /// <returns>添加成功返回1,否则返回0</returns>
        public static int AddField(IFeatureClass pFeatureClass, string name, string aliasName, esriFieldType FieldType)
        {
            //若存在,则不需添加
            if (pFeatureClass.Fields.FindField(name) > -1)
            {
                return(0);
            }
            try
            {
                IField     pField     = new FieldClass();
                IFieldEdit pFieldEdit = pField as IFieldEdit;
                pFieldEdit.AliasName_2 = aliasName;
                pFieldEdit.Name_2      = name;
                pFieldEdit.Type_2      = FieldType;

                IClass pClass = pFeatureClass as IClass;
                pClass.AddField(pField);
                return(1);
            }
            catch (COMException ex)
            {
                MessageBox.Show(ex.Message);
                //SysLogHelper.WriteOperationLog("属性表添加字段错误", ex.Source, "数据编辑");
                PS.Plot.Common.LogHelper.WriteLog(typeof(Form_Attribute), ex, "0304");
                return(0);
            }
        }
Example #13
0
 private void btnOK_Click(object sender, EventArgs e)
 {
     try
     {
         string name = this.txtName.Text.Trim();
         if (string.IsNullOrEmpty(name))
         {
             XtraMessageBox.Show("字段名不能为空!", "提示信息");
         }
         IFieldEdit pFieldEdit = _NewField as IFieldEdit;
         pFieldEdit.Name_2 = name;
         int index = _FeatureClass.FindField(name);
         if (index == -1)
         {
             _FeatureClass.AddField(_NewField);
             XtraMessageBox.Show("字段添加成功!");
             this.DialogResult = DialogResult.OK;
             this.Close();
         }
         else
         {
             XtraMessageBox.Show("字段已经存在!");
         }
     }
     catch (Exception ex)
     {
         XtraMessageBox.Show("添加字段失败:" + ex.Message, "提示信息");
     }
 }
Example #14
0
        private IFields CreateFeatureField(ITable pTable)
        {
            IFields     pFields     = new Fields();
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

            IField     pField     = new Field();
            IFieldEdit pFieldEdit = (IFieldEdit)pField;

            pFieldEdit.Name_2 = "SHAPE";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
            IGeometryDefEdit pGeoDef = new GeometryDef() as IGeometryDefEdit;

            pGeoDef.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
            //TODO 坐标系问题
            //pGeoDef.SpatialReference_2 = pFeatureLayer.SpatialReference;
            pFieldEdit.GeometryDef_2 = pGeoDef;
            pFieldsEdit.AddField(pField);

            for (int i = 0; i < pTable.Fields.FieldCount; i++)
            {
                IField field = pTable.Fields.Field[i];
                if (field.Type == esriFieldType.esriFieldTypeOID || field.Type == esriFieldType.esriFieldTypeGeometry)
                {
                    continue;
                }

                pField            = new Field();
                pFieldEdit        = (IFieldEdit)pField;
                pFieldEdit.Name_2 = field.Name; //"YSDM";
                pFieldEdit.Type_2 = field.Type; //esriFieldType.esriFieldTypeString;
                pFieldsEdit.AddField(pField);
            }

            return(pFields);
        }
        public IFields CreateShapeFields(esriGeometryType p_esriGeotype)
        {
            //创建字段编辑所需要的接口
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
            //创建基本必要的属性字段



            IField     pFld     = new FieldClass();
            IFieldEdit pFldEdit = pFld as IFieldEdit;

            pFldEdit.Name_2       = "shape";
            pFldEdit.IsNullable_2 = false;
            pFldEdit.Type_2       = esriFieldType.esriFieldTypeGeometry;

            //增加特定的属性字段
            pFieldsEdit.AddField(pFld);
            IGeometryDef     pGeoDef     = new GeometryDefClass();
            IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit;

            pGeoDefEdit.GeometryType_2     = p_esriGeotype;
            pGeoDefEdit.SpatialReference_2 = (ISpatialReference) new UnknownCoordinateSystem();
            pFldEdit.GeometryDef_2         = pGeoDef;
            return(pFieldsEdit as IFields);
        }
Example #16
0
        private void createFeatureClass()
        {
            string      ftClsPath = rsUtil.TempMosaicDir + "\\catBnd.shp";
            IFields     flds      = new FieldsClass();
            IFieldsEdit fldsE     = (IFieldsEdit)flds;
            IField      fld       = new FieldClass();
            IFieldEdit  fldE      = (IFieldEdit)fld;

            fldE.Name_2 = "catIndex";
            fldE.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
            fldsE.AddField(fldE);
            ftCls = geoUtil.createFeatureClass(ftClsPath, fldsE, esriGeometryType.esriGeometryPolygon, sr);
            int catInd = ftCls.FindField("catIndex");
            int cnt    = 0;

            foreach (IRaster rs in inrs)
            {
                IFeature ftr = ftCls.CreateFeature();
                ftr.set_Value(catInd, cnt);
                IEnvelope        ext   = ((IRasterProps)rs).Extent;
                IPolygon         poly  = new PolygonClass();
                IPointCollection pColl = (IPointCollection)poly;
                pColl.AddPoint(ext.UpperLeft);
                pColl.AddPoint(ext.UpperRight);
                pColl.AddPoint(ext.LowerRight);
                pColl.AddPoint(ext.LowerLeft);
                poly.Close();
                ftr.Shape = poly;
                ftr.Store();
                cnt++;
            }
        }
Example #17
0
        internal static IFields CreateBaseStationFields(ISpatialReference spatialReference)
        {
            //Set up a simple fields collection
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;

            //Make the shape field
            //it will need a geometry definition, with a spatial reference
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = pField as IFieldEdit;

            pFieldEdit.Name_2 = "Shape";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

            IGeometryDef     pGeometryDef     = new GeometryDef();
            IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;

            pGeometryDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPoint;
            pGeometryDefEdit.SpatialReference_2 = spatialReference;

            pFieldEdit.GeometryDef_2 = pGeometryDef;
            pFieldsEdit.AddField(pField);

            //Add OID field
            pField              = new FieldClass();
            pFieldEdit          = pField as IFieldEdit;
            pFieldEdit.Length_2 = 30;
            pFieldEdit.Name_2   = "OID";
            //pFieldEdit.AliasName_2 = "AliasName";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            pFieldsEdit.AddField(pField);

            return(pFields);
        }
Example #18
0
        public bool PurePixel2Shp(out string msg)
        {
            IFeatureClass pFeatureClass = null;

            try
            {
                string outEnd = System.IO.Path.Combine(BLL.ConstDef.PATH_TEMP, "PurePixel_" + DateTime.Now.ToFileTime().ToString() + ".shp");
                if (!BLL.EnviVars.instance.GpExecutor.Raster2Polygon(_Hyper_PurePixel, outEnd, false, out msg))
                {
                    return(false);
                }
                //字段整理
                pFeatureClass = EngineAPI.OpenFeatureClass(outEnd);
                pFeatureClass.DeleteField(pFeatureClass.Fields.get_Field(0));
                IField     field      = new FieldClass();
                IFieldEdit fieldEdit2 = field as IFieldEdit;
                fieldEdit2.Name_2 = "CLASS_ID";
                fieldEdit2.Type_2 = esriFieldType.esriFieldTypeInteger;
                pFeatureClass.AddField(field);

                return(true);
            }
            catch (Exception ex)
            {
                msg = ex.Message;
                return(false);
            }
        }
Example #19
0
        public static IFields CreateFields(esriGeometryType geoType)
        {
            IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();
            IObjectClassDescription  ocDescription = (IObjectClassDescription)fcDescription;
            IFields fields = ocDescription.RequiredFields;

            int              shapeFieldIndex = fields.FindField(fcDescription.ShapeFieldName);
            IField           field           = fields.get_Field(shapeFieldIndex);
            IGeometryDef     geometryDef     = field.GeometryDef;
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

            geometryDefEdit.GeometryType_2 = geoType;
            ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            var sr = spatialReferenceFactory.CreateGeographicCoordinateSystem(4326);

            geometryDefEdit.SpatialReference_2 = sr;

            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

            field = new FieldClass();
            IFieldEdit fieldEdit = (IFieldEdit)field;

            fieldEdit.Name_2 = "Name";
            fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            fieldsEdit.AddField(field);

            return(fields);
        }
Example #20
0
 private void createFeatureClass()
 {
     if (outftr == null)
     {
         //mfldIndex = new int[bCnt];
         segIndex = 0;
         IFields     flds  = new FieldsClass();
         IFieldsEdit fldsE = (IFieldsEdit)flds;
         IField      fld   = new FieldClass();
         IFieldEdit  fldE  = (IFieldEdit)fld;
         fldE.Name_2 = "SegID";
         fldE.Type_2 = esriFieldType.esriFieldTypeInteger;
         fldsE.AddField(fldE);
         //IField fld2 = new FieldClass();
         //IFieldEdit fldE2 = (IFieldEdit)fld2;
         //fldE2.Name_2 = "Cluster";
         //fldE2.Type_2 = esriFieldType.esriFieldTypeInteger;
         //fldsE.AddField(fldE2);
         //for (int i = 0; i < bCnt; i++)
         //{
         //    IField mFld = new FieldClass();
         //    IFieldEdit mFldE = (IFieldEdit)mFld;
         //    mFldE.Name_2 = "Band" + i.ToString();
         //    mFldE.Type_2 = esriFieldType.esriFieldTypeDouble;
         //    fldsE.AddField(mFld);
         //}
         outftr   = geoUtil.createFeatureClass((IWorkspace2)OutWorkSpace, OutName, flds, esriGeometryType.esriGeometryPolygon, ((IRasterProps)InputRaster).SpatialReference);
         segIndex = outftr.FindField("SegID");
         //clustIndex = outftr.FindField("Cluster");
         //for (int i = 0; i < bCnt; i++)
         //{
         //    mfldIndex[i] = outftr.FindField("Band" + i.ToString());
         //}
     }
 }
Example #21
0
        private string GenerateTemp3DPolygonStorage()
        {
            string newFeatureClassName = $"Polygon3D_L{Helper.GetTemporaryNameSuffix()}";

            IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();
            IObjectClassDescription  ocDescription = (IObjectClassDescription)fcDescription;
            IFields fields = ocDescription.RequiredFields;

            int shapeFieldIndex = fields.FindField(fcDescription.ShapeFieldName);

            IField           field           = fields.get_Field(shapeFieldIndex);
            IGeometryDef     geometryDef     = field.GeometryDef;
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

            geometryDefEdit.HasZ_2             = true;
            geometryDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPolygon;
            geometryDefEdit.SpatialReference_2 = ArcMapInstance.Document.FocusMap.SpatialReference;

            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

            IField     isVisibleField     = new FieldClass();
            IFieldEdit isVisibleFieldEdit = (IFieldEdit)isVisibleField;

            isVisibleFieldEdit.Name_2 = "IS_VISIBLE";
            isVisibleFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
            fieldsEdit.AddField(isVisibleFieldEdit);

            GenerateTempStorage(newFeatureClassName, fields, esriGeometryType.esriGeometryPolygon);
            return(newFeatureClassName);
        }
Example #22
0
 public void AddFields(IFeatureClass pFc, string fieldName)
 {
     try
     {
         int theField = pFc.Fields.FindField(fieldName);
         if (theField == -1)
         {
             IField     pField     = new FieldClass();
             IFieldEdit pFieldEdit = pField as IFieldEdit;
             pFieldEdit.Name_2      = fieldName;
             pFieldEdit.Type_2      = esriFieldType.esriFieldTypeSmallInteger;
             pFieldEdit.AliasName_2 = fieldName;
             pFc.AddField(pFieldEdit);
         }
         else
         {
             return;
         }
     }
     catch (Exception ex)
     {
         XtraMessageBox.Show(ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
         Log.WriteLog(typeof(SampleSimulation), ex);
     }
 }
Example #23
0
        public static void AddDoubleField(IFeatureClass featureClass, string fieldName, int length, int precision, IDomain domain = null, string aliasName = null)
        {
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = pField as IFieldEdit;

            pFieldEdit.Name_2 = fieldName;
            if (string.IsNullOrEmpty(aliasName))
            {
                pFieldEdit.AliasName_2 = fieldName;
            }
            else
            {
                pFieldEdit.AliasName_2 = aliasName;
            }
            pFieldEdit.Type_2       = esriFieldType.esriFieldTypeDouble;
            pFieldEdit.IsNullable_2 = true;
            pFieldEdit.Editable_2   = true;
            pFieldEdit.Length_2     = length;
            pFieldEdit.Precision_2  = precision;
            if (domain != null)
            {
                pFieldEdit.Domain_2 = domain;
            }
            featureClass.AddField(pField);
        }
        private IFeatureClass CreateShapeFile(string shapeFullname, string proj)
        {
            FileInfo finfo     = new FileInfo(shapeFullname);
            string   parFolder = System.IO.Path.GetDirectoryName(shapeFullname);

            if (!Directory.Exists(parFolder))
            {
                Directory.CreateDirectory(parFolder);
            }
            IWorkspaceFactory shpwf       = new ShapefileWorkspaceFactory();
            IFeatureWorkspace featureWs   = shpwf.OpenFromFile(parFolder, 0) as IFeatureWorkspace;
            IFields           pFields     = new FieldsClass();
            IFieldsEdit       pFieldsEdit = pFields as IFieldsEdit;

            //添加几何字段
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = pField as IFieldEdit;

            pFieldEdit.Name_2 = "Shape";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

            IGeometryDef     pGeomDef     = new GeometryDefClass();
            IGeometryDefEdit pGeomDefEdit = pGeomDef as IGeometryDefEdit;

            pGeomDefEdit.GeometryType_2     = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint; //几何类型
            pGeomDefEdit.HasZ_2             = true;                                                    //是否有Z值
            pGeomDefEdit.SpatialReference_2 = CreateSpatialReference(proj);                            //设置空间参考
            pFieldEdit.GeometryDef_2        = pGeomDef;
            pFieldsEdit.AddField(pField);
            return(featureWs.CreateFeatureClass(finfo.Name, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", null));
        }
Example #25
0
        /// <summary>
        /// 新建线图层
        /// </summary>
        public void CreatePolylineLayer()
        {
            SaveFileDialog sfdPoint = new SaveFileDialog();

            sfdPoint.Title            = "请选择线图层的存储位置";
            sfdPoint.Filter           = "Shapefile(*.shp)|*.shp|All files(*.*)|*.*";
            sfdPoint.RestoreDirectory = true;
            if (sfdPoint.ShowDialog() == DialogResult.OK)
            {
                LocalFilePath = sfdPoint.FileName;
                FilePath      = System.IO.Path.GetDirectoryName(LocalFilePath);
                FileName      = System.IO.Path.GetFileName(LocalFilePath);

                IFields     pFields     = new FieldsClass();
                IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
                IField      pField      = new FieldClass();
                IFieldEdit  pFieldEdit  = pField as IFieldEdit;
                pFieldEdit.Name_2 = "SHAPE";
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

                IGeometryDef     pGeometryDef     = new GeometryDefClass();
                IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
                pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
                pFieldEdit.GeometryDef_2        = pGeometryDef;
                pFieldsEdit.AddField(pField);

                IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
                IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(FilePath, 0) as IFeatureWorkspace;
                pFeatureWorkspace.CreateFeatureClass(FileName, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
                m_mapControl.AddShapeFile(FilePath, FileName);
                m_mapControl.ActiveView.Refresh();
            }
        }
Example #26
0
        public static IField CreateDateField(ITable table, string fieldName, string AliasName)
        {
            if ((table == null) || (fieldName.Length <= 0))
            {
                MessageBox.Show("需要创建的字段名和表(ITable)不能为空。");
                return(null);
            }
            IField field = GetField(table, fieldName);

            if (field != null)
            {
                return(field);
            }
            try
            {
                IField     field2 = new FieldClass();
                IFieldEdit edit   = (IFieldEdit)field2;
                edit.AliasName_2  = AliasName;
                edit.Name_2       = fieldName;
                edit.Type_2       = esriFieldType.esriFieldTypeDate;
                edit.IsNullable_2 = true;
                //edit.DefaultValue_2 = 0.0;
                edit.Editable_2 = true;
                table.AddField(field2);
                return(field2);
            }
            catch (Exception exception)
            {
                MessageBox.Show("创建字段失败,原因:" + exception.Message);
            }
            return(null);
        }
Example #27
0
        /// <summary>
        /// 创建数据表
        /// </summary>
        /// <param name="_TablePath"></param>
        /// <param name="_TableName"></param>
        /// <returns></returns>
        public ITable CreateTable(string _TablePath, string _TableName)
        {
            IWorkspaceFactory pWks = new FileGDBWorkspaceFactoryClass();
            IFeatureWorkspace pFwk = pWks.OpenFromFile(_TablePath, 0) as IFeatureWorkspace;

            ESRI.ArcGIS.Geodatabase.IObjectClassDescription objectClassDescription = new ESRI.ArcGIS.Geodatabase.ObjectClassDescriptionClass();
            IFields     pTableFields     = objectClassDescription.RequiredFields;
            IFieldsEdit pTableFieldsEdit = pTableFields as IFieldsEdit;
            IField      pField           = null;
            IFieldEdit  pFieldEdit       = null;

            for (int i = 0; i < dt.Columns.Count; i++)
            {
                DataColumn dc = dt.Columns[i];
                pField            = new FieldClass();
                pFieldEdit        = pField as IFieldEdit;
                pFieldEdit.Name_2 = dc.ColumnName;
                switch (dc.DataType.ToString())
                {
                case "System.Double":
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                    break;

                case "System.String":
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                    break;
                }
                pTableFieldsEdit.AddField(pField);
            }

            ITable pTable = pFwk.CreateTable(_TableName, pTableFields, null, null, "");

            return(pTable);
        }
        public static int AddField(IFeatureClass pFeatureClass, esriFieldType pesriFieldType, string pstrFieldName)
        {
            IFieldEdit pFieldEdit = GenerateFieldEdit(pesriFieldType, pstrFieldName);

            pFeatureClass.AddField((IField)pFieldEdit);
            return(pFeatureClass.Fields.FieldCount - 1);
        }
Example #29
0
        /// <summary>
        /// 创建内存IFeatureLayer,该方法为创建内存临时图层的便捷方法,创建的图层带有id,和name两个属性字段。
        /// </summary>
        /// <param name="myAxMapControl">AxMapControl扩展对象</param>
        /// <param name="strIFeatureClassName">IFeatureClass名称</param>
        /// <param name="myEsriGeometryType">数据类型</param>
        /// <returns>IFeatureLayer对象</returns>
        public static IFeatureLayer CreateMemoryFeatureLayer(this AxMapControl myAxMapControl, String strIFeatureClassName, esriGeometryType myEsriGeometryType)
        {
            IWorkspaceFactory myIWorkspaceFactory = new InMemoryWorkspaceFactoryClass();
            IWorkspaceName    myIWorkspaceName    = myIWorkspaceFactory.Create("", strIFeatureClassName, null, 0);
            IName             myIName             = (IName)myIWorkspaceName;
            IWorkspace        myIWorkspace        = (IWorkspace)myIName.Open();
            IField            myIField            = null;
            IFields           myIFields           = new FieldsClass();
            IFieldsEdit       myIFieldsEdit       = myIFields as IFieldsEdit;
            IFieldEdit        myIFieldEdit        = null;
            IFeatureClass     myIFeatureClass     = null;
            IFeatureLayer     myIFeatureLayer     = null;

            try
            {
                //主键id
                myIField                  = new FieldClass();
                myIFieldEdit              = myIField as IFieldEdit;
                myIFieldEdit.Name_2       = "id";
                myIFieldEdit.IsNullable_2 = true;
                myIFieldEdit.Length_2     = 50;
                myIFieldEdit.Type_2       = esriFieldType.esriFieldTypeString;
                myIFieldsEdit.AddField(myIField);
                //名称name
                myIField                  = new FieldClass();
                myIFieldEdit              = myIField as IFieldEdit;
                myIFieldEdit.Name_2       = "name";
                myIFieldEdit.IsNullable_2 = true;
                myIFieldEdit.Length_2     = 50;
                myIFieldEdit.Type_2       = esriFieldType.esriFieldTypeString;
                myIFieldsEdit.AddField(myIField);
                //IGeometryI字段
                IGeometryDef     myIGeometryDef     = new GeometryDefClass();
                IGeometryDefEdit myIGeometryDefEdit = (IGeometryDefEdit)myIGeometryDef;
                myIGeometryDefEdit.AvgNumPoints_2     = 5;
                myIGeometryDefEdit.GeometryType_2     = myEsriGeometryType;
                myIGeometryDefEdit.GridCount_2        = 1;
                myIGeometryDefEdit.HasM_2             = false;
                myIGeometryDefEdit.HasZ_2             = false;
                myIGeometryDefEdit.SpatialReference_2 = myAxMapControl.SpatialReference;
                myIField                   = new FieldClass();
                myIFieldEdit               = myIField as IFieldEdit;
                myIFieldEdit.Name_2        = "SHAPE";
                myIFieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
                myIFieldEdit.GeometryDef_2 = myIGeometryDef;
                myIFieldEdit.IsNullable_2  = true;
                myIFieldEdit.Required_2    = true;
                myIFieldsEdit.AddField(myIField);
                //
                myIFeatureClass = (myIWorkspace as IFeatureWorkspace).CreateFeatureClass(strIFeatureClassName, myIFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
                (myIFeatureClass as IDataset).BrowseName = strIFeatureClassName;
                myIFeatureLayer              = new FeatureLayerClass();
                myIFeatureLayer.Name         = strIFeatureClassName;
                myIFeatureLayer.FeatureClass = myIFeatureClass;
            }
            catch
            {
            }
            return(myIFeatureLayer);
        }
 /// <summary>
 /// 在内存中创建要素类
 /// </summary>
 /// <returns></returns>
 public IFeatureClass MemoryFeatureClass()
 {
     AccessGeoData accData = new AccessGeoData();
     IFeatureWorkspace pFeaWorkspace = accData.FeatureWorkspace();
     IFields fields = new FieldsClass();
     IFieldsEdit fedits = (IFieldsEdit)fields;
     IField objfield = new FieldClass();
     IFieldEdit objEdit = (IFieldEdit)objfield;
     objEdit.Name_2 = "OBJECTID";
     objEdit.Type_2 = esriFieldType.esriFieldTypeOID;
     fedits.AddField(objEdit);
     IField Spfield = new FieldClass();
     IFieldEdit fEdit = (IFieldEdit)Spfield;
     IGeometryDef pGeoDef = new GeometryDefClass();
     IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
     pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
     pGeoDefEdit.SpatialReference_2 = spatialRef;
     fEdit.Name_2 = "Shape";
     fEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
     fEdit.GeometryDef_2 = pGeoDef;
     fedits.AddField(Spfield);
     IField fieldZ = new FieldClass();
     IFieldEdit EditZ = (IFieldEdit)fieldZ;
     EditZ.Name_2 = "Z";
     EditZ.Type_2 = esriFieldType.esriFieldTypeDouble;
     fedits.AddField(EditZ);
     IFeatureClass pFeaClass = pFeaWorkspace.CreateFeatureClass("FeaturePoints", fields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
     return pFeaClass;
 }