/// <summary> 
        /// Create the polyline feature class 
        /// </summary> 
        /// <param name="featWorkspace">IFeatureWorkspace</param> 
        /// <param name="name">Name of the featureclass</param> 
        /// <returns>IFeatureClass</returns> 
        private IFeatureClass CreatePolylineFeatureClass(IFeatureWorkspace featWorkspace, string name)
        {
            IFieldsEdit pFldsEdt = new FieldsClass();
            IFieldEdit pFldEdt = new FieldClass();

            pFldEdt = new FieldClass();
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeOID;
            pFldEdt.Name_2 = "OBJECTID";
            pFldEdt.AliasName_2 = "OBJECTID";
            pFldsEdt.AddField(pFldEdt);

            IGeometryDefEdit pGeoDef;
            pGeoDef = new GeometryDefClass();
            pGeoDef.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
            pGeoDef.SpatialReference_2 = ArcMap.Document.FocusMap.SpatialReference;

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "SHAPE";
            pFldEdt.AliasName_2 = "SHAPE";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeGeometry;
            pFldEdt.GeometryDef_2 = pGeoDef;
            pFldsEdt.AddField(pFldEdt);

            IFeatureClass pFClass = featWorkspace.CreateFeatureClass(name, pFldsEdt, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");

            return pFClass;
        }
        /// <summary>
        /// Coder:  梁  爽
        /// Date:   2008-10-16
        /// Content:该函数实现要素类的创建,首先用接口IGeometryDefEdit设置要素类的类型,即是Point,Polylin还是Polygon
        ///         然后用接口IFieldEdit设置要素类的字段,这里设置了三个字段,分别是ID,OID和Shape。最后通过接口IFeatureWorkspace
        ///         的CreateFeatureClass方法创建要素类,函数返回IFeatureClass接口类型
        /// </summary>
        /// <param name="pWorkspace">设置工作空间</param>
        /// <param name="pGeometryType">设置要素的类型,即是点,线,还是面</param>
        /// <param name="strFeatName">设置要素类的名称</param>
        /// <param name="ValCoordinatType">传递一个数值型参数,该参数为1-UnkownCoordinateSystem,2-GeographicCoordinateSystem
        ///            或3ProjectedCoordinateSystem</param>
        /// <returns></returns>
        private IFeatureClass CreateFeatureClass(esriGeometryType pesriGeometryType, string pstrLayerName,
                                                 IWorkspace pWorkspace, IMapControl4 pm_mapControl, List <string> pstrFieldNameLt = null, List <esriFieldType> pesriFieldTypeLt = null)
        {
            //创建要素空间
            IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;
            IGeometryDef      geometryDef       = new GeometryDefClass();
            IGeometryDefEdit  pGeometryDefEdit  = (IGeometryDefEdit)geometryDef;

            //_esriGeometryType could be: esriGeometryPoint, esriGeometryMultipoint,
            //esriGeometryPolyline, esriGeometryPolygon, and esriGeometryMultiPatch.
            pGeometryDefEdit.GeometryType_2     = pesriGeometryType;
            pGeometryDefEdit.SpatialReference_2 = pm_mapControl.SpatialReference;
            // Set the grid count to 1 and the grid size to 0 to allow ArcGIS to
            // determine a valid grid size.
            pGeometryDefEdit.GridCount_2 = 1;
            pGeometryDefEdit.set_GridSize(0, 0);

            //新建字段
            IFieldsEdit pFieldsEdit = new FieldsClass();
            //添加“Shape”字段
            IFieldEdit pField;

            pField               = new FieldClass();
            pField.Type_2        = esriFieldType.esriFieldTypeGeometry;
            pField.GeometryDef_2 = geometryDef;
            pField.Name_2        = "Shape";
            pFieldsEdit.AddField((IField)pField);
            //添加其它字段
            if (pstrFieldNameLt != null)
            {
                //we don't need the first three FieldNames, i.e., "FID", "Shape", and "Id"
                for (int i = 0; i < pstrFieldNameLt.Count; i++)
                {
                    pFieldsEdit.AddField((IField)GenerateFieldEdit(pesriFieldTypeLt[i], pstrFieldNameLt[i]));
                }
            }


            string strFullName = pWorkspace.PathName + "\\" + pstrLayerName;

            File.Delete(strFullName + ".dbf");
            File.Delete(strFullName + ".lyr");
            File.Delete(strFullName + ".prj");
            File.Delete(strFullName + ".shp");
            //File.Delete(strFullName + ".shp.PALANQUE.2296.5388.sr.lock");
            File.Delete(strFullName + ".shx");

            try
            {
                return(pFeatureWorkspace.CreateFeatureClass(pstrLayerName,
                                                            (IFields)pFieldsEdit, null, null, esriFeatureType.esriFTSimple, "Shape&quot;", ""));
            }
            catch
            {
                return(pFeatureWorkspace.CreateFeatureClass(pstrLayerName,
                                                            (IFields)pFieldsEdit, null, null, esriFeatureType.esriFTSimple, "Shape", ""));
            }
        }
Beispiel #3
0
        public static IFeatureClass CreateFeatureClassByAxfFeatureLayer(IWorkspace workspace, IFeatureLayer axfFeatureLayer, bool isConvertToPoint = false, string className = "")
        {
            IFeatureWorkspace pFeatureWorkspace = workspace as IFeatureWorkspace;

            if (pFeatureWorkspace == null)
            {
                return(null);
            }
            IFields pFields = GetFields(axfFeatureLayer.FeatureClass);

            if (pFields == null)
            {
                return(null);
            }
            IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;

            if (pFieldsEdit == null)
            {
                return(null);
            }
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = pField as IFieldEdit;

            pFieldEdit.Name_2 = "AXF_STATUS";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
            pFieldsEdit.AddField(pField);
            if (isConvertToPoint && axfFeatureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryMultipoint)
            {
                for (int i = 0; i < pFieldsEdit.FieldCount; i++)
                {
                    if (pFieldsEdit.Field[i].Type == esriFieldType.esriFieldTypeGeometry)
                    {
                        IFieldEdit       geoFieldEdit     = pFieldsEdit.Field[i] as IFieldEdit;
                        IGeometryDefEdit pGeometryDefEdit = geoFieldEdit.GeometryDef as IGeometryDefEdit;
                        pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
                        geoFieldEdit.GeometryDef_2      = pGeometryDefEdit;
                    }
                }
            }
            IFieldChecker   pFieldChecker   = new FieldCheckerClass();
            IEnumFieldError pEnumFieldError = null;
            IFields         validateFields  = null;

            pFieldChecker.ValidateWorkspace = workspace;
            pFieldChecker.Validate(pFieldsEdit, out pEnumFieldError, out validateFields);
            if (string.IsNullOrEmpty(className))
            {
                return(pFeatureWorkspace.CreateFeatureClass(className, validateFields, axfFeatureLayer.FeatureClass.CLSID,
                                                            axfFeatureLayer.FeatureClass.EXTCLSID, axfFeatureLayer.FeatureClass.FeatureType, "SHAPE", null));
            }
            else
            {
                return(pFeatureWorkspace.CreateFeatureClass(axfFeatureLayer.Name, validateFields, axfFeatureLayer.FeatureClass.CLSID,
                                                            axfFeatureLayer.FeatureClass.EXTCLSID, axfFeatureLayer.FeatureClass.FeatureType, "SHAPE", null));
            }
        }
Beispiel #4
0
        private static IFeatureClass CreateFeaturepointClass(String featureClassName, IFeatureWorkspace featureWorkspace, ISpatialReference spatialReference)
        {
            try
            {
                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     = esriGeometryType.esriGeometryPoint;
                geometryDefEdit.SpatialReference_2 = spatialReference;

                IFeatureClass featureClass = featureWorkspace.CreateFeatureClass(featureClassName, fields,
                                                                                 ocDescription.ClassExtensionCLSID, ocDescription.InstanceCLSID, esriFeatureType.esriFTSimple,
                                                                                 fcDescription.ShapeFieldName, "");
                return(featureClass);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "异常");
                return(null);
            }
        }
 /// <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>
 /// 在内存中创建要素类
 /// </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;
 }
Beispiel #7
0
        public static IFeatureClass CreateFeatureClass(IWorkspace workspace, string featureClassName, esriGeometryType type, ISpatialReference spatialReference)
        {
            IFeatureWorkspace        pFeatureWorkspace        = workspace as IFeatureWorkspace;
            IFeatureClassDescription pFeatureClassDescription = new FeatureClassDescriptionClass();
            IObjectClassDescription  pObjectClassDescription  = pFeatureClassDescription as IObjectClassDescription;
            IFields     pFields     = pObjectClassDescription.RequiredFields;
            IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;

            for (int i = 0; i < pFields.FieldCount; i++)
            {
                if (pFieldsEdit.Field[i].Type == esriFieldType.esriFieldTypeGeometry)
                {
                    IFieldEdit       pFieldEdit       = pFieldsEdit.Field[i] as IFieldEdit;
                    IGeometryDef     pGeometryDef     = new GeometryDefClass();
                    IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
                    pGeometryDefEdit.GeometryType_2     = type;
                    pGeometryDefEdit.SpatialReference_2 = spatialReference;
                    pFieldEdit.GeometryDef_2            = pGeometryDef;
                }
            }

            IFieldChecker   pFieldChecker   = new FieldCheckerClass();
            IEnumFieldError enumFieldError  = null;
            IFields         validatedFields = null;

            pFieldChecker.ValidateWorkspace = workspace;
            pFieldChecker.Validate(pFields, out enumFieldError, out validatedFields);

            return(pFeatureWorkspace.CreateFeatureClass(featureClassName, validatedFields,
                                                        pObjectClassDescription.InstanceCLSID, pObjectClassDescription.ClassExtensionCLSID,
                                                        esriFeatureType.esriFTSimple, "SHAPE", ""));
        }
Beispiel #8
0
        //http://resources.esri.com/help/9.3/arcgisengine/arcobjects/esriGeoDatabase/IFeatureWorkspace.CreateFeatureClass_Example.htm
        static IFeatureClass CreateFeatureClass(string name, IFeatureWorkspace ftrSpc, esriGeometryType type, int epsg, List <dynamic> extraFields)
        {
            IFeatureClass ftrc = null;

            if (null != ftrSpc && null != name)
            {
                IFieldsEdit flds = new FieldsClass();
                flds.FieldCount_2 = 2 + (extraFields == null ? 0 : extraFields.Count);

                IFieldEdit fld = new FieldClass();
                fld.Name_2      = OBJECT_ID;
                fld.Type_2      = esriFieldType.esriFieldTypeOID;
                flds.Field_2[0] = fld;

                fld               = new FieldClass();
                fld.Name_2        = SHP_NAME;
                fld.Type_2        = esriFieldType.esriFieldTypeGeometry;
                fld.GeometryDef_2 = CreateGeometryDef(type, epsg);
                flds.Field_2[1]   = fld;
                int eidx = 2;
                foreach (var efld in extraFields)
                {
                    fld                  = new FieldClass();
                    fld.Name_2           = efld.Name;
                    fld.Type_2           = efld.Type;
                    flds.Field_2[eidx++] = fld;
                }
                ftrc = ftrSpc.CreateFeatureClass(name, flds, null, null, esriFeatureType.esriFTSimple, SHP_NAME, null);
            }
            return(ftrc);
        }
Beispiel #9
0
        /// <summary>
        /// Converts  the spatialite table to a featureclass in a temporary, scratch workspace.
        /// </summary>
        /// <returns>IFeatureClass copy of the spatialite table</returns>
        public IFeatureClass ConvertToFeatureclass()
        {
            try
            {
                CreateTemporaryGeodatabase();

                IWorkspaceFactory factory   = new AccessWorkspaceFactoryClass();
                IWorkspace        workspace = factory.OpenFromFile(this.PGDBPath, 0);

                IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;

                IFields fields = CreateFields();

                // Use IFieldChecker to create a validated fields collection.
                IFieldChecker   fieldChecker    = new FieldCheckerClass();
                IEnumFieldError enumFieldError  = null;
                IFields         validatedFields = null;
                fieldChecker.ValidateWorkspace = (IWorkspace)featureWorkspace;
                fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

                IFeatureClass featureClass = featureWorkspace.CreateFeatureClass(this.TableName, validatedFields,
                                                                                 null, null, esriFeatureType.esriFTSimple, "Shape", "");

                LoadFeatureclass(featureClass);

                return(featureClass);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.StackTrace);
                throw;
            }
        }
Beispiel #10
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();
            }
        }
Beispiel #11
0
        private IFeatureClass CreateFeatureClass(IFeatureWorkspace FeatureWorkspace, string LayerName, esriFeatureType featureType, esriGeometryType GeometryType)
        {
            IFields     fields = new FieldsClass();
            IFieldsEdit edit   = fields as IFieldsEdit;

            //创建OBJECTID字段
            IField     field3 = new FieldClass();
            IFieldEdit edit2  = field3 as IFieldEdit;

            edit2.Name_2      = "OBJECTID";
            edit2.AliasName_2 = "OBJECTID";
            edit2.Type_2      = esriFieldType.esriFieldTypeOID;
            edit.AddField(field3);

            //创建Shape字段
            IGeometryDef     def   = new GeometryDefClass();
            IGeometryDefEdit edit4 = def as IGeometryDefEdit;

            edit4.GeometryType_2 = GeometryType;
            edit4.GridCount_2    = 1;
            edit4.set_GridSize(0, 1000);
            edit4.AvgNumPoints_2     = 2;
            edit4.HasM_2             = false;
            edit4.HasZ_2             = false;
            edit4.SpatialReference_2 = this.ExportSpatialReference;

            IField     field4 = new FieldClass();
            IFieldEdit edit3  = field4 as IFieldEdit;

            edit3.Name_2        = "SHAPE";
            edit3.AliasName_2   = "SHAPE";
            edit3.Type_2        = esriFieldType.esriFieldTypeGeometry;
            edit3.GeometryDef_2 = def;
            edit.AddField(field4);

            string ShapeFiledName = field4.Name;

            UID uid  = null;
            UID uid2 = null;

            switch (featureType)
            {
            case esriFeatureType.esriFTSimple:       //FeatureClass
                IObjectClassDescription description4 = new FeatureClassDescriptionClass();
                uid  = description4.InstanceCLSID;
                uid2 = description4.ClassExtensionCLSID;
                break;

            case esriFeatureType.esriFTAnnotation:     //AnnotationFeatureClass
                IObjectClassDescription description = new AnnotationFeatureClassDescriptionClass();
                uid          = description.InstanceCLSID;
                uid2         = description.ClassExtensionCLSID;
                GeometryType = esriGeometryType.esriGeometryPolygon;
                break;
            }
            //创建要素对象
            IFeatureClass fc = FeatureWorkspace.CreateFeatureClass(LayerName, fields, uid, uid2, featureType, ShapeFiledName, null);

            return(fc);
        }
Beispiel #12
0
        /// <summary>
        /// 创建要素类,该要素类仅存储在内存中
        /// </summary>
        /// <param name="name">要素类名称</param>
        /// <param name="fields">要创建的字段集(必须包含SHAPE字段和OID字段),可参考<see cref="FieldOpt.CreateBaseFields"/>等方法创建字段集</param>
        /// <param name="strWorkspaceName">内存工作空间的名称</param>
        /// <returns></returns>
        public static IFeatureClass CreateInMemory(string name, IFields fields, string strWorkspaceName = "InMemoryWorkspace")
        {
            var workspace = WorkspaceEx.NewInMemoryWorkspace(strWorkspaceName);
            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;

            return(featureWorkspace.CreateFeatureClass(name, fields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""));
        }
Beispiel #13
0
        public static IFeatureClass CreateFeatureClass(IWorkspace workspace, string datasetname, string name, IFeatureClass refFeatureClass)
        {
            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
            string            username         = null;
            string            checkname        = null;

            try
            {
                username  = workspace.ConnectionProperties.ToDictionary()["USERNAME"].ToString();
                checkname = $"{username}.{name}";
            }
            catch (Exception)
            {
                checkname = name;
                //throw;
            }

            var           exist = CheckFeatureClassExist(checkname, workspace);
            IFeatureClass createdFeatureClass;

            if (!exist)
            {
                createdFeatureClass = featureWorkspace.CreateFeatureClass($"{name}", refFeatureClass.Fields, null, null, refFeatureClass.FeatureType, refFeatureClass.ShapeFieldName, "");
                return(createdFeatureClass);
            }

            throw new NotImplementedException();
        }
 /// <summary>
 /// 将IFeatureCursor保存到指定工作空间的指定表
 /// </summary>
 /// <param name="cursor"></param>
 /// <param name="workspace"></param>
 /// <param name="layername"></param>
 /// <param name="clearReords">是否清空原图层的数据</param>
 /// <param name="type"></param>
 /// <param name="ShapeFieldName"></param>
 /// <param name="ConfigKeyword"></param>
 /// <returns></returns>
 public static IFeatureClass SaveToWorkspace(this IFeatureCursor cursor, IFeatureWorkspace workspace, string layername
                                             , bool clearReords      = false
                                             , esriFeatureType type  = esriFeatureType.esriFTSimple
                                             , string ShapeFieldName = "SHAPE"
                                             , string ConfigKeyword  = "")
 {
     try
     {
         IFeatureClass featureClass = workspace.TryOpenFeatureClass(layername);
         if (featureClass == null)
         {
             IFields fields = cursor.Fields.Clone();
             featureClass = workspace.CreateFeatureClass(layername, fields, type, ShapeFieldName, ConfigKeyword);
         }
         else
         {
             if (clearReords)
             {
                 featureClass.Delete();
             }
         }
         cursor.SaveToFeatureClass(featureClass);
         return(featureClass);
     }
     catch
     {
         return(null);
     }
 }
Beispiel #15
0
        /// <summary>
        /// 创建矢量数据
        /// </summary>
        /// <param name="pWorkspace"></param>
        /// <returns></returns>
        public IFeatureClass CreateFeatureClassClass(IWorkspace pWorkspace, string strName, string strAliasName, IFields fields)
        {
            if (pWorkspace == null)
            {
                return(null);
            }
            IFeatureWorkspace featureWorkspace = pWorkspace as IFeatureWorkspace;

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

            IFeatureClass featureClass = null;

            try
            {
                featureClass = featureWorkspace.CreateFeatureClass(strName, fields, null, null, esriFeatureType.esriFTSimple, "SHAPE", null);
                if (!string.IsNullOrEmpty(strAliasName))
                {
                    IClassSchemaEdit classSchemaEdit = featureClass as IClassSchemaEdit;
                    if (null != classSchemaEdit)
                    {
                        classSchemaEdit.AlterAliasName(strAliasName);
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(featureClass);
        }
Beispiel #16
0
        static IFeatureClass CreateFeatureClass(IFeatureWorkspace workspace, string name, ISpatialReference outSR)
        {
            IFieldsEdit fields = new FieldsClass();

            IFieldEdit field = new FieldClass();
            field.Type_2 = esriFieldType.esriFieldTypeOID;
            field.Name_2 = "OBJECTID";
            field.AliasName_2 = "OBJECTID";
            fields.AddField(field);

            IGeometryDefEdit geom = new GeometryDefClass();
            geom.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
            geom.SpatialReference_2 = outSR;
            geom.HasM_2 = true;
            geom.HasZ_2 = false;

            field = new FieldClass();
            field.Name_2 = "SHAPE";
            field.AliasName_2 = "SHAPE";
            field.Type_2 = esriFieldType.esriFieldTypeGeometry;
            field.GeometryDef_2 = geom;
            fields.AddField(field);

            return workspace.CreateFeatureClass(name, fields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
        }
        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));
        }
Beispiel #18
0
        private void Btn_ExportSelection_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog()
            {
                Filter = "Shapefile|*.shp",
            };

            if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                IWorkspaceFactory factory         = new ShapefileWorkspaceFactoryClass();
                IFeatureWorkspace tempWorkspace   = factory.OpenFromFile(sfd.FileName.Substring(0, sfd.FileName.LastIndexOf('\\')), 0) as IFeatureWorkspace;
                IFeatureClass     curFeatureClass = (m_selectedLayer as IFeatureLayer).FeatureClass;
                IFeatureClass     newFeatureClass = tempWorkspace.CreateFeatureClass("result", curFeatureClass.Fields, null, null, esriFeatureType.esriFTSimple, curFeatureClass.ShapeFieldName, "");
                ICursor           cursor;
                (m_selectedLayer as IFeatureSelection).SelectionSet.Search(null, true, out cursor);
                IFeatureCursor featureCursor = cursor as IFeatureCursor;
                IFeature       curFeature    = featureCursor.NextFeature();
                while (curFeature != null)
                {
                    IFeature newFeature = newFeatureClass.CreateFeature();
                    for (int i = 0; i < newFeatureClass.Fields.FieldCount; i++)
                    {
                        IField curField = newFeatureClass.Fields.get_Field(i);
                        if (curField.Type != esriFieldType.esriFieldTypeOID)
                        {
                            newFeature.set_Value(i, curFeature.get_Value(i));
                        }
                    }
                    newFeature.Store();
                    curFeature = featureCursor.NextFeature();
                }
            }
        }
        public IFeatureClass CreateFeatureClass()
        {
            IFeatureClass result     = null;
            IFieldsEdit   fieldsEdit = new FieldsClass();

            fieldsEdit = CreateField(fieldsEdit, "ObjectId", esriFieldType.esriFieldTypeOID);

            IMappedFeature   mapFeature               = CreateMappedFeature(null);
            esriGeometryType esriGeometryType         = mapFeature.EsriGeometryType;
            Dictionary <string, esriFieldType> fields = mapFeature.Fields;

            if ((esriGeometryType != esriGeometryType.esriGeometryNull) && (fields.Count >= 1))
            {
                string            shapeFieldName   = mapFeature.ShapeFieldName;
                ISpatialReference spatialReference = ArcUtils.SpatialReference;
                fieldsEdit = CreateGeometryField(fieldsEdit, shapeFieldName, spatialReference, esriGeometryType);
                fieldsEdit = fields.Aggregate(fieldsEdit, (current, field) => CreateField(current, field.Key, field.Value));

                foreach (var fieldName in FieldNames)
                {
                    if ((!string.IsNullOrEmpty(fieldName)) &&
                        (!fields.Aggregate(false, (current, field) => (field.Key == fieldName) || current)))
                    {
                        CreateField(fieldsEdit, fieldName, esriFieldType.esriFieldTypeString);
                    }
                }

                IFeatureWorkspace featureWorkspace = _cycloMediaGroupLayer.FeatureWorkspace;
                result = featureWorkspace.CreateFeatureClass(FcName, fieldsEdit, null, null, esriFeatureType.esriFTSimple,
                                                             shapeFieldName, string.Empty);
            }

            return(result);
        }
Beispiel #20
0
        /// <summary>
        /// 创建一个要素集
        /// </summary>
        /// <param name="shpfolder"></param>
        /// <param name="shpname"></param>
        /// <returns></returns>
        public static IFeatureClass CreatePolygonFeatureClass(string shpfolder, string shpname)
        {
            IWorkspaceFactory pWorkSpaceFac     = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace pFeatureWorkSpace = pWorkSpaceFac.OpenFromFile(shpfolder, 0) as IFeatureWorkspace;

            //创建字段集2
            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 = esriGeometryType.esriGeometryPoint;
            //geometryDefEdit.SpatialReference_2 = spatialReference;

            geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
            ISpatialReferenceFactory   pSpatialRefFac = new SpatialReferenceEnvironmentClass();
            IProjectedCoordinateSystem pcsSys         = pSpatialRefFac.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Xian1980_3_Degree_GK_Zone_39);

            geometryDefEdit.SpatialReference_2 = pcsSys;

            IFieldChecker   fieldChecker    = new FieldCheckerClass();
            IEnumFieldError enumFieldError  = null;
            IFields         validatedFields = null; //将传入字段 转成 validatedFields

            fieldChecker.ValidateWorkspace = (IWorkspace)pFeatureWorkSpace;
            fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

            IFeatureClass featureClass = pFeatureWorkSpace.CreateFeatureClass(shpname, validatedFields, ocDescription.InstanceCLSID, ocDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, fcDescription.ShapeFieldName, "");

            AddField(featureClass, "BuildID", "自带id", 50);
            return(featureClass);
        }
        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);
            }
        }
        public IFeatureLayer  CreateLayer(IFeatureClass pFeatureClass, int index)  //新建任意范围打印地图的图层
        {
            string FilePath = @"C:\任意打印\";
            string FileName = "bb" + index.ToString();
            /////////////////////////////////////////////////
            // ILayerFile layerFile = new LayerFileClass();

            // layerFile.New(FilePath + FileName);

            /////////////////////////////////////////////


            IFields           pFields        = pFeatureClass.Fields;
            IClone            pClone         = pFields as IClone;
            IFields           pCloneFields   = pClone.Clone() as IFields;
            IDataset          pDataSet       = pFeatureClass as IDataset;
            IWorkspace        pWorkSpace     = pDataSet.Workspace;
            IFeatureWorkspace pFeatWorkspace = pWorkSpace as IFeatureWorkspace;

            IFeatureClass newFeatcls = pFeatWorkspace.CreateFeatureClass(FileName, pCloneFields,
                                                                         null, null, esriFeatureType.esriFTSimple, pFeatureClass.ShapeFieldName, "");
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();

            pFeatureLayer.FeatureClass = newFeatcls;
            pFeatureLayer.Name         = newFeatcls.AliasName;

            return(pFeatureLayer);

            // System.Runtime.InteropServices.Marshal.ReleaseComObject(FilePath);
            // System.Runtime.InteropServices.Marshal.ReleaseComObject(FileName );
            // System.Runtime.InteropServices.Marshal.ReleaseComObject(pFields );
            //System.Runtime.InteropServices.Marshal.ReleaseComObject(pDataSet );
            // System.Runtime.InteropServices.Marshal.ReleaseComObject(newFeatcls);
        }
        /// <summary>
        /// Create a polygon feature class used to store buffer geometries for observer points
        /// </summary>
        /// <param name="featWorkspace">IFeatureWorkspace</param>
        /// <param name="spatialRef">ISpatialReference of selected surface</param>
        /// <param name="name">Name of the feature class</param>
        /// <returns>IFeatureClass</returns>
        private static IFeatureClass CreateMaskFeatureClass(IFeatureWorkspace featWorkspace, ISpatialReference spatialRef, string name)
        {
            IFieldsEdit pFldsEdt = new FieldsClass();
            IFieldEdit  pFldEdt  = new FieldClass();

            pFldEdt             = new FieldClass();
            pFldEdt.Type_2      = esriFieldType.esriFieldTypeOID;
            pFldEdt.Name_2      = "OBJECTID";
            pFldEdt.AliasName_2 = "OBJECTID";
            pFldsEdt.AddField(pFldEdt);

            IGeometryDefEdit pGeoDef;

            pGeoDef = new GeometryDefClass();
            pGeoDef.GeometryType_2     = esriGeometryType.esriGeometryPolygon;
            pGeoDef.SpatialReference_2 = spatialRef;

            pFldEdt               = new FieldClass();
            pFldEdt.Name_2        = "SHAPE";
            pFldEdt.AliasName_2   = "SHAPE";
            pFldEdt.Type_2        = esriFieldType.esriFieldTypeGeometry;
            pFldEdt.GeometryDef_2 = pGeoDef;
            pFldsEdt.AddField(pFldEdt);

            IFeatureClass pFClass = featWorkspace.CreateFeatureClass(name, pFldsEdt, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");

            return(pFClass);
        }
Beispiel #24
0
        public IFeatureClass CreateFeatureClass(string geometryType)
        {
            IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetTempPath(), 0);

            IFeatureClass featureClass;

            IFields fields;
            UID     CLSID = new UIDClass();

            CLSID.Value = "esriGeoDatabase.Feature";
            IObjectClassDescription objectClassDescription = new FeatureClassDescriptionClass();

            // create the fields using the required fields method
            fields = objectClassDescription.RequiredFields;


            string strShapeField = "";

            // locate the shape field
            for (int j = 0; j < fields.FieldCount; j++)
            {
                if (fields.get_Field(j).Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGeometry)
                {
                    strShapeField = fields.get_Field(j).Name;
                }
            }

            featureClass = featureWorkspace.CreateFeatureClass(tempFeatureLayerName, fields, CLSID, null, esriFeatureType.esriFTSimple, strShapeField, null);

            return(featureClass);
        }
        private IFeature Convert_Point2MultiPoint_Class(IFeatureClass PointFeatureClass)
        {
            IWorkspaceFactory contourWSF   = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace contourFWS   = (IFeatureWorkspace)contourWSF.OpenFromFile(WorkSpaceName, 0);
            IFields           pFields      = CreateShapeFields(esriGeometryType.esriGeometryMultipoint);
            string            filename     = PointFeatureClass.AliasName + "_muilti";
            string            filename_shp = WorkSpaceName + @"/" + filename + ".shp";

            if (System.IO.File.Exists(filename_shp))
            {
                System.IO.File.Delete(filename_shp);
                System.IO.File.Delete(System.IO.Path.ChangeExtension(filename_shp, ".dbf"));
                System.IO.File.Delete(System.IO.Path.ChangeExtension(filename_shp, ".shx"));
            }
            contourFWS.CreateFeatureClass(filename, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", null);
            IFeatureClass    MultiFeatureClass = contourFWS.OpenFeatureClass(filename);
            IPointCollection pPointCollection  = new MultipointClass();

            for (int i = 0; i < PointFeatureClass.FeatureCount(null); i++)
            {
                IFeature pFeature = PointFeatureClass.GetFeature(i);
                IPoint   pPoint   = pFeature.Shape as IPoint;
                pPointCollection.AddPoint(pPoint);
            }
            IFeature MultiFeature = MultiFeatureClass.CreateFeature();

            MultiFeature.Shape = pPointCollection as IGeometry;
            MultiFeature.Store();
            return(MultiFeature);
        }
Beispiel #26
0
        public static void CreateShpFile(string filePath, string fileName, Field[] fields, ISpatialReference spatialReference, Func <IFeatureClass, bool> featureCreationCallback)
        {
            fileName = fileName.Replace("/", "");
            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
            IFields           pFields           = new Fields();
            IFieldsEdit       pFieldsEdit       = pFields as IFieldsEdit;
            IField            pField            = new Field();
            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);

            foreach (Field f in fields)
            {
                pFieldsEdit.AddField(f);
            }

            IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0) as IFeatureWorkspace;
            int i = fileName.IndexOf(".shp");

            if (i == -1)
            {
                pFeatureWorkspace.CreateFeatureClass(fileName + ".shp", pFields, null, null,
                                                     esriFeatureType.esriFTSimple, "Shape", "");
            }
            else
            {
                pFeatureWorkspace.CreateFeatureClass(fileName, pFields,
                                                     null, null, esriFeatureType.esriFTSimple, "Shape", "");
            }

            //if (featureCreationCallback == null)
            //{
            IFeatureClass featureClass = pFeatureWorkspace.OpenFeatureClass(fileName);

            featureCreationCallback(featureClass);
            //}
        }
Beispiel #27
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 pWf = new ShapefileWorkspaceFactoryClass();
            IWorkspaceName    pWn = pWf.Create(sParentDirectory, sWorkspaceName, null, 0);

            ESRI.ArcGIS.esriSystem.IName name = pWn as ESRI.ArcGIS.esriSystem.IName;

            IWorkspace        pW  = (IWorkspace)name.Open();
            IFeatureWorkspace pFw = pW as IFeatureWorkspace;

            IFields     pFs  = new FieldsClass();
            IFieldsEdit pFse = pFs as IFieldsEdit;

            IFieldEdit pFe = new FieldClass();

            pFe.Name_2      = "OID";
            pFe.AliasName_2 = "序号";
            pFe.Type_2      = esriFieldType.esriFieldTypeOID;
            pFse.AddField((IField)pFe);//IFieldEdit.AddField是AO隐藏属性

            pFe             = new FieldClass();
            pFe.Name_2      = "Name";
            pFe.AliasName_2 = "名称";
            pFe.Type_2      = esriFieldType.esriFieldTypeString;
            pFse.AddField((IField)pFe);

            IGeometryDefEdit  pGde = new GeometryDefClass();
            ISpatialReference pSr  = m_map.SpatialReference;

            pGde.SpatialReference_2 = pSr;
            pGde.GeometryType_2     = esriGeometryType.esriGeometryPoint;

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

            pFe.Name_2        = sShapeFieldName;
            pFe.AliasName_2   = "形状";
            pFe.Type_2        = esriFieldType.esriFieldTypeGeometry;
            pFe.GeometryDef_2 = pGde;
            pFse.AddField((IField)pFe);

            IFeatureClass pFc = pFw.CreateFeatureClass(sFileName, pFs, null, null, esriFeatureType.esriFTSimple, "Shape", "");

            if (pFc == null)
            {
                return(null);
            }
            return(pFc);
        }
Beispiel #28
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="workspace"></param>
        /// <param name="featureName"></param>
        /// <param name="fields"></param>
        /// <param name="featuretype"></param>
        /// <returns></returns>
        public IFeatureClass createFeatureClass(IWorkspace workspace, string featureName, IFields fields, string featuretype)
        {
            IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;

            deleteFeatureClass(workspace, featureName);
            IFeatureClass pFtClass = featureWorkspace.CreateFeatureClass(featureName, fields, null, null, esriFeatureType.esriFTSimple, "SHAPE", null);

            return(pFtClass);
        }
Beispiel #29
0
        public void Test()
        {
            //定义一个几何字段,类型为点类型
            ISpatialReferenceFactory2 originalSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            ISpatialReference         originalSpatialReference        = originalSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
            IGeometryDefEdit          pGeoDef     = new GeometryDefClass();
            IGeometryDefEdit          pGeoDefEdit = pGeoDef as IGeometryDefEdit;

            pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;

            pGeoDefEdit.SpatialReference_2 = originalSpatialReference;
            //定义一个字段集合对象
            IFields     pFields     = new FieldsClass();
            IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;

            //定义shape字段
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = (IFieldEdit)pField;

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

            //定义单个的字段,并添加到字段集合中
            pField            = new FieldClass();
            pFieldEdit        = (IFieldEdit)pField;
            pFieldEdit.Name_2 = "STCD";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            pFieldsEdit.AddField(pField);

            //定义单个的字段,并添加到字段集合中
            pField            = new FieldClass();
            pFieldEdit        = (IFieldEdit)pField;
            pFieldEdit.Name_2 = "SLM10";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            pFieldsEdit.AddField(pField);

            //定义单个的字段,并添加到字段集合中
            pField            = new FieldClass();
            pFieldEdit        = (IFieldEdit)pField;
            pFieldEdit.Name_2 = "SLM20";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            pFieldsEdit.AddField(pField);

            //定义单个的字段,并添加到字段集合中
            pField            = new FieldClass();
            pFieldEdit        = (IFieldEdit)pField;
            pFieldEdit.Name_2 = "SLM40";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            pFieldsEdit.AddField(pField);

            IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
            IFeatureWorkspace pFWS     = pWorkspaceFactory.OpenFromFile(workspaceDirectory, 0) as IFeatureWorkspace;
            IFeatureClass     pFtClass = pFWS.CreateFeatureClass("Test", pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", null);
        }
        /// <summary>
        /// create a feature class in workspace with type geometry
        /// </summary>
        /// <param name="geometry">geometry of feature class</param>
        /// <param name="featureWorkspace">workspace for store feature class</param>
        /// <returns>feature class created</returns>
        private IFeatureClass CreateFeatureClass(IGeometry geometry, IFeatureWorkspace featureWorkspace)
        {
            // Create a fields collection for the feature class.
            IFields     fields     = new FieldsClass();
            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

            // Add an object ID field to the fields collection. This is mandatory for feature classes.
            IField     oidField     = new FieldClass();
            IFieldEdit oidFieldEdit = (IFieldEdit)oidField;

            oidFieldEdit.Name_2 = "OID";
            oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
            fieldsEdit.AddField(oidField);

            IField     idField     = new FieldClass();
            IFieldEdit idFieldEdit = (IFieldEdit)idField;

            idFieldEdit.Name_2 = SAUtility.FieldNameIdWatershed;
            idFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
            fieldsEdit.AddField(idField);

            // Create a geometry definition (and spatial reference) for the feature class.
            IGeometryDef     geometryDef     = new GeometryDefClass();
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

            geometryDefEdit.GeometryType_2     = geometry.GeometryType;
            geometryDefEdit.SpatialReference_2 = geometry.SpatialReference;

            IFeatureClassDescription featureClassDescription = new FeatureClassDescriptionClass();
            IObjectClassDescription  objectClassDescription  = (IObjectClassDescription)featureClassDescription;

            // Add a geometry field to the fields collection. This is where the geometry definition is applied.
            IField     geometryField     = new FieldClass();
            IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField;

            geometryFieldEdit.Name_2        = featureClassDescription.ShapeFieldName;
            geometryFieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
            geometryFieldEdit.GeometryDef_2 = geometryDef;
            fieldsEdit.AddField(geometryField);

            // Use IFieldChecker to create a validated fields collection.
            IFieldChecker   fieldChecker    = new FieldCheckerClass();
            IEnumFieldError enumFieldError  = null;
            IFields         validatedFields = null;

            fieldChecker.ValidateWorkspace = (IWorkspace)featureWorkspace;
            fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

            // The enumFieldError enumerator can be inspected at this point to determine
            // which fields were modified during validation.
            // Create the feature class. Note that the CLSID parameter is null - this indicates to use the
            // default CLSID, esriGeodatabase.Feature (acceptable in most cases for feature classes).
            IFeatureClass featureClass = featureWorkspace.CreateFeatureClass("pourPoint", validatedFields, objectClassDescription.InstanceCLSID, objectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, featureClassDescription.ShapeFieldName, string.Empty);

            return(featureClass);
        }
Beispiel #31
0
        /// <summary>
        /// 以旧图层为基础创建新图层要素集合
        /// </summary>
        /// <param name="featureWorkspace">要素工作空间</param>
        /// <param name="selectionLayer">旧图层</param>
        /// <param name="newLayerName">新图层名称</param>
        /// <returns></returns>
        private static IFeatureClass CreateNewFeatureClass(IFeatureWorkspace featureWorkspace,
                                                           IFeatureLayer selectionLayer, string newLayerName)
        {
            IFeatureClass oldFeatureClass = selectionLayer.FeatureClass;
            //以旧图层为基础创建新图层要素集合
            IFeatureClass newFeatureClass = featureWorkspace.CreateFeatureClass(newLayerName, oldFeatureClass.Fields,
                                                                                oldFeatureClass.CLSID, oldFeatureClass.EXTCLSID, oldFeatureClass.FeatureType,
                                                                                oldFeatureClass.ShapeFieldName, "");

            return(newFeatureClass);
        }
 /// <summary>
 /// 创建FeatureClass
 /// </summary>
 /// <param name="Name"></param>
 /// <param name="fieldsHelper"></param>
 /// <param name="esriFeatureType"></param>
 /// <param name="ShapeFieldName"></param>
 /// <param name="ConfigKeyword"></param>
 public static IFeatureClass CreateFeatureClass(this IFeatureWorkspace workspace, string Name, IFields fields, esriFeatureType type = esriFeatureType.esriFTSimple, string ShapeFieldName = "SHAPE", string ConfigKeyword = "")
 {
     try
     {
         return(workspace.CreateFeatureClass(Name, fields, null, null, type, ShapeFieldName, ConfigKeyword));
     }
     catch (Exception ex)
     {
         throw new Exception("创建FeatureClass失败", ex);
     }
 }
        /// <summary> 
        /// Create the point feature class for observer locations
        /// </summary> 
        /// <param name="featWorkspace"></param> 
        /// <param name="name"></param> 
        /// <returns></returns> 
        public static IFeatureClass CreateObserversFeatureClass(IFeatureWorkspace featWorkspace, string name)
        {
            IFieldsEdit pFldsEdt = new FieldsClass();
            IFieldEdit pFldEdt = new FieldClass();

            pFldEdt = new FieldClass();
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeOID;
            pFldEdt.Name_2 = "OBJECTID";
            pFldEdt.AliasName_2 = "OBJECTID";
            pFldsEdt.AddField(pFldEdt);

            IGeometryDefEdit pGeoDef;
            pGeoDef = new GeometryDefClass();
            pGeoDef.GeometryType_2 = esriGeometryType.esriGeometryPoint;
            pGeoDef.SpatialReference_2 = ArcMap.Document.FocusMap.SpatialReference;
            pGeoDef.HasZ_2 = true;

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "SHAPE";
            pFldEdt.AliasName_2 = "SHAPE";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeGeometry;
            pFldEdt.GeometryDef_2 = pGeoDef;
            pFldsEdt.AddField(pFldEdt);

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "OFFSETA";
            pFldEdt.AliasName_2 = "OFFSETA";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFldsEdt.AddField(pFldEdt);

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "OFFSETB";
            pFldEdt.AliasName_2 = "OFFSETB";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFldsEdt.AddField(pFldEdt);

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "AZIMUTH1";
            pFldEdt.AliasName_2 = "AZIMUTH1";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFldsEdt.AddField(pFldEdt);

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "AZIMUTH2";
            pFldEdt.AliasName_2 = "AZIMUTH2";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFldsEdt.AddField(pFldEdt);

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "RADIUS1";
            pFldEdt.AliasName_2 = "RADIUS1";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFldsEdt.AddField(pFldEdt);

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "RADIUS2";
            pFldEdt.AliasName_2 = "RADIUS2";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFldsEdt.AddField(pFldEdt);

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "VERT1";
            pFldEdt.AliasName_2 = "VERT1";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFldsEdt.AddField(pFldEdt);

            pFldEdt = new FieldClass();
            pFldEdt.Name_2 = "VERT2";
            pFldEdt.AliasName_2 = "VERT2";
            pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble;
            pFldsEdt.AddField(pFldEdt);

            IFeatureClass pFClass = featWorkspace.CreateFeatureClass(name, pFldsEdt, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");

            return pFClass;
        }
Beispiel #34
0
        public IFeatureClass CreateWithoutDescription(String featureClassName, UID classExtensionUID, IFeatureWorkspace featureWorkspace, esriGeometryType geoType, IFields fields)
        {
            // Use IFieldChecker to create a validated fields collection.
            IFieldChecker fieldChecker = new FieldCheckerClass();
            IEnumFieldError enumFieldError = null;
            IFields validatedFields = null;
            fieldChecker.ValidateWorkspace = (IWorkspace)featureWorkspace;
            fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

            IFeatureClass featureClass = featureWorkspace.CreateFeatureClass
                (featureClassName, validatedFields, null, classExtensionUID,
                esriFeatureType.esriFTSimple, "Shape", "");
            return featureClass;
        }
Beispiel #35
0
        /// <summary>
        /// 创建一个新的FeatureClass
        /// </summary>
        /// <param name="FeatureWorkspace">要素命名空间</param>
        /// <param name="Name">名称</param>
        /// <param name="esriGeometryType">类型</param>
        /// <param name="FieldDict">字段已经类型</param>
        /// <returns></returns>
        private static IFeatureClass Create(IFeatureWorkspace FeatureWorkspace, string Name, ESRI.ArcGIS.Geometry.esriGeometryType esriGeometryType,Dictionary<string,esriFieldType> FieldDict)
        {
            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;

            ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            ISpatialReference pSpatialReference = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
            pSpatialReference.SetDomain(-6000000, 6000000, -6000000, 6000000);
            pGeometryDefEdit.SpatialReference_2 = pSpatialReference;
            pFieldEdit.GeometryDef_2 = pGeometryDef;
            pFieldsEdit.AddField(pField);

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

            foreach (var key in FieldDict.Keys)
            {
                if (key.ToUpper() == "SHAPE"||key.ToUpper()=="OBJECTID")
                {
                    continue;
                }
                pField = new FieldClass();
                pFieldEdit = pField as IFieldEdit;
                pFieldEdit.Name_2 = key;
                pFieldEdit.Type_2 = FieldDict[key];
                pFieldsEdit.AddField(pField);
            }

            IFeatureClassDescription featureClassDescription = new FeatureClassDescriptionClass();
            IObjectClassDescription objectClassDescription = featureClassDescription as IObjectClassDescription;
            IFeatureClass featureClass = FeatureWorkspace.CreateFeatureClass(Name, pFields, objectClassDescription.InstanceCLSID, objectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, "shape", "");
            return featureClass;
        }
        private IFeatureClass CreateFeatureClassFromGeometry(IGeometry pGeometry, IFeatureWorkspace pOutFeatWorkspace, int wkid)
        {
            // thanks to http://bcdcspatial.blogspot.co.uk/2011/12/some-random-arcobjects-that-make.html
            // which was the only place i could find an answer to the problem I was having - the last
            // argument to createfeatureclass is null NOT an empty string
            try
            {
                IFields tFields = new FieldsClass() as IFields;
                IFieldsEdit tFieldsEdit = (IFieldsEdit)tFields;
                IField tShpFld = new Field();
                IFieldEdit tShpEd = (IFieldEdit)tShpFld;
                tShpEd.Type_2 = esriFieldType.esriFieldTypeGeometry;
                tShpEd.Name_2 = "Shape";

                IGeometryDef tGeomDef = new GeometryDef();
                IGeometryDefEdit tGdEdit = (IGeometryDefEdit)tGeomDef;
                tGdEdit.GeometryType_2 = pGeometry.GeometryType;

                ISpatialReferenceFactory2 tSRFac = new SpatialReferenceEnvironment() as ISpatialReferenceFactory2;
                ISpatialReference tSpatRef = tSRFac.CreateSpatialReference(wkid);
                ISpatialReferenceResolution tSpatRefRes = (ISpatialReferenceResolution)tSpatRef;
                tSpatRefRes.ConstructFromHorizon();

                tGdEdit.SpatialReference_2 = tSpatRef;
                tShpEd.GeometryDef_2 = tGeomDef;
                tFieldsEdit.AddField(tShpFld);

                IObjectClassDescription tOCDesc = new FeatureClassDescription();
                for (int i = 0; i < tOCDesc.RequiredFields.FieldCount; i++)
                {
                    IField tField = tOCDesc.RequiredFields.get_Field(i);
                    if (tFieldsEdit.FindField(tField.Name) == -1)
                    {
                        tFieldsEdit.AddField(tField);
                    }
                }
                string tFCName = "tmp" + Guid.NewGuid().ToString("N");
                IFeatureClass tFC = pOutFeatWorkspace.CreateFeatureClass(
                    tFCName, tFields, null, null, esriFeatureType.esriFTSimple, "Shape", null);
                IFeature tGeomAsFeature = tFC.CreateFeature();
                tGeomAsFeature.Shape = pGeometry;
                tGeomAsFeature.Store();
                return tFC;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                logger.LogMessage(ServerLogger.msgType.error, "CreateFeatureClassFromGeometry", 99,
                              "Could not create feature class " + e.Message + e.Source + e.StackTrace);
                throw e;

            }
        }
Beispiel #37
0
        static void CopyAndLabel(IFeatureClass inFC, IFeatureWorkspace destination, String name)
        {
            IFieldsEdit outFields = new FieldsClass();
            ISpatialReference outSR = null;
            for (int i = 0; i < inFC.Fields.FieldCount; i += 1) {
                IField field = inFC.Fields.get_Field(i);
                if (field.Type == esriFieldType.esriFieldTypeGeometry) {
                    outSR = field.GeometryDef.SpatialReference;
                } else {
                    outFields.AddField(field);
                }
            }
            outSR.SetMDomain(-137434824702, 137434824702);

            IGeometryDefEdit geom = new GeometryDefClass();
            geom.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
            geom.SpatialReference_2 = outSR;
            geom.HasM_2 = true;
            geom.HasZ_2 = false;

            IFieldEdit geomField = new FieldClass();
            geomField.Name_2 = "SHAPE";
            geomField.AliasName_2 = "SHAPE";
            geomField.Type_2 = esriFieldType.esriFieldTypeGeometry;
            geomField.GeometryDef_2 = geom;
            outFields.AddField(geomField);

            IFeatureClass outFC = destination.CreateFeatureClass(name, outFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
            // Start numbering from 1, because index 0 is used by clipping cell
            int vIndex = 1;
            IFeatureCursor featureCursor = inFC.Search(null, true);
            IFeature inFeature;
            while ((inFeature = featureCursor.NextFeature()) != null) {
                IFeature outFeature = outFC.CreateFeature();
                for (int i = 0; i < outFields.FieldCount; i += 1) {
                    IField field = outFields.Field[i];
                    if (field.Editable && (field.Type != esriFieldType.esriFieldTypeGeometry)) {
                        outFeature.set_Value(i, inFeature.get_Value(i));
                    }
                }
                IPolygon4 inShape = inFeature.Shape as IPolygon4;
                PolygonClass outShape = new PolygonClass();

                IGeometryBag extRingBag = inShape.ExteriorRingBag;
                IGeometryCollection extRings = extRingBag as IGeometryCollection;
                for (int i = 0; i < extRings.GeometryCount; i += 1) {
                    IGeometry inExtRingGeom = extRings.get_Geometry(i);
                    IPointCollection inExtRing = inExtRingGeom as IPointCollection;
                    RingClass outExtRing = new RingClass();
                    for (int j = 0; j < inExtRing.PointCount; j += 1) {
                        IPoint point = inExtRing.get_Point(j);
                        point.M = vIndex;
                        vIndex += 2;
                        outExtRing.AddPoint(point);
                    }
                    outShape.AddGeometry(outExtRing);
                    IGeometryBag intRingBag = inShape.get_InteriorRingBag(inExtRingGeom as IRing);
                    IGeometryCollection intRings = intRingBag as IGeometryCollection;
                    for (int j = 0; j < intRings.GeometryCount; j += 1) {
                        IGeometry intRingGeom = intRings.get_Geometry(j);
                        IPointCollection inIntRing = intRingGeom as IPointCollection;
                        RingClass outIntRing = new RingClass();
                        for (int k = 0; k < inIntRing.PointCount; k += 1) {
                            IPoint point = inExtRing.get_Point(k);
                            point.M = vIndex;
                            vIndex += 2;
                            outIntRing.AddPoint(point);
                        }
                        outShape.AddGeometry(outIntRing);
                    }
                }
                outFeature.Shape = outShape;
                outFeature.Store();
            }
        }
Beispiel #38
0
        private IFeatureClass CreateFeatureClass(string Name, IFeatureWorkspace FeatureWorkspace)
        {
            //The feature that will be returned
            IFeatureClass featureClassCreated;

            //Create the filed for the histogram and the fields to be created in the future class
            IObjectClassDescription objectClassDescription = new FeatureClassDescription();
            IFields fields = objectClassDescription.RequiredFields;
            IFieldsEdit fieldsEdit = fields as IFieldsEdit;
            IField field = new Field();
            IFieldEdit fieldEdit = field as IFieldEdit;
            fieldEdit.AliasName_2 = "HistoField";
            fieldEdit.Name_2 = "HistoField";
            fieldEdit.Editable_2 = true;
            fieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
            fieldsEdit.AddField(field);
            fields = fieldsEdit as IFields;

            //Create and assugn a CLSID
            UID CLSID = new UIDClass();
            CLSID.Value = "esriGeodatabase.Feature";

            string strShapeField = "";

            //Find the geometry field and then set the spatial reference and the geometry type.
            for (int i = 0; i < fields.FieldCount; i++)
            {
                if (fields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    strShapeField = fields.get_Field(i).Name;
                    IGeometryDef geomDef = fields.get_Field(i).GeometryDef;
                    IGeometryDefEdit geomDefEdit = (IGeometryDefEdit)geomDef;
                    geomDefEdit.SpatialReference_2 = getSpatialReference(4326);
                    geomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
                    break;
                }
            }

            //If the file exists, overwrite it, otherwise create a new one.
            if (((IWorkspace2)FeatureWorkspace).NameExists[esriDatasetType.esriDTFeatureClass, Name])
            {

                IDataset dataset = FeatureWorkspace.OpenFeatureClass(Name) as IDataset;
                dataset.Delete();
                featureClassCreated = FeatureWorkspace.CreateFeatureClass(Name, fields, CLSID, null, esriFeatureType.esriFTSimple, strShapeField, "");
            }
            else
            {
                featureClassCreated = FeatureWorkspace.CreateFeatureClass(Name, fields, CLSID, null, esriFeatureType.esriFTSimple, strShapeField, "");
            }
            return featureClassCreated;
        }
        /// <summary>
        /// Add Feature class and its feilds
        /// </summary>
        /// <param name="featureClassName"></param>
        /// <param name="featureWorkspace"></param>
        /// <returns></returns>
        public IFeatureClass CreateFeatureClassWithFields(String featureClassName, IFeatureWorkspace featureWorkspace, string dir)
        {
            GeoJson geoJson = new GeoJson();
            try
            {
                _featureInJSON = geoJson.readGeoJsonFile(dir);

                // Instantiate a feature class description to get the required fields.
                IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();
                IObjectClassDescription ocDescription = (IObjectClassDescription)
                  fcDescription;
                IFields fields = ocDescription.RequiredFields;
                IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

                for (int i = 0; i < 9; i++)
                {
                    if (_featureInJSON.fields[i].name == "OBJECTID")
                        continue;
                    else
                        addFeatureFeild(_featureInJSON.fields[i].name, _featureInJSON.fields[i].alias, (esriFieldType)Enum.Parse(typeof(esriFieldType), _featureInJSON.fields[i].type), fieldsEdit);
                }
                // Use IFieldChecker to create a validated fields collection.
                IFieldChecker fieldChecker = new FieldCheckerClass();
                IEnumFieldError enumFieldError = null;
                IFields validatedFields = null;
                fieldChecker.ValidateWorkspace = (IWorkspace)featureWorkspace;
                fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

                // The enumFieldError enumerator can be inspected at this point to determine
                // which fields were modified during validation.
                // Create the feature class.
                IFeatureClass featureClass = featureWorkspace.CreateFeatureClass
                  (featureClassName, validatedFields, ocDescription.InstanceCLSID,
                  ocDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple,
                  fcDescription.ShapeFieldName, "");

                return featureClass;
            }
            catch (Exception e)
            {
                Log.WriteLine("CreateFeatureClassWithFields: " + e.Message);
            }
            return null;
        }
Beispiel #40
0
        //http://resources.esri.com/help/9.3/arcgisengine/arcobjects/esriGeoDatabase/IFeatureWorkspace.CreateFeatureClass_Example.htm
        static IFeatureClass CreateFeatureClass(string name, IFeatureWorkspace ftrSpc, esriGeometryType type, int epsg, List<dynamic> extraFields)
        {
            IFeatureClass ftrc = null;
            if(null != ftrSpc && null != name)
            {
                IFieldsEdit flds = new FieldsClass();
                flds.FieldCount_2 = 2 + (extraFields == null ? 0 : extraFields.Count);

                IFieldEdit fld = new FieldClass();
                fld.Name_2 = OBJECT_ID;
                fld.Type_2 = esriFieldType.esriFieldTypeOID;
                flds.Field_2[0] = fld;

                fld = new FieldClass();
                fld.Name_2 = SHP_NAME;
                fld.Type_2 = esriFieldType.esriFieldTypeGeometry;
                fld.GeometryDef_2 = CreateGeometryDef(type, epsg);
                flds.Field_2[1] = fld;
                int eidx = 2;
                foreach(var efld in extraFields)
                {
                    fld = new FieldClass();
                    fld.Name_2 = efld.Name;
                    fld.Type_2 = efld.Type;
                    flds.Field_2[eidx++] = fld;
                }
                ftrc = ftrSpc.CreateFeatureClass(name, flds, null, null, esriFeatureType.esriFTSimple, SHP_NAME, null);
            }
            return ftrc;
        }
        public IFeatureClass CreateFeatureClassWithFieldsGeoRef(String featureClassName, IFeatureWorkspace featureWorkspace)
        {
            GeoJson geoJson = new GeoJson();
            try
            {
                // Instantiate a feature class description to get the required fields.
                IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();
                IObjectClassDescription ocDescription = (IObjectClassDescription)
                  fcDescription;
                IFields fields = ocDescription.RequiredFields;
                IFieldsEdit fieldsEdit = (IFieldsEdit)fields;

                addFeatureFeild("URI", "URI", esriFieldType.esriFieldTypeString, fieldsEdit);
                // Use IFieldChecker to create a validated fields collection.
                IFieldChecker fieldChecker = new FieldCheckerClass();
                IEnumFieldError enumFieldError = null;
                IFields validatedFields = null;
                fieldChecker.ValidateWorkspace = (IWorkspace)featureWorkspace;
                fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

                // The enumFieldError enumerator can be inspected at this point to determine
                // which fields were modified during validation.
                // Create the feature class.
                IFeatureClass featureClass = featureWorkspace.CreateFeatureClass
                  (featureClassName, validatedFields, ocDescription.InstanceCLSID,
                  ocDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple,
                  fcDescription.ShapeFieldName, "");

                return featureClass;
            }
            catch (Exception e)
            {
                Log.WriteLine("CreateFeatureClassWithFields: " + e.Message);
            }
            return null;
        }