コード例 #1
0
ファイル: frmAddXYData.cs プロジェクト: wangzh1024/DesktopGIS
 /// <summary>
 /// 把DataTable转为ITable ,tempPath 不含文件名的w文件夹路径
 /// </summary>
 /// <param name="mTable"></param>
 /// <returns></returns>
 private ITable DataTableToITable(DataTable mTable, string xFieldName, string yFieldName, string tempPath)
 {
     try
     {
         #region 新建表字段
         IField      pField     = null;
         IFields     fields     = new FieldsClass();
         IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
         fieldsEdit.FieldCount_2 = 2;
         //添加X字段
         pField = new FieldClass();
         IFieldEdit fieldEdit = (IFieldEdit)pField;
         fieldEdit.Name_2      = "X";
         fieldEdit.AliasName_2 = "X";
         //设置字段类型
         fieldEdit.Type_2     = esriFieldType.esriFieldTypeDouble;
         fieldEdit.Editable_2 = true;
         fieldsEdit.set_Field(0, pField);
         //添加Y字段
         IField     pField1    = new FieldClass();
         IFieldEdit fieldEdit1 = (IFieldEdit)pField1;
         fieldEdit1.Name_2      = "Y";
         fieldEdit1.AliasName_2 = "Y";
         fieldEdit1.Type_2      = esriFieldType.esriFieldTypeDouble;
         fieldEdit1.Editable_2  = true;
         fieldsEdit.set_Field(1, pField1);
         #endregion
         ShapefileWorkspaceFactoryClass     class2     = new ShapefileWorkspaceFactoryClass();
         ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = class2.OpenFromFile(tempPath, 0);
         IFeatureWorkspace pFWS = pWorkspace as IFeatureWorkspace;
         //删除已有的
         if (System.IO.File.Exists(tempPath + "点数据.dbf"))
         {
             System.IO.File.Delete(tempPath + "点数据.dbf");
         }
         //创建空表
         ITable pTable = pFWS.CreateTable("点数据", fieldsEdit, null, null, "");
         //遍历DataTable中数据,然后转换为ITable中的数据
         int xRowIndex = pTable.Fields.FindField("X");
         int yRowIndex = pTable.Fields.FindField("Y");
         for (int k = 0; k < mTable.Rows.Count; k++)
         {
             //ITable 的记录
             IRow    row   = pTable.CreateRow();
             DataRow pRrow = mTable.Rows[k];
             row.set_Value(xRowIndex, pRrow[xFieldName]);
             row.set_Value(yRowIndex, pRrow[yFieldName]);
             row.Store();
         }
         return(pTable);
     }
     catch
     {
         return(null);
     }
 }
コード例 #2
0
ファイル: GDBData.cs プロジェクト: VB6Hobbyst7/minegis
        private void AddSimpleField(IFieldsEdit fieldsEdit, esriFieldType type, string name, string aliasName)
        {
            IField     field     = new FieldClass();
            IFieldEdit fieldEdit = field as IFieldEdit;

            fieldEdit.Type_2      = type;
            fieldEdit.Name_2      = name;
            fieldEdit.AliasName_2 = aliasName;
            fieldsEdit.AddField(field);
        }
コード例 #3
0
        public void addFiled(string fieldName, esriFieldType esriFieldType, ref IFieldsEdit pFieldsEdit)
        {
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = (IFieldEdit)pField;

            pFieldEdit.Name_2   = fieldName;
            pFieldEdit.Type_2   = esriFieldType;
            pFieldEdit.Length_2 = 50;
            pFieldsEdit.AddField(pField);
        }
コード例 #4
0
        private IFields CreateChainFields()
        {
            IFields     flds  = new FieldsClass();
            IFieldsEdit eflds = flds as IFieldsEdit;

            eflds.FieldCount_2 = 7;

            IField     oid_field = new FieldClass();
            IFieldEdit eOid      = (IFieldEdit)oid_field;

            eOid.Name_2      = "ObjectID";
            eOid.AliasName_2 = "ObjectID";
            eOid.Type_2      = esriFieldType.esriFieldTypeOID;

            eflds.set_Field(0, oid_field);

            //Create A geometry Definition for the layer
            IGeometryDef     geomDef  = new GeometryDefClass();
            IGeometryDefEdit egeomDef = (IGeometryDefEdit)geomDef;

            egeomDef.GeometryType_2     = esriGeometryType.esriGeometryPolyline;
            egeomDef.SpatialReference_2 = ArcMap.Document.FocusMap.SpatialReference;

            IField     shap   = new FieldClass();
            IFieldEdit eshape = (IFieldEdit)shap;

            eshape.Type_2        = esriFieldType.esriFieldTypeGeometry;
            eshape.Name_2        = "Shape";
            eshape.AliasName_2   = "Shape";
            eshape.GeometryDef_2 = geomDef;

            eflds.set_Field(1, shap);

            IField FromLeft = CreateIntegerField("FromLeft");

            eflds.set_Field(2, FromLeft);

            IField ToLeft = CreateIntegerField("ToLeft");

            eflds.set_Field(3, ToLeft);

            IField FromRight = CreateIntegerField("FromRight");

            eflds.set_Field(4, FromRight);

            IField ToRight = CreateIntegerField("ToRight");

            eflds.set_Field(5, ToRight);

            IField CLID = CreateIntegerField("CLID");

            eflds.set_Field(6, CLID);

            return(flds);
        }
コード例 #5
0
        public IFeatureClass CreateShapeFile(string strFileName, ISpatialReference pSRF)
        {
            try
            {
                DirectoryInfo    di         = new DirectoryInfo(txtFileName.Text);
                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;

                //创建类型为几何类型的字段
                pFieldEdit.Name_2 = "shape";
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;

                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);


                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);
            }
        }
コード例 #6
0
        //字段集
        private IFields CreateFieldsCollectionForFeatueClass(ISpatialReference spatialReference,
                                                             esriGeometryType geometryType, string className)
        {
            //Use the feature class description to return the required fields in a fields collection.
            IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
            IObjectClassDescription  ocDesc = (IObjectClassDescription)fcDesc;
            //Create the fields using the required fields method.
            IFields fields = ocDesc.RequiredFields;
            //Locate the shape field with the name from the feature class description.
            int    shapeFieldIndex = fields.FindField(fcDesc.ShapeFieldName);
            IField shapeField      = fields.get_Field(shapeFieldIndex);
            //Modify the GeometryDef object before using the fields collection to create a
            //feature class.
            IGeometryDef     geometryDef     = shapeField.GeometryDef;
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

            //Alter the feature class geometry type to the type we need.
            geometryDefEdit.GeometryType_2 = geometryType;
            geometryDefEdit.HasZ_2         = true;
            geometryDefEdit.HasM_2         = true;
            geometryDefEdit.GridCount_2    = 1;
            //Set the first grid size to zero and allow ArcGIS to determine a valid grid size.
            geometryDefEdit.set_GridSize(0, 0);
            geometryDefEdit.SpatialReference_2 = spatialReference;
            //添加地质属性概率字段
            if (geometryType == esriGeometryType.esriGeometryPoint)
            {
                //Create a user-defined double field for "probability"
                IFieldsEdit fieldsEdit      = (IFieldsEdit)fields;
                IField      incomeField     = new FieldClass();
                IFieldEdit  incomeFieldEdit = (IFieldEdit)incomeField;
                incomeFieldEdit.AliasName_2  = "probability";
                incomeFieldEdit.Editable_2   = true;
                incomeFieldEdit.IsNullable_2 = false;
                incomeFieldEdit.Name_2       = "probability";
                incomeFieldEdit.Precision_2  = 2;
                incomeFieldEdit.Scale_2      = 5;
                incomeFieldEdit.Type_2       = esriFieldType.esriFieldTypeDouble;
                fieldsEdit.AddField(incomeField);
                //Create a user-defined double field for "RegardP"
                IFieldsEdit fieldsEdit1      = (IFieldsEdit)fields;
                IField      incomeField1     = new FieldClass();
                IFieldEdit  incomeFieldEdit1 = (IFieldEdit)incomeField1;
                incomeFieldEdit1.AliasName_2  = "RegardP";
                incomeFieldEdit1.Editable_2   = true;
                incomeFieldEdit1.IsNullable_2 = false;
                incomeFieldEdit1.Name_2       = "RegardP";
                incomeFieldEdit1.Precision_2  = 2;
                incomeFieldEdit1.Scale_2      = 5;
                incomeFieldEdit1.Type_2       = esriFieldType.esriFieldTypeDouble;
                fieldsEdit1.AddField(incomeField1);
            }
            return(fields);
        }
コード例 #7
0
ファイル: FieldOpt.cs プロジェクト: zhongshuiyuan/WLib
 /// <summary>
 /// 检查字段集合中是否存在指定类型的字段
 /// </summary>
 /// <param name="fieldsEdit"></param>
 /// <param name="fieldType"></param>
 /// <returns></returns>
 public static bool IsExistFieldType(this IFieldsEdit fieldsEdit, esriFieldType fieldType)
 {
     for (int i = 0; i < fieldsEdit.FieldCount; i++)
     {
         if (fieldsEdit.get_Field(i).Type == fieldType)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #8
0
        //创建线图层
        public IFeatureClass CreatLineFC(IFeatureDataset pFeatureDataset, IFeatureClass pPointFClass)
        {
            try
            {
                //建立shape字段
                IFields     pFields     = new FieldsClass();
                IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;
                IField      pField      = new FieldClass();
                IFieldEdit  pFieldEdit  = (IFieldEdit)pField;
                pFieldEdit.Name_2 = "SHAPE";
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                //设置Geometry definition
                IGeometryDef     pGeometryDef     = new GeometryDefClass();
                IGeometryDefEdit pGeometryDefEdit = (IGeometryDefEdit)pGeometryDef;
                pGeometryDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPolyline; //点、线、面
                pGeometryDefEdit.SpatialReference_2 = ClsGDBDataCommon.CreateProjectedCoordinateSystem();
                pFieldEdit.GeometryDef_2            = pGeometryDef;
                pFieldsEdit.AddField(pField);

                //新建字段
                pField                  = new FieldClass();
                pFieldEdit              = (IFieldEdit)pField;
                pFieldEdit.Name_2       = "Length";       //点类型
                pFieldEdit.Type_2       = esriFieldType.esriFieldTypeString;
                pFieldEdit.IsNullable_2 = true;
                pFieldsEdit.AddField(pField);

                IFeatureClass pFeatureClass = pFeatureDataset.CreateFeatureClass(textBoxX3.Text + "_GmpLine", pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");

                FrmPointToLine frmP2L  = new FrmPointToLine(m_pMapCtl.Object as IMapControl3);
                IFeatureLayer  PFLayer = new FeatureLayerClass();
                PFLayer.FeatureClass = pPointFClass;
                IPointCollection pPointColl = frmP2L.ReadPoint(PFLayer);
                List <IPolyline> LineList   = CreatePolyline(pPointColl);

                for (int i = 0; i < LineList.Count; i++)
                {
                    if (LineList[i].Length > 0)
                    {
                        IFeature pFeature = pFeatureClass.CreateFeature();
                        pFeature.Shape = LineList[i];
                        string sLength = ((int)(LineList[i].Length * 100.0) / 100.0).ToString() + "m";
                        pFeature.set_Value(pFeature.Fields.FindField("Length"), sLength);
                        pFeature.Store();
                    }
                }
                return(pFeatureClass);
            }
            catch (System.Exception ex)
            {
                return(null);
            }
        }
コード例 #9
0
        UID myUID;                                // UID for the Thumbnail Builder.

        /// <summary>
        /// The following function creates a field called "ThumbNail" and adds it to the existing
        /// fields in the mosaic dataset catalog as a blob.
        /// </summary>
        /// <param name="myFields">List of fields added to the Mosaic Catalog</param>
        private static void AddingNewField(IFields myFields)
        {
            IField     pField = new FieldClass();                         // Create a new field object
            IFieldEdit objectIDFieldEditor = (IFieldEdit)pField;          // Set the field editor for this field

            objectIDFieldEditor.Name_2 = "ThumbNail";                     // Set the name of the field
            objectIDFieldEditor.Type_2 = esriFieldType.esriFieldTypeBlob; // Set the type of the field as Blob
            IFieldsEdit fieldsEditor = (IFieldsEdit)myFields;             // Add the newly created field to list of existing fields

            fieldsEditor.AddField(pField);
            return;
        }
コード例 #10
0
        public static void AddField(this IFeatureClass featureClass, IField addField)
        {
            IClass      pClass     = featureClass as IClass;
            IFieldsEdit fieldsEdit = featureClass.Fields as IFieldsEdit;

            //IField field = new FieldClass();
            //IFieldEdit2 fieldEdit = field as IFieldEdit2;
            //fieldEdit.Type_2 = addField.Type;
            //fieldEdit.Name_2 = addField.Name;
            //fieldEdit.AliasName_2 = addField.AliasName;
            pClass.AddField(addField);
        }
コード例 #11
0
        public IFeatureClass CreateFeatureClass(string string_0, esriGeometryType esriGeometryType_0,
                                                ISpatialReference ispatialReference_0, bool bool_0, bool bool_1, int int_0)
        {
            IFeatureWorkspace mWorkspace  = (IFeatureWorkspace)this.m_Workspace;
            IFieldsEdit       fieldsClass = (IFieldsEdit)(new Fields() as IFieldsEdit);

            FieldEdit.AddDefaultField(fieldsClass, esriGeometryType_0, ispatialReference_0, bool_0, bool_1, int_0);
            IFeatureClass featureClass = mWorkspace.CreateFeatureClass(string_0, fieldsClass, null, null,
                                                                       esriFeatureType.esriFTSimple, "Shape", "");

            return(featureClass);
        }
コード例 #12
0
        /// <summary>
        /// 生成signature文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SC_CreateSampleFiles_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (SC_dataGridView.Rows.Count == 0)
            {
                return;
            }
            SaveFileDialog SaveSignatureFile = new SaveFileDialog();

            SaveSignatureFile.Title  = "生成Signature文件";
            SaveSignatureFile.Filter = "样本文件|*.gsg";
            if (SaveSignatureFile.ShowDialog() == DialogResult.OK)
            {
                IGeoDataset inputraster = SampleLayerCombox.Tag as IGeoDataset;

                //在临时文件夹生成featureclass,根据featureclass生成signature文件
                //判断临时文件夹下是否有重名
                int changefilename = 0;
                while (System.IO.File.Exists(Application.StartupPath + "\\temp\\TempSample" + changefilename + ".shp"))
                {
                    changefilename++;
                }
                //新建featureclass字段
                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;

                //设置geometry definition
                IGeometryDef     pGeometryDef     = new GeometryDefClass();
                IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
                pGeometryDefEdit.GeometryType_2     = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon;
                pGeometryDefEdit.SpatialReference_2 = inputraster.SpatialReference;
                pFieldEdit.GeometryDef_2            = pGeometryDef;
                pFieldsEdit.AddField(pField);

                IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
                IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(Application.StartupPath + "\\temp", 0) as IFeatureWorkspace;
                IFeatureClass     featureclass      = pFeatureWorkspace.CreateFeatureClass("TempSample" + changefilename + ".shp", pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
                //根据单元格tag中存储的多边形生成对应要素
                for (int i = 0; i < SC_dataGridView.Rows.Count; i++)
                {
                    IFeature feature = featureclass.CreateFeature();
                    feature.Shape = SC_dataGridView.Rows[i].Cells["color"].Tag as IPolygon;
                    feature.Store();
                }
                //生成signature文件
                IGeoDataset     Sampledataset  = featureclass as IGeoDataset;
                IMultivariateOp Multivariateop = new RasterMultivariateOpClass();
                Multivariateop.CreateSignatures(inputraster, Sampledataset, SaveSignatureFile.FileName + ".gsg", true);
            }
        }
コード例 #13
0
        private static IFieldsEdit CreateField(IFieldsEdit fieldsEdit, string fieldName, esriFieldType esriFieldType)
        {
            // ReSharper disable UseObjectOrCollectionInitializer
            IFieldEdit fieldEdit = new FieldClass();

            fieldEdit.Type_2      = esriFieldType;
            fieldEdit.Name_2      = fieldName;
            fieldEdit.AliasName_2 = fieldName;
            fieldsEdit.AddField(fieldEdit);
            return(fieldsEdit);
            // ReSharper restore UseObjectOrCollectionInitializer
        }
コード例 #14
0
        public void CreateLineShpFile(string fileName, ISpatialReference pSRF)
        {
            //判断需要生成的线文件是否存在,若不存在则创建文件,若存在则将新添加的线写入文件
            if (File.Exists(fileName))
            {
                MessageBox.Show("file already exist, please change file name!");
                return;
            }
            else
            {
                string pLineFile = fileName;
                string pFilePath = System.IO.Path.GetDirectoryName(pLineFile);
                string pFileName = System.IO.Path.GetFileName(pLineFile);
                //打开工作空间
                IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
                IFeatureWorkspace pWS  = (IFeatureWorkspace)pWSF.OpenFromFile(pFilePath, 0);

                //判断文件是否存在,若不存在则创建文件
                if (!(File.Exists(fileName)))
                {
                    const string strShapeFieldName = "shape";
                    //设置字段集
                    IFields     pFields     = new FieldsClass();
                    IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

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

                    //创建类型为几何类型的字段
                    pFieldEdit.Name_2 = strShapeFieldName;
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                    //为esriFieldTypeGeometry类型的字段创建几何定义,包括类型和空间参照
                    IGeometryDef     pGeoDef     = new GeometryDefClass(); //The geometry definition for the field if IsGeometry is TRUE.
                    IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;
                    pGeoDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPolyline;
                    pGeoDefEdit.SpatialReference_2 = pSRF;
                    pFieldEdit.GeometryDef_2       = pGeoDef;
                    pFieldsEdit.AddField(pField);

                    //add length field
                    pField                  = new FieldClass();
                    pFieldEdit              = (IFieldEdit)pField;
                    pFieldEdit.Name_2       = "length";
                    pFieldEdit.Type_2       = esriFieldType.esriFieldTypeDouble;
                    pFieldEdit.IsNullable_2 = true;
                    pFieldsEdit.AddField(pField);

                    //创建shapefile线图层
                    pWS.CreateFeatureClass(pFileName, pFields, null, null, esriFeatureType.esriFTSimple, strShapeFieldName, "");
                }
            }
        }
コード例 #15
0
ファイル: NewFeatureClass.cs プロジェクト: sishui198/ArcGis-
        private void button2_Click(object sender, EventArgs e)
        {
            //工作空间
            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(pFilePath, 0) as IFeatureWorkspace;

            //创建字段集2
            IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();
            //创建必要字段
            IObjectClassDescription ocDescription = (IObjectClassDescription)fcDescription;

            //必要字段
            IFields pFields = new FieldsClass();

            pFields = ocDescription.RequiredFields;

            //要素类的几何类型、坐标系
            int              shapeFileIndex   = pFields.FindField(fcDescription.ShapeFieldName);
            IField           pField           = pFields.get_Field(shapeFileIndex);
            IGeometryDef     pGeometryDef     = pField.GeometryDef;
            IGeometryDefEdit pGeometryDefEdit = (IGeometryDefEdit)pGeometryDef;

            pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
            ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();

            //更改为可选的坐标系
            IProjectedCoordinateSystem pProjectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(
                (int)esriSRProjCS4Type.esriSRProjCS_Xian1980_GK_Zone_21);

            pGeometryDefEdit.SpatialReference_2 = pProjectedCoordinateSystem;


            //自定义字段
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

            addField(pFieldsEdit, "FID");
            addField(pFieldsEdit, "Row");
            addField(pFieldsEdit, "Column");
            addField(pFieldsEdit, "Number");
            //传入字段
            IFieldChecker   pFieldChecker   = new FieldCheckerClass();
            IEnumFieldError pEnumFieldError = null;
            IFields         validatedFields = null;

            pFieldChecker.ValidateWorkspace = (IWorkspace)pFeatureWorkspace;
            pFieldChecker.Validate(pFields, out pEnumFieldError, out validatedFields);

            //创建要素类
            IFeatureClass pFeatureClass = pFeatureWorkspace.CreateFeatureClass(pFileName, validatedFields
                                                                               , ocDescription.InstanceCLSID, ocDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, fcDescription.ShapeFieldName, "");

            MessageBox.Show("创建要素类成功");
        }
コード例 #16
0
        public void AddTabField(IFieldsEdit ifieldsEdit_0, IntPtr intptr_0)
        {
            int num = TabRead._mitab_c_get_field_count(intptr_0);

            for (int i = 0; i < num; i++)
            {
                IFieldEdit field = new ESRI.ArcGIS.Geodatabase.Field() as IFieldEdit;
                field.Name_2 = TabRead._mitab_c_get_field_name(intptr_0, i);
                int num3 = TabRead._mitab_c_get_field_type(intptr_0, i);
                int num4 = TabRead._mitab_c_get_field_width(intptr_0, i);
                int num5 = TabRead._mitab_c_get_field_precision(intptr_0, i);
                switch (num3)
                {
                case 1:
                case 7:
                    field.Type_2   = esriFieldType.esriFieldTypeString;
                    field.Length_2 = num4;
                    break;

                case 2:
                    field.Type_2      = esriFieldType.esriFieldTypeInteger;
                    field.Precision_2 = num4;
                    break;

                case 3:
                    field.Type_2      = esriFieldType.esriFieldTypeSmallInteger;
                    field.Precision_2 = num4;
                    break;

                case 4:
                    field.Type_2      = esriFieldType.esriFieldTypeDouble;
                    field.Precision_2 = num4;
                    field.Scale_2     = num5;
                    break;

                case 5:
                    field.Type_2      = esriFieldType.esriFieldTypeSingle;
                    field.Precision_2 = num4;
                    break;

                case 6:
                    field.Type_2 = esriFieldType.esriFieldTypeDate;
                    break;

                default:
                {
                    continue;
                }
                }
                ifieldsEdit_0.AddField(field);
            }
        }
コード例 #17
0
ファイル: NewFeatureClass.cs プロジェクト: sishui198/ArcGis-
        private void addField(IFieldsEdit xFieldsEdit, string fieldName)
        {
            IField     xField     = new FieldClass();
            IFieldEdit xFieldEdit = (IFieldEdit)xField;

            xFieldEdit.Name_2 = fieldName;
            //默认设置要素字段名
            xFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
            //数值精度
            xFieldEdit.Precision_2 = 7;
            xFieldEdit.Scale_2     = 3;
            xFieldsEdit.AddField(xField);
        }
コード例 #18
0
        /// <summary>
        /// 新建面图层
        /// </summary>
        public IFeatureClass CreatePolygonLayer(IPolygon polygon)
        {
            //LocalFilePath = sfdPoint.FileName;
            FilePath = Application.StartupPath + "\\tempSHP";
            FileName = "test";

            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.esriGeometryPolygon;
            pFieldEdit.GeometryDef_2        = pGeometryDef;
            pFieldsEdit.AddField(pField);

            pField            = new FieldClass();
            pFieldEdit        = pField as IFieldEdit;
            pFieldEdit.Name_2 = "HEIGHT";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFieldsEdit.AddField(pField);



            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(FilePath, 0) as IFeatureWorkspace;
            IFeatureClass     feaC     = pFeatureWorkspace.CreateFeatureClass(FileName, pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
            IFeature          pFeature = feaC.CreateFeature();

            pFeature.Shape = polygon as IGeometry;
            pFeature.Store();

            IFeatureCursor feaCur = feaC.Search(null, true);

            pFeature = feaCur.NextFeature();
            while (pFeature != null)
            {
                //pFeature.set_Value(2, "181");
                pFeature.Store();
                pFeature = feaCur.NextFeature();
            }

            //m_mapControl.AddShapeFile(FilePath, FileName);
            //m_mapControl.ActiveView.Refresh();
            return(feaC);
        }
コード例 #19
0
        public IFeatureClass CreateShapefile(string sParentDirectory, string sWorkspaceName, string sFileName)
        {
            if (System.IO.Directory.Exists(sParentDirectory + sWorkspaceName))
            {
                System.IO.Directory.Delete(sParentDirectory + sWorkspaceName, true);
            }

            IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
            IWorkspaceName    workspaceName    = workspaceFactory.Create(sParentDirectory, sWorkspaceName, null, 0);

            ESRI.ArcGIS.esriSystem.IName name = workspaceName as ESRI.ArcGIS.esriSystem.IName;
            IWorkspace workspace = (IWorkspace)name.Open();



            IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
            IFields           fields           = new FieldsClass();
            IFieldsEdit       fieldsEdit       = fields as IFieldsEdit;
            IFieldEdit        fieldEdit        = new FieldClass();

            fieldEdit.Name_2      = "OID";
            fieldEdit.AliasName_2 = "序号";
            fieldEdit.Type_2      = esriFieldType.esriFieldTypeOID;
            fieldsEdit.AddField((IField)fieldEdit);


            IGeometryDefEdit  geoDefEdit       = new GeometryDefClass();
            ISpatialReference spatialReference = m_map.SpatialReference;

            geoDefEdit.SpatialReference_2 = spatialReference;
            geoDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPolygon;

            fieldEdit = new FieldClass();
            string sShapeFieldName = "Shape";

            fieldEdit.Name_2        = sShapeFieldName;
            fieldEdit.AliasName_2   = "形状";
            fieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
            fieldEdit.GeometryDef_2 = geoDefEdit;
            fieldsEdit.AddField((IField)fieldEdit);

            IFeatureClass featureClass =
                featureWorkspace.CreateFeatureClass(sFileName, fields, null, null, esriFeatureType.esriFTSimple, "Shape", "");

            if (featureClass == null)
            {
                return(null);
            }

            return(featureClass);
        }
コード例 #20
0
ファイル: NetWorkAnalysClass.cs プロジェクト: crt106/WhuGIS
        /// <summary>
        /// 创建指定名称的FeatureClass 适用于创建Stops和Barriers
        /// </summary>
        /// <param name="workspace"></param>
        /// <param name="name"></param>
        /// <param name="spatialReference">与主窗体上的axMapcontrol的连接吧...</param>
        public static IFeatureClass CreateFeatureClass(IFeatureWorkspace workspace, string name, ISpatialReference spatialReference = null)
        {
            if (spatialReference == null)
            {
                spatialReference = ApplicationV.GlobalMapControl.ActiveView.FocusMap.SpatialReference;
            }

            //创建字段集
            IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();
            IObjectClassDescription  ocDescription = (IObjectClassDescription)fcDescription;

            //创建字段组
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

            IField     Field_OID      = new FieldClass();
            IFieldEdit Field_OID_EDIT = Field_OID as IFieldEdit;

            Field_OID_EDIT.Name_2       = "OBJECTID";
            Field_OID_EDIT.Type_2       = esriFieldType.esriFieldTypeOID;
            Field_OID_EDIT.IsNullable_2 = false;
            Field_OID_EDIT.Required_2   = false;
            pFieldsEdit.AddField(Field_OID);

            //创建一个必要的东西
            IGeometryDef     geoDef     = new GeometryDefClass();
            IGeometryDefEdit geoDefEdit = (IGeometryDefEdit)geoDef;

            geoDefEdit.AvgNumPoints_2     = 5;
            geoDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPoint;
            geoDefEdit.GridCount_2        = 1;
            geoDefEdit.HasM_2             = false;
            geoDefEdit.HasZ_2             = false;
            geoDefEdit.SpatialReference_2 = spatialReference;


            //创建SHAPE字段
            IField     Field_SHAPE      = new FieldClass();
            IFieldEdit pFieldEdit_SHAPE = (IFieldEdit)Field_SHAPE;

            pFieldEdit_SHAPE.Name_2        = "SHAPE";
            pFieldEdit_SHAPE.Type_2        = esriFieldType.esriFieldTypeGeometry;
            pFieldEdit_SHAPE.GeometryDef_2 = geoDef;

            //放入组
            pFieldsEdit.AddField(Field_SHAPE);


            //正式创建要素类
            return(workspace.CreateFeatureClass(name, pFields, ocDescription.ClassExtensionCLSID, ocDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, fcDescription.ShapeFieldName, ""));
        }
コード例 #21
0
ファイル: LogTable.cs プロジェクト: siszoey/geosufan
        public static bool CreateLogTable()
        {
            if (m_sysTable == null)
            {
                return(false);
            }
            //InitStaticFields();
            Exception err;
            ITable    pTable = m_sysTable.OpenTable(m_LogNAME, out err);

            if (pTable != null)
            {
                return(true);//若日志表已存在,返回true
            }
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
            IField      pField      = new FieldClass();
            IFieldEdit  pEdit       = pField as IFieldEdit;

            pEdit.Name_2   = "logTime";
            pEdit.Type_2   = esriFieldType.esriFieldTypeString;
            pEdit.Length_2 = 30;
            pFieldsEdit.AddField(pField);
            pField         = new FieldClass();
            pEdit          = pField as IFieldEdit;
            pEdit.Name_2   = "logUser";
            pEdit.Type_2   = esriFieldType.esriFieldTypeString;
            pEdit.Length_2 = 50;
            pFieldsEdit.AddField(pField);
            pField         = new FieldClass();
            pEdit          = pField as IFieldEdit;
            pEdit.Name_2   = "logIP";
            pEdit.Type_2   = esriFieldType.esriFieldTypeString;
            pEdit.Length_2 = 30;
            pFieldsEdit.AddField(pField);
            pField         = new FieldClass();
            pEdit          = pField as IFieldEdit;
            pEdit.Name_2   = "logEVENT";
            pEdit.Type_2   = esriFieldType.esriFieldTypeString;
            pEdit.Length_2 = 255;
            pFieldsEdit.AddField(pField);
            IFieldChecker pFieldChecker = new FieldCheckerClass();//检查字段有效性

            pFieldChecker.ValidateWorkspace = m_gisDb.WorkSpace;
            IFields         pValidFields = null;
            IEnumFieldError pEFE         = null;

            pFieldChecker.Validate(pFields, out pEFE, out pValidFields);
            return(m_sysTable.CreateTable(m_LogNAME, pValidFields, out err));
        }
コード例 #22
0
        /// <summary>
        /// 根据属性不同建立空的shp文件
        /// </summary>
        /// <param name="CADfeatureClass">待转换的CAD要素类</param>
        /// <param name="ShpPath">存储新建空shp文件的路径</param>
        /// <returns>返回创建好的FeatureClass列表</returns>
        private List <IFeatureClass> ExportFeatureClassByAtt(IFeatureClass CADfeatureClass, string ShpPath, List <string> FieldName)
        {
            List <string>            AttList      = new List <string>();
            List <IFeatureClass>     feaClassList = new List <IFeatureClass>();
            IFeatureClass            target_FeatureClass;
            ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            string s = CADfeatureClass.ShapeType.ToString();

            //定义属性字段
            DataManager DM          = new DataManager();
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;
            IField      pField      = new FieldClass();
            IFieldEdit  pFieldEdit  = (IFieldEdit)pField;

            //设置地理属性字段,点线面,空间参考等
            pFieldEdit.Name_2 = "shape";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
            IGeometryDef     pGeoDef     = new GeometryDefClass();
            IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit;

            pGeoDefEdit.GeometryType_2 = CADfeatureClass.ShapeType;
            pGeoDefEdit.HasM_2         = true;
            pGeoDefEdit.HasZ_2         = true;
            ISpatialReference spatialReference = DataManager.getSpatialReference(CADfeatureClass);

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

            //遍历各字段设置其他属性字段
            for (int i = 2; i < CADfeatureClass.Fields.FieldCount; i++)
            {
                pField                 = new FieldClass();
                pFieldEdit             = (IFieldEdit)pField;
                pFieldEdit.Name_2      = CADfeatureClass.Fields.Field[i].Name;
                pFieldEdit.AliasName_2 = CADfeatureClass.Fields.Field[i].AliasName;
                pFieldEdit.Type_2      = CADfeatureClass.Fields.Field[i].Type;
                pFieldsEdit.AddField(pField);
            }
            AttList = getUniqueValue(CADfeatureClass, "Layer");
            int n = FieldName.Count;

            for (int i = 0; i < n; i++)
            {
                //建立空的shapefile
                target_FeatureClass = DM.CreateVoidShp(ShpPath, FieldName[i], pFields, spatialReference);
                feaClassList.Add(target_FeatureClass);
            }
            return(feaClassList);
        }
コード例 #23
0
ファイル: data_operate.cs プロジェクト: Teyae/AE_DESKTOP
        //创建shapefile
        public IFeatureClass CreateShapefile(string shpPath, string shpName, ISpatialReference shpRef, string shpType) ///////////模式
        {
            IFeatureClass feaCls     = null;                                                                           ////////模式
            IFields       fields     = new Fields();
            IFieldsEdit   fieldsEdit = fields as IFieldsEdit;
            IField        field      = new Field();            //
            IFieldEdit    fieldEdit  = field as IFieldEdit;    //

            fieldEdit.Name_2 = "OID";                          //遵守规定。。。但是都有???
            fieldEdit.Type_2 = esriFieldType.esriFieldTypeOID; //
            fieldsEdit.AddField(field);                        //

            fieldEdit        = new FieldClass();
            fieldEdit.Name_2 = "NAME";                             //遵守规定。。。但是都有???
            fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            fieldsEdit.AddField(fieldEdit as IField);

            //定义一个图形shape字段,
            //先给出几何图形的定义,包括设置图形类型和空间参考
            IGeometryDefEdit geoDefEdit = new GeometryDefClass();

            if (shpType == "point")
            {
                geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
            }
            if (shpType == "polyline")
            {
                geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryLine;
            }
            if (shpType == "polygon")
            {
                geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
            }
            geoDefEdit.SpatialReference_2 = shpRef;                        //几何类型有空间参考属性
            fieldEdit               = new FieldClass();
            fieldEdit.Name_2        = "Shape";                             //遵守规定。。。但是都有???
            fieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry; //图形参考在这里定义 ,要说明几何类型
            fieldEdit.GeometryDef_2 = geoDefEdit as IGeometryDef;          //////!重头戏!真有趣啊      因为是几何类型,所以在字段编辑的属性再加上几何ref

            fieldsEdit.AddField(fieldEdit as IField);


            IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(shpPath, 0); //调用工厂的方法;
            IFeatureWorkspace shpWorkspace     = (IFeatureWorkspace)workspace;

            feaCls = shpWorkspace.CreateFeatureClass(shpName, fields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); //此处发现更替路径创建会报错

            return(feaCls);                                                                                                   //////////////模式
        }
コード例 #24
0
ファイル: FeatClsOperAPI.cs プロジェクト: zj8487/HyDM
        /// <summary>
        /// 创建shape图层
        /// </summary>
        /// <param name="strShpPath"></param>
        /// <param name="strFtName"></param>
        /// <returns></returns>
        public static IFeatureClass CreateShpFile(string strShpPath, string strFtName, string strAliasFtName, ISpatialReference pSpatial)
        {
            string             connectionstring = "DATABASE=" + strShpPath;
            IWorkspaceFactory2 pFactory         = (IWorkspaceFactory2) new ShapefileWorkspaceFactoryClass();
            IWorkspace         workspace        = pFactory.OpenFromString(connectionstring, 0);
            IFeatureWorkspace  ipFtWs           = (IFeatureWorkspace)workspace;

            //创建字段IFields
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;
            ///创建几何类型字段
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = (IFieldEdit)pField;

            ////设置FID字段
            //IFieldEdit ipFldEdit = new FieldClass(); //(__uuidof(Field));
            //ipFldEdit.Name_2 = "FID";
            //ipFldEdit.AliasName_2 = "唯一标志码";
            //ipFldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
            //pFieldsEdit.AddField(ipFldEdit);


            pFieldEdit.Name_2      = "Shape";
            pFieldEdit.AliasName_2 = "几何类型";
            pFieldEdit.Type_2      = esriFieldType.esriFieldTypeGeometry;


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

            pGeomDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPoint;
            pGeomDefEdit.SpatialReference_2 = pSpatial;
            pFieldEdit.GeometryDef_2        = pGeomDef;
            pFieldsEdit.AddField(pField);


            IFeatureClass _featureClass =
                ipFtWs.CreateFeatureClass(strFtName, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");

            //更新图层别名
            //IClassSchemaEdit ipEdit = (IClassSchemaEdit)_featureClass;
            //ipEdit.AlterAliasName(strAliasFtName);

            pFactory  = null;
            workspace = null;
            ipFtWs    = null;

            return(_featureClass);
        }
コード例 #25
0
        private IFeatureClass CreateShapeFile(string strOutFileSource, string strOutFileName, ISpatialReference spatialReference, esriGeometryType pGeometryType)
        {
            try
            {
                //Setting Output Data
                IWorkspaceFactory wsfOutput = new ShapefileWorkspaceFactoryClass();
                IWorkspace        wsOutput  = wsfOutput.OpenFromFile(strOutFileSource, 0);
                IFeatureWorkspace fwOutput  = wsOutput as IFeatureWorkspace;

                IFields     pFields     = new FieldsClass();
                IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;

                IField     oidField     = new FieldClass();
                IFieldEdit oidFieldEdit = (IFieldEdit)oidField;
                oidFieldEdit.Name_2 = "OID";
                oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
                pFieldsEdit.AddField(oidField);

                IGeometryDef     geometryDef     = new GeometryDefClass();
                IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
                geometryDefEdit.GeometryType_2 = pGeometryType;

                if (spatialReference != null)
                {
                    geometryDefEdit.SpatialReference_2 = spatialReference;
                }

                IField     geometryField     = new FieldClass();
                IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField;
                geometryFieldEdit.Name_2        = "Shape";
                geometryFieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
                geometryFieldEdit.GeometryDef_2 = geometryDef;
                pFieldsEdit.AddField(geometryField);

                IFieldChecker   fieldChecker    = new FieldCheckerClass();
                IEnumFieldError enumFieldError  = null;
                IFields         validatedFields = null;
                fieldChecker.ValidateWorkspace = (IWorkspace)fwOutput;
                fieldChecker.Validate(pFields, out enumFieldError, out validatedFields);

                IFeatureClass fcOutput = fwOutput.CreateFeatureClass(strOutFileName, validatedFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
                return(fcOutput);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fail to create a new shapefile.");
                return(null);
            }
        }
コード例 #26
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;
            fieldsEdit.AddField(field1);

            return(requiredFields);
        }
コード例 #27
0
        public IFeatureClass CreateFeatureClassToAccessDB(string featureClassName, UID classExtensionUID, IFeatureWorkspace featureWorkspace)
        {
            //创建字段集合
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

            //定义单个的字段
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = (IFieldEdit)pField;

            pFieldEdit.Name_2 = "OID";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
            pFieldsEdit.AddField(pField);
            //为要素类创建几何定义和空间参考
            IGeometryDef     geometryDef = new GeometryDefClass();
            IGeometryDefEdit pGeoDefEdit = geometryDef as IGeometryDefEdit;

            pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;  //指定创建的要素类的要素类型
            ISpatialReferenceFactory    spatialReferenceFactory    = new SpatialReferenceEnvironmentClass();
            ISpatialReference           spatialReference           = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Beijing1954);
            ISpatialReferenceResolution spatialReferenceResolution = (ISpatialReferenceResolution)spatialReference;

            spatialReferenceResolution.ConstructFromHorizon();
            ISpatialReferenceTolerance spatialReferenceTolerance = (ISpatialReferenceTolerance)spatialReference;

            spatialReferenceTolerance.SetDefaultXYTolerance();

            pGeoDefEdit.SpatialReference_2 = spatialReference;  //设置要素类的空间参考
            //将几何字段添加到字段集合
            IField     geometryField     = new FieldClass();
            IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField;

            geometryFieldEdit.Name_2        = "shape";
            geometryFieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
            geometryFieldEdit.GeometryDef_2 = geometryDef;
            pFieldsEdit.AddField(geometryField);
            //创建字段name
            IField     nameField     = new FieldClass();
            IFieldEdit nameFieldEdit = (IFieldEdit)nameField;

            nameFieldEdit.Name_2   = "Name";
            nameFieldEdit.Type_2   = esriFieldType.esriFieldTypeString;
            nameFieldEdit.Length_2 = 20;
            pFieldsEdit.AddField(nameField);
            IFeatureClass featureClass = featureWorkspace.CreateFeatureClass(featureClassName, pFields, null, classExtensionUID, esriFeatureType.esriFTSimple, "Shape", "");

            return(featureClass);
        }
コード例 #28
0
        /// <summary>
        /// 创建要素类
        /// </summary>
        /// <param name="featureWorkspace"></param>
        /// <param name="name"></param>
        /// <param name="esriGeometryType"></param>
        /// <param name="fielddict"></param>
        /// <returns></returns>
        public static IFeatureClass CreateFeatureClass(IFeatureWorkspace featureWorkspace, string name, esriGeometryType esriGeometryType, Dictionary <string, GISField> fielddict)
        {
            IFields     fields     = new FieldsClass();
            IFieldsEdit fieldsedit = fields as IFieldsEdit;
            IField      field      = new FieldClass();
            IFieldEdit  fieldedit  = field as IFieldEdit;

            fieldedit.Name_2 = "shape";
            fieldedit.Type_2 = esriFieldType.esriFieldTypeGeometry;
            IGeometryDef     geometryDef      = new GeometryDefClass();
            IGeometryDefEdit pGeometryDefEdit = geometryDef as IGeometryDefEdit;

            pGeometryDefEdit.GeometryType_2 = esriGeometryType;

            ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            ISpatialReference        pSpatialReference        = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);

            pSpatialReference.SetDomain(-6000000, 6000000, -6000000, 6000000);
            pGeometryDefEdit.SpatialReference_2 = pSpatialReference;
            fieldedit.GeometryDef_2             = geometryDef;
            fieldsedit.AddField(field);

            field            = new FieldClass();
            fieldedit        = field as IFieldEdit;
            fieldedit.Name_2 = "FID";
            fieldedit.Type_2 = esriFieldType.esriFieldTypeOID;
            fieldsedit.AddField(field);

            foreach (var entry in fielddict)
            {
                if (entry.Key.ToUpper() == "SHAPE" || entry.Key.ToUpper() == "OBJECTID")
                {
                    continue;
                }
                field            = new FieldClass();
                fieldedit        = field as IFieldEdit;
                fieldedit.Name_2 = entry.Key;
                fieldedit.Type_2 = entry.Value.Type;
                fieldsedit.AddField(field);
            }


            IFeatureClassDescription featureClassDescription = new FeatureClassDescriptionClass();
            IObjectClassDescription  objectClassDescription  = featureClassDescription as IObjectClassDescription;
            IFeatureClass            featureClass            = featureWorkspace.CreateFeatureClass(name, fields, objectClassDescription.InstanceCLSID, objectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, "shape", "");

            return(featureClass);
        }
コード例 #29
0
        public static void createSpatialIndex(IFeatureClass fc, double gridOneSize = 0.0, double gridTwoSize = 0.0, double gridThreeSize = 0.0)
        {
            String shapeFieldName = fc.ShapeFieldName;

            // Clone the shape field from the feature class.
            int     shapeFieldIndex  = fc.FindField(shapeFieldName);
            IFields fields           = fc.Fields;
            IField  sourceField      = fields.get_Field(shapeFieldIndex);
            IClone  sourceFieldClone = (IClone)sourceField;
            IClone  targetFieldClone = sourceFieldClone.Clone();
            IField  targetField      = (IField)targetFieldClone;

            // Open the geometry definition from the cloned field and modify it.
            IGeometryDef     geometryDef     = targetField.GeometryDef;
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

            if (gridTwoSize > 0.0)
            {
                geometryDefEdit.GridCount_2 = 1;
                geometryDefEdit.set_GridSize(0, gridOneSize);
            }
            if (gridTwoSize > 0.0)
            {
                geometryDefEdit.GridCount_2 = 2;
                geometryDefEdit.set_GridSize(1, gridTwoSize);
            }
            if (gridThreeSize > 0.0)
            {
                geometryDefEdit.GridCount_2 = 3;
                geometryDefEdit.set_GridSize(2, gridThreeSize);
            }

            // Create a spatial index and set the required attributes.
            IIndex     newIndex     = new IndexClass();
            IIndexEdit newIndexEdit = (IIndexEdit)newIndex;

            newIndexEdit.Name_2 = shapeFieldName + "_Indx";

            // Create a fields collection and assign it to the new index.
            IFields     newIndexFields     = new FieldsClass();
            IFieldsEdit newIndexFieldsEdit = (IFieldsEdit)newIndexFields;

            newIndexFieldsEdit.AddField(targetField);
            newIndexEdit.Fields_2 = newIndexFields;

            // Add the spatial index back into the feature class.
            fc.AddIndex(newIndex);
        }
コード例 #30
0
        private IFields CloneFeatureClassFields(IFeatureClass pFeatureClass, IEnvelope pDomainEnv)
        {
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;
            //根据传入的要素类,将除了shape字段之外的字段复制
            long nOldFieldsCount = pFeatureClass.Fields.FieldCount;
            long nOldGeoIndex    = pFeatureClass.Fields.FindField(pFeatureClass.ShapeFieldName);

            for (int i = 0; i < nOldFieldsCount; i++)
            {
                if (i != nOldGeoIndex)
                {
                    pFieldsEdit.AddField(pFeatureClass.Fields.get_Field(i));
                }
                else
                {
                    IGeometryDef      pGeomDef     = new GeometryDefClass();
                    IGeometryDefEdit  pGeomDefEdit = (IGeometryDefEdit)pGeomDef;
                    ISpatialReference pSR          = null;
                    if (pDomainEnv != null)
                    {
                        pSR = new UnknownCoordinateSystemClass();
                        pSR.SetDomain(pDomainEnv.XMin, pDomainEnv.XMax, pDomainEnv.YMin, pDomainEnv.YMax);
                    }
                    else
                    {
                        IGeoDataset pGeoDataset = pFeatureClass as IGeoDataset;
                        pSR = CloneSpatialReference(pGeoDataset.SpatialReference);
                    }
                    //设置新要素类Geometry的参数
                    pGeomDefEdit.GeometryType_2 = pFeatureClass.ShapeType;
                    pGeomDefEdit.GridCount_2    = 1;
                    pGeomDefEdit.set_GridSize(0, 10);
                    pGeomDefEdit.AvgNumPoints_2     = 2;
                    pGeomDefEdit.SpatialReference_2 = pSR;
                    //产生新的shape字段
                    IField     pField     = new FieldClass();
                    IFieldEdit pFieldEdit = (IFieldEdit)pField;
                    pFieldEdit.Name_2        = "shape";
                    pFieldEdit.AliasName_2   = "shape";
                    pFieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
                    pFieldEdit.GeometryDef_2 = pGeomDef;
                    pFieldsEdit.AddField(pField);
                }
            }
            return(pFields);
        }
コード例 #31
0
 /// <summary>
 /// add feature feild of each feature
 /// </summary>
 /// <param name="fieldName"></param>
 /// <param name="aliasName"></param>
 /// <param name="type"></param>
 /// <param name="fieldsEdit"></param>
 private void addFeatureFeild(string fieldName, string aliasName, esriFieldType type, IFieldsEdit fieldsEdit)
 {
     IField field = new FieldClass();
     IFieldEdit fieldEdit = (IFieldEdit)field;
     fieldEdit.Name_2 = fieldName;
     fieldEdit.Type_2 = type;
     fieldEdit.AliasName_2 = aliasName;
     fieldsEdit.AddField(field);
 }
コード例 #32
0
ファイル: GDBData.cs プロジェクト: chinasio/minegis
 private void AddSimpleField(IFieldsEdit fieldsEdit,esriFieldType type,string name,string aliasName)
 {
     IField field = new FieldClass();
     IFieldEdit fieldEdit = field as IFieldEdit;
     fieldEdit.Type_2 = type;
     fieldEdit.Name_2 = name;
     fieldEdit.AliasName_2 = aliasName;
     fieldsEdit.AddField(field);
 }