public bool AddRasterDatesetToMD(IMosaicDataset pMosaicDataset, IRasterDataset pRasteDataset, IRasterType pRasterType) { try { IRasterDatasetCrawler pRasterDatasetCrawler = new RasterDatasetCrawlerClass(); pRasterDatasetCrawler.RasterDataset = pRasteDataset; IDataset pDataset = pRasteDataset as IDataset; ESRI.ArcGIS.esriSystem.IName pName = pDataset.FullName; pRasterDatasetCrawler.DatasetName = pName; IMosaicDatasetOperation pMosaicDatasetOperation = (IMosaicDatasetOperation)pMosaicDataset; IAddRastersParameters AddRastersArgs = new AddRastersParametersClass(); AddRastersArgs.Crawler = pRasterDatasetCrawler as IDataSourceCrawler; AddRastersArgs.RasterType = pRasterType; pMosaicDatasetOperation.AddRasters(AddRastersArgs, null); return(true); } catch (System.Exception ex) { return(false); } }
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); }
public IFeatureClass CreateShapefile(String sParentDirectory, String sWorkspaceName, String sFileName) { IWorkspaceFactory workspaceFactory; IWorkspace workspace; IFeatureWorkspace featureWorkspace; IFeatureClass featureClass; if (System.IO.Directory.Exists(sParentDirectory + sWorkspaceName)) { workspaceFactory = new ShapefileWorkspaceFactoryClass(); workspace = workspaceFactory.OpenFromFile(sParentDirectory + sWorkspaceName, 0); featureWorkspace = workspace as IFeatureWorkspace; featureClass = featureWorkspace.OpenFeatureClass(sFileName); } else { workspaceFactory = new ShapefileWorkspaceFactoryClass(); IWorkspaceName workspaceName = workspaceFactory.Create(sParentDirectory, sWorkspaceName, null, 0); ESRI.ArcGIS.esriSystem.IName name = workspaceName as ESRI.ArcGIS.esriSystem.IName; workspace = (IWorkspace)name.Open(); 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); fieldEdit = new FieldClass(); fieldEdit.Name_2 = "Name"; fieldEdit.AliasName_2 = "名称"; fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; fieldsEdit.AddField((IField)fieldEdit); IGeometryDefEdit geoDefEdit = new GeometryDefClass(); ISpatialReference spatialReference = m_map.SpatialReference; geoDefEdit.SpatialReference_2 = spatialReference; geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; fieldEdit = new FieldClass(); fieldEdit.Name_2 = "Shape"; fieldEdit.AliasName_2 = "形状"; fieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; fieldEdit.GeometryDef_2 = geoDefEdit; fieldsEdit.AddField((IField)fieldEdit); featureClass = featureWorkspace.CreateFeatureClass(sFileName, fields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); if (featureClass == null) { return(null); } } return(featureClass); }
public void IFeatureDataConverter(IWorkspace pSourceWorkspace, IWorkspace pTargetWorkspace, string pSFeatureClass, string pDFeatureClass) { IDataset sourceWorkspaceDataset = (IDataset)pSourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = pSFeatureClass; IDataset targetWorkspaceDataset = (IDataset)pTargetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; IFeatureClassName targetFeatureClassName = new FeatureClassNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName; targetDatasetName.WorkspaceName = targetWorkspaceName; targetDatasetName.Name = pDFeatureClass; ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName; IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open(); IFieldChecker fieldChecker = new FieldCheckerClass(); IFields targetFeatureClassFields; IFields sourceFeatureClassFields = sourceFeatureClass.Fields; IEnumFieldError enumFieldError; fieldChecker.InputWorkspace = pSourceWorkspace; fieldChecker.ValidateWorkspace = pTargetWorkspace; fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); IField geometryField; for (int i = 0; i < targetFeatureClassFields.FieldCount; i++) { if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { geometryField = targetFeatureClassFields.get_Field(i); IGeometryDef geometryDef = geometryField.GeometryDef; IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef; targetFCGeoDefEdit.GridCount_2 = 1; targetFCGeoDefEdit.set_GridSize(0, 0); targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference; IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.WhereClause = ""; IFeatureDataConverter fctofc = new FeatureDataConverterClass(); IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0); break; } } }
/// <summary> /// 获取栅格类型 /// </summary> /// <param name="pTypeName"></param> /// <returns></returns> public IRasterType GetRasterType(string pTypeName) { IRasterTypeName pRasterTypeName = new RasterTypeNameClass(); pRasterTypeName.Name = pTypeName; ESRI.ArcGIS.esriSystem.IName pName = pRasterTypeName as ESRI.ArcGIS.esriSystem.IName; IRasterType pRasterType = pName.Open() as IRasterType; return(pRasterType); }
//通过IName获取到CadDrawingDataset private static ICadDrawingDataset GetCadDataset(string cadWorkspacePath, string cadFileName) { //Create a WorkspaceName object IWorkspaceName workspaceName = new WorkspaceNameClass(); workspaceName.WorkspaceFactoryProgID = "esriDataSourcesFile.CadWorkspaceFactory"; workspaceName.PathName = cadWorkspacePath; //Create a CadDrawingName object IDatasetName cadDatasetName = new CadDrawingNameClass(); cadDatasetName.Name = cadFileName; cadDatasetName.WorkspaceName = workspaceName; //Open the CAD drawing ESRI.ArcGIS.esriSystem.IName name = (ESRI.ArcGIS.esriSystem.IName)cadDatasetName; return((ICadDrawingDataset)name.Open()); }
internal static ESRI.ArcGIS.Geodatabase.IWorkspace CreateInMemoryWorkspace(string workspacename) { // Create an in-memory workspace factory. Type factoryType = Type.GetTypeFromProgID( "esriDataSourcesGDB.InMemoryWorkspaceFactory"); ESRI.ArcGIS.Geodatabase.IWorkspaceFactory workspaceFactory = (ESRI.ArcGIS.Geodatabase.IWorkspaceFactory) Activator.CreateInstance(factoryType); // Create an in-memory workspace. ESRI.ArcGIS.Geodatabase.IWorkspaceName workspaceName = workspaceFactory.Create("", workspacename, null, 0); // Cast for IName and open a reference to the in-memory workspace through the name object. ESRI.ArcGIS.esriSystem.IName name = (ESRI.ArcGIS.esriSystem.IName)workspaceName; ESRI.ArcGIS.Geodatabase.IWorkspace workspace = (ESRI.ArcGIS.Geodatabase.IWorkspace)name.Open(); return(workspace); }
////数据复制 public IFeatureClass IFeatureDataConverter_ConvertFeatureClass(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureClass, string nameOfTargetFeatureClass) { //create source workspace name IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; //create source dataset name IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = nameOfSourceFeatureClass; //create target workspace name IDataset targetWorkspaceDataset = (IDataset)targetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; //create target dataset name IFeatureClassName targetFeatureClassName = new FeatureClassNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName; targetDatasetName.WorkspaceName = targetWorkspaceName; targetDatasetName.Name = nameOfTargetFeatureClass; //Open input Featureclass to get field definitions. ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName; IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open(); //Validate the field names because you are converting between different workspace types. IFieldChecker fieldChecker = new FieldCheckerClass(); IFields targetFeatureClassFields; IFields sourceFeatureClassFields = sourceFeatureClass.Fields; IEnumFieldError enumFieldError; // Most importantly set the input and validate workspaces! fieldChecker.InputWorkspace = sourceWorkspace; fieldChecker.ValidateWorkspace = targetWorkspace; fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields); // Loop through the output fields to find the geomerty field IField geometryField; for (int i = 0; i < targetFeatureClassFields.FieldCount; i++) { if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { geometryField = targetFeatureClassFields.get_Field(i); // Get the geometry field's geometry defenition IGeometryDef geometryDef = geometryField.GeometryDef; //Give the geometry definition a spatial index grid count and grid size IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef; targetFCGeoDefEdit.GridCount_2 = 1; targetFCGeoDefEdit.set_GridSize(0, 0); //Allow ArcGIS to determine a valid grid size for the data loaded targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference; // we want to convert all of the features IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.WhereClause = ""; // Load the feature class IFeatureDataConverter fctofc = new FeatureDataConverterClass(); IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0); break; } } //Open input Featureclass to get field definitions. ESRI.ArcGIS.esriSystem.IName targetName = (ESRI.ArcGIS.esriSystem.IName)targetFeatureClassName; return((IFeatureClass)targetName.Open()); }
public static void CopyPasteGeodatabaseData(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string objectName, esriDatasetType esriDataType) { // Validate input if ((sourceWorkspace.Type == esriWorkspaceType.esriFileSystemWorkspace) || (targetWorkspace.Type == esriWorkspaceType.esriFileSystemWorkspace)) { return; // Should be a throw } //create source workspace name IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; //create target workspace name IDataset targetWorkspaceDataset = (IDataset)targetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; //Create Name Object Based on data type IDatasetName datasetName; switch (esriDataType) { case esriDatasetType.esriDTFeatureDataset: IFeatureDatasetName inFeatureDatasetName = new FeatureDatasetNameClass(); datasetName = (IDatasetName)inFeatureDatasetName; inFeatureDatasetName = null; break; case esriDatasetType.esriDTFeatureClass: IFeatureClassName inFeatureClassName = new FeatureClassNameClass(); datasetName = (IDatasetName)inFeatureClassName; inFeatureClassName = null; break; case esriDatasetType.esriDTTable: ITableName inTableName = new TableNameClass(); datasetName = (IDatasetName)inTableName; inTableName = null; break; case esriDatasetType.esriDTGeometricNetwork: IGeometricNetworkName inGeometricNetworkName = new GeometricNetworkNameClass(); datasetName = (IDatasetName)inGeometricNetworkName; inGeometricNetworkName = null; break; case esriDatasetType.esriDTRelationshipClass: IRelationshipClassName inRelationshipClassName = new RelationshipClassNameClass(); datasetName = (IDatasetName)inRelationshipClassName; inRelationshipClassName = null; break; case esriDatasetType.esriDTNetworkDataset: INetworkDatasetName inNetworkDatasetName = new NetworkDatasetNameClass(); datasetName = (IDatasetName)inNetworkDatasetName; inNetworkDatasetName = null; break; case esriDatasetType.esriDTTopology: ITopologyName inTopologyName = new TopologyNameClass(); datasetName = (IDatasetName)inTopologyName; inTopologyName = null; break; default: return; // Should be a throw } // Set the name of the object to be copied datasetName.WorkspaceName = (IWorkspaceName)sourceWorkspaceName; datasetName.Name = objectName; //Setup mapping for copy/paste IEnumNameMapping fromNameMapping; ESRI.ArcGIS.esriSystem.IEnumNameEdit editFromName; ESRI.ArcGIS.esriSystem.IEnumName fromName = new NamesEnumerator(); editFromName = (ESRI.ArcGIS.esriSystem.IEnumNameEdit)fromName; editFromName.Add((ESRI.ArcGIS.esriSystem.IName)datasetName); ESRI.ArcGIS.esriSystem.IName toName = (ESRI.ArcGIS.esriSystem.IName)targetWorkspaceName; // Generate name mapping ESRI.ArcGIS.Geodatabase.IGeoDBDataTransfer geoDBDataTransfer = new GeoDBDataTransferClass(); bool targetWorkspaceExists; targetWorkspaceExists = geoDBDataTransfer.GenerateNameMapping(fromName, toName, out fromNameMapping); // Copy/Pate the data geoDBDataTransfer.Transfer(fromNameMapping, toName); System.Runtime.InteropServices.Marshal.ReleaseComObject(geoDBDataTransfer); System.Runtime.InteropServices.Marshal.ReleaseComObject(datasetName); System.Runtime.InteropServices.Marshal.ReleaseComObject(fromName); System.Runtime.InteropServices.Marshal.ReleaseComObject(editFromName); System.Runtime.InteropServices.Marshal.ReleaseComObject(fromNameMapping); geoDBDataTransfer = null; datasetName = null; editFromName = null; fromName = null; sourceWorkspaceDataset = null; sourceWorkspaceName = null; targetWorkspaceDataset = null; targetWorkspaceName = null; toName = null; fromNameMapping = null; }
public IFeatureClass CreateShapefile(string ParentDirectory, string sWorkspaceName, string FileName, string geotype) { if (System.IO.Directory.Exists(ParentDirectory + sWorkspaceName)) { System.IO.Directory.Delete(ParentDirectory + sWorkspaceName, true); } //创建针对shape文件的工作空间工场对象 //通过参数创建相关工作空间(文件夹),用于包含shape文件 IWorkspaceFactory WorkspaceFactory = new ShapefileWorkspaceFactoryClass(); IWorkspaceName WorkspaceName = WorkspaceFactory.Create(ParentDirectory, sWorkspaceName, null, 0); ESRI.ArcGIS.esriSystem.IName name = WorkspaceName as ESRI.ArcGIS.esriSystem.IName; //打开新建的工作空间,并通过IFeatureWorkspace接口访问它 IWorkspace workspace = (IWorkspace)name.Open(); IFeatureWorkspace featureworkspace = workspace as IFeatureWorkspace; //创建、编辑shape文件的字段 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); //创建并编辑“名称”字段 fieldedit = new FieldClass(); fieldedit.Name_2 = "Name"; fieldedit.AliasName_2 = "名称"; fieldedit.Type_2 = esriFieldType.esriFieldTypeString; fieldsedit.AddField((IField)fieldedit); IGeometryDefEdit geodefedit = new GeometryDefClass(); ISpatialReference spatialreference = m_map.SpatialReference; geodefedit.SpatialReference_2 = spatialreference; //geotype这个字符串变量代表了要素类的几何类型 switch (geotype) { case "Point": geodefedit.GeometryType_2 = esriGeometryType.esriGeometryPoint; break; case "Line": geodefedit.GeometryType_2 = esriGeometryType.esriGeometryPolyline; break; case "Polygon": geodefedit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; break; default: geodefedit.GeometryType_2 = esriGeometryType.esriGeometryPoint; break; } fieldedit = new FieldClass(); //创建“形状”字段来表示要素类的集合类型 string shapename = "Shape"; fieldedit.Name_2 = shapename; fieldedit.AliasName_2 = "形状"; fieldedit.Type_2 = esriFieldType.esriFieldTypeGeometry; fieldedit.GeometryDef_2 = geodefedit; fieldsedit.AddField((IField)fieldedit); IFeatureClass featureclass = featureworkspace.CreateFeatureClass(FileName, fields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); if (featureclass == null) { return(null); } return(featureclass); }
/// <summary> /// 字段匹配 /// </summary> /// <param name="sourceFeatClass"></param> /// <param name="targetFeatClass"></param> /// <param name="FieldPair"></param> /// <returns></returns> public static ESRI.ArcGIS.Geoprocessing.IGPFieldMapping GetGPFieldMapping(ESRI.ArcGIS.Geodatabase.IFeatureClass sourceFeatClass, ESRI.ArcGIS.Geodatabase.IFeatureClass targetFeatClass, string FieldPair) { ESRI.ArcGIS.Geodatabase.IDataset sourceDataset = sourceFeatClass as ESRI.ArcGIS.Geodatabase.IDataset; ESRI.ArcGIS.esriSystem.IName pName = sourceDataset.FullName; ESRI.ArcGIS.Geoprocessing.IGPUtilities gputilities = new ESRI.ArcGIS.Geoprocessing.GPUtilitiesClass(); ESRI.ArcGIS.Geodatabase.IDETable inputTableA = (ESRI.ArcGIS.Geodatabase.IDETable)gputilities.MakeDataElementFromNameObject(pName); ESRI.ArcGIS.esriSystem.IArray inputtables = new ESRI.ArcGIS.esriSystem.ArrayClass(); inputtables.Add(inputTableA); ESRI.ArcGIS.Geoprocessing.IGPFieldMapping pGPFieldMapping = new ESRI.ArcGIS.Geoprocessing.GPFieldMappingClass(); pGPFieldMapping.Initialize(inputtables, null); string[] sFieldPairs = FieldPair.Split(';'); if (sFieldPairs == null) { return(null); } foreach (string sFieldPair in sFieldPairs) { try { if (string.IsNullOrWhiteSpace(sFieldPair)) { continue; } string[] sourceAndtarget = sFieldPair.Split(','); if (sourceAndtarget == null || sourceAndtarget.Length <= 0) { continue; } string targetFieldName = sourceAndtarget[0]; string sourceFieldName = sourceAndtarget[1]; int sourceindex = sourceFeatClass.FindField(sourceFieldName); int targetindex = targetFeatClass.FindField(targetFieldName); if (sourceindex < 0 || targetindex < 0) { continue; } ESRI.ArcGIS.Geoprocessing.IGPFieldMap trackid = new ESRI.ArcGIS.Geoprocessing.GPFieldMapClass(); trackid.OutputField = targetFeatClass.Fields.get_Field(targetFeatClass.FindField(targetFieldName)); trackid.MergeRule = ESRI.ArcGIS.Geoprocessing.esriGPFieldMapMergeRule.esriGPFieldMapMergeRuleLast; int fieldmap_index = pGPFieldMapping.FindFieldMap(sourceFieldName); ESRI.ArcGIS.Geoprocessing.IGPFieldMap stfid_fieldmap = pGPFieldMapping.GetFieldMap(fieldmap_index); int field_index = stfid_fieldmap.FindInputField(inputTableA, sourceFieldName); ESRI.ArcGIS.Geodatabase.IField inputField = stfid_fieldmap.GetField(field_index); //if (inputField.Name == "STLLZ") //{ // ESRI.ArcGIS.Geodatabase.IField field = targetFeatClass.Fields.get_Field(targetFeatClass.FindField(targetFieldName)); //} trackid.AddInputField(inputTableA, inputField, -1, -1); pGPFieldMapping.AddFieldMap(trackid); } catch (Exception ex) { } } return(pGPFieldMapping); }
//Function: Create Shapefile //Date: 2019/4/12 public IFeatureClass CreateShapefile(IFields fields, string sParentDirectory, string sWorkspaceName, //the name of the folder that contains the shapefile string sFilename, string sGeometryType) //the geometry type of shapefile { 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; 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); fieldEdit = new FieldClass(); fieldEdit.Name_2 = "Name"; fieldEdit.AliasName_2 = "名称"; fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; fieldsEdit.AddField((IField)fieldEdit); //Change shape type IGeometryDefEdit geoDefEdit = new GeometryDefClass(); ISpatialReference spatialReference = m_map.SpatialReference; geoDefEdit.SpatialReference_2 = spatialReference; if (sGeometryType == "Point") { geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; } else if (sGeometryType == "Line") { geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryLine; } else if (sGeometryType == "Polygon") { geoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; } //change shapetype 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); //create feature class IFeatureClass featureClass = featureWorkspace.CreateFeatureClass(sFilename, fields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); if (featureClass == null) { return(null); } return(featureClass); }