/// <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; }
/// <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); }
/// <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); }
// //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); }
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; }
// //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; } }
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); }
/// <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)); }
/// <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)); }
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); } }
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, "提示信息"); } }
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); }
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++; } }
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); }
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); } }
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); }
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()); //} } }
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); }
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); } }
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)); }
/// <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(); } }
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); }
/// <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); }
/// <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; }