/// <summary> /// 复制要素集(ConvertFeatureDataset) /// </summary> /// <param name="sourceWorkspace"></param> /// <param name="targetWorkspace"></param> /// <param name="nameOfSourceFeatureDataset"></param> /// <param name="nameOfTargetFeatureDataset"></param> public void IFeatureDataConverter_ConvertFeatureDataset(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureDataset, string nameOfTargetFeatureDataset) { //create source workspace name IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; //create source dataset name IFeatureDatasetName sourceFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureDatasetName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = nameOfSourceFeatureDataset; //create target workspace name IDataset targetWorkspaceDataset = (IDataset)targetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; //create target dataset name IFeatureDatasetName targetFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureDatasetName; targetDatasetName.WorkspaceName = targetWorkspaceName; targetDatasetName.Name = nameOfTargetFeatureDataset; //Convert feature dataset IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass(); featureDataConverter.ConvertFeatureDataset(sourceFeatureDatasetName, targetFeatureDatasetName, null, "", 1000, 0); //Console.WriteLine("Conversion Complete"); }
public static bool ConvertFeatureDataset(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureDataset, string nameOfTargetFeatureDataset) { try { //create source workspace name IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; //create source dataset name IFeatureDatasetName sourceFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureDatasetName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = nameOfSourceFeatureDataset; //create target workspace name IDataset targetWorkspaceDataset = (IDataset)targetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; //create target dataset name IFeatureDatasetName targetFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureDatasetName; targetDatasetName.WorkspaceName = targetWorkspaceName; targetDatasetName.Name = nameOfTargetFeatureDataset; //Convert feature dataset IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass(); featureDataConverter.ConvertFeatureDataset(sourceFeatureDatasetName, targetFeatureDatasetName, null, "", 1000, 0); return(true); } catch { return(false); } }
/// <summary> /// Deletes the dataset. /// </summary> /// <param name="targetWorkspace">The target workspace.</param> /// <param name="sTargetName">Name of the s target.</param> /// <param name="type">The type.</param> public static void DeleteDataset(IWorkspace targetWorkspace, string sTargetName, esriDatasetType type = esriDatasetType.esriDTFeatureClass) { IDatasetName datasetName = null; switch (type) { case esriDatasetType.esriDTFeatureDataset: datasetName = new FeatureDatasetNameClass(); break; case esriDatasetType.esriDTFeatureClass: datasetName = new FeatureClassNameClass(); break; default: if (type == esriDatasetType.esriDTTable) { datasetName = new TableNameClass(); } break; } if (datasetName != null) { datasetName.Name = sTargetName; datasetName.WorkspaceName = ((targetWorkspace as IDataset).FullName as IWorkspaceName); EngineAPI.DeleteDataset(targetWorkspace, datasetName); } }
public void ConvertMDBFeatureDatasetToSDE(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureDataset, string nameOfTargetFeatureDataset) { if (sourceWorkspace == null || targetWorkspace == null) { return; } //创建源工作空间名 IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; //创建源数据集名 IFeatureDatasetName sourceFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureDatasetName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = nameOfSourceFeatureDataset; //创建目标工作空间名 IDataset targetWorkspaceDataset = (IDataset)targetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; //创建目标数据集名 IFeatureDatasetName targetFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureDatasetName; targetDatasetName.WorkspaceName = targetWorkspaceName; targetDatasetName.Name = nameOfTargetFeatureDataset; //转换(复制)源数据集到目标数据集 IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass(); featureDataConverter.ConvertFeatureDataset(sourceFeatureDatasetName, targetFeatureDatasetName, null, "", 1000, 0); }
/// <summary> /// SDE要素类导出mdb(要素集下要素类) /// </summary> /// <param name="IN_SourceWorkspace">源工作空间</param> /// <param name="IN_TargetWorkspace">目标要素数据集</param> /// <param name="IN_SourceFeatureClassName">源要素类名</param> /// <param name="IN_TargetFeatureClassName">目标要素类名</param> private void ConvertFeatureClass(IWorkspace IN_SourceWorkspace, IFeatureDataset IN_TargetWorkspace, string IN_SourceFeatureClassName, string IN_TargetFeatureClassName) { #region 环境配置 //创建源工作空间名 IDataset Temp_SourceWorkspaceDataset = (IDataset)IN_SourceWorkspace; IWorkspaceName Temp_SourceWorkspaceName = (IWorkspaceName)Temp_SourceWorkspaceDataset.FullName; //创建源要素数据集名 IFeatureClassName Temp_SourceFeatureClassName = new FeatureClassNameClass(); IDatasetName Temp_SourceDatasetName = (IDatasetName)Temp_SourceFeatureClassName; Temp_SourceDatasetName.WorkspaceName = Temp_SourceWorkspaceName; Temp_SourceDatasetName.Name = IN_SourceFeatureClassName; //创建目标工作空间名 IDataset Temp_TargetWorkspaceDataset = (IDataset)IN_TargetWorkspace.Workspace; IWorkspaceName Temp_TargetWorkspaceName = (IWorkspaceName)(Temp_TargetWorkspaceDataset.FullName); //创建目标要素类名 IFeatureClassName Temp_TargetFeatureClassName = new FeatureClassNameClass(); IDatasetName Temp_TargetDatasetName = (IDatasetName)Temp_TargetFeatureClassName; Temp_TargetDatasetName.WorkspaceName = Temp_TargetWorkspaceName; Temp_TargetDatasetName.Name = IN_TargetFeatureClassName; //创建目标要素数据集名 IFeatureDatasetName Temp_TargetFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName Temp_TargetDatasetName2 = (IDatasetName)Temp_TargetFeatureDatasetName; Temp_TargetDatasetName2.WorkspaceName = Temp_TargetWorkspaceName; Temp_TargetDatasetName2.Name = IN_TargetWorkspace.Name; #endregion //打开源要素类获取字段定义 ESRI.ArcGIS.esriSystem.IName Temp_SourceName = (ESRI.ArcGIS.esriSystem.IName)Temp_SourceFeatureClassName; IFeatureClass Temp_SourceFeatureClass = (IFeatureClass)Temp_SourceName.Open(); //验证字段 IFieldChecker Temp_FieldChecker = new FieldCheckerClass(); IFields Temp_TargetFeatureClassFields; IFields Temp_SourceFeatureClassFields = Temp_SourceFeatureClass.Fields; IEnumFieldError enumFieldError; Temp_FieldChecker.InputWorkspace = IN_SourceWorkspace; Temp_FieldChecker.ValidateWorkspace = IN_TargetWorkspace.Workspace; Temp_FieldChecker.Validate(Temp_SourceFeatureClassFields, out enumFieldError, out Temp_TargetFeatureClassFields); //批量导入 IField Temp_GeometryField; for (int i = 0; i < Temp_TargetFeatureClassFields.FieldCount; i++) { if (Temp_TargetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { Temp_GeometryField = Temp_TargetFeatureClassFields.get_Field(i); //获取空间定义 IGeometryDef Temp_GeometryDef = Temp_GeometryField.GeometryDef; IGeometryDefEdit Temp_TargetFCGeoDefEdit = (IGeometryDefEdit)Temp_GeometryDef; Temp_TargetFCGeoDefEdit.GridCount_2 = 1; Temp_TargetFCGeoDefEdit.set_GridSize(0, 0); Temp_TargetFCGeoDefEdit.SpatialReference_2 = Temp_GeometryField.GeometryDef.SpatialReference; //定义筛选条件 IQueryFilter Temp_QueryFilter = new QueryFilterClass(); Temp_QueryFilter.WhereClause = ""; //导入要素类至要素数据集 IFeatureDataConverter Temp_FeatureDataConverter = new FeatureDataConverterClass(); IEnumInvalidObject enumErrors = Temp_FeatureDataConverter.ConvertFeatureClass(Temp_SourceFeatureClassName, Temp_QueryFilter, Temp_TargetFeatureDatasetName, Temp_TargetFeatureClassName, Temp_GeometryDef, Temp_TargetFeatureClassFields, "", 1000, 0); break; } } }
public static IFeatureDataset GetFeatureDataset(IWorkspaceName workspaceName, string featureDatasetName) { try { IDatasetName pFeatureDatasetName = new FeatureDatasetNameClass { Name = featureDatasetName, WorkspaceName = workspaceName }; //Open the FeatureDataset IName name = (IName)pFeatureDatasetName; return((IFeatureDataset)name.Open()); } catch (Exception ex) { LOG.Error(ex, $"打开数据集[{featureDatasetName}]失败"); } return(null); }
private IDatasetName method_2(IDatasetName idatasetName_0, string string_0) { try { new GxCadDataset(); IDatasetName name = new FeatureDatasetNameClass(); IWorkspaceName name2 = new WorkspaceNameClass { WorkspaceFactoryProgID = "esriDataSourcesFile.CadWorkspaceFactory", PathName = idatasetName_0.WorkspaceName.PathName }; name.Name = idatasetName_0.Name + ":" + string_0; name.WorkspaceName = name2; return(name); } catch (Exception exception) { Logger.Current.Error("", exception, ""); } return(null); }
public static void Project(IFeatureDataset ifeatureDataset_0, ISpatialReference ispatialReference_0, IWorkspace iworkspace_0, string string_0) { IGeometryDef outputGeometryDef = new GeometryDefClass(); ISpatialReference spatialReference = ((IGeoDataset)ifeatureDataset_0).SpatialReference; ((IGeometryDefEdit)outputGeometryDef).SpatialReference_2 = ispatialReference_0; IWorkspace workspace = ifeatureDataset_0.Workspace; IFeatureDataConverter converter = new FeatureDataConverterClass(); IWorkspaceName name = new WorkspaceNameClass { ConnectionProperties = workspace.ConnectionProperties, WorkspaceFactoryProgID = workspace.WorkspaceFactory.GetClassID().Value.ToString() }; IWorkspaceName name2 = new WorkspaceNameClass(); new PropertySetClass(); name2.ConnectionProperties = iworkspace_0.ConnectionProperties; name2.WorkspaceFactoryProgID = iworkspace_0.WorkspaceFactory.GetClassID().Value.ToString(); IDatasetName name3 = new FeatureDatasetNameClass(); string str = ifeatureDataset_0.Name; int num = str.LastIndexOf("."); if (num != -1) { str = str.Substring(num + 1); } name3.Name = str; name3.WorkspaceName = name; IDatasetName name4 = new FeatureDatasetNameClass { WorkspaceName = name2, Name = string_0 }; converter.ConvertFeatureDataset((IFeatureDatasetName)name3, (IFeatureDatasetName)name4, outputGeometryDef, "", 1000, 0); }
internal static IName RicavaDatasetName(IDataset datasetInput, IWorkspaceName workspaceName) { IDatasetName datasetName = null; switch (datasetInput.Type) { case esriDatasetType.esriDTFeatureDataset: IFeatureDatasetName InFeatureDatasetName = new FeatureDatasetNameClass(); datasetName = (IDatasetName)InFeatureDatasetName; break; case esriDatasetType.esriDTFeatureClass: IFeatureClassName InFeatureClassName = new FeatureClassNameClass(); datasetName = (IDatasetName)InFeatureClassName; break; case esriDatasetType.esriDTTable: ITableName InTableName = new TableNameClass(); datasetName = (IDatasetName)InTableName; break; case esriDatasetType.esriDTGeometricNetwork: IGeometricNetworkName InGeometricNetworkName = new GeometricNetworkNameClass(); datasetName = (IDatasetName)InGeometricNetworkName; break; default: return(null); } // Set the name and workspace name of the new name object. datasetName.Name = datasetInput.Name; datasetName.WorkspaceName = workspaceName; // Cast the object to the IName interface and return it. IName name = (IName)datasetName; return(name); }
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; }
private void axMapControl1_OnOleDrop(object sender, IMapControlEvents2_OnOleDropEvent e) { IDataObjectHelper dataObjectHelper = (IDataObjectHelper)e.dataObjectHelper; esriControlsDropAction dropAction = e.dropAction; e.effect = 0; switch (dropAction) { case esriControlsDropAction.esriDropEnter: if (dataObjectHelper.CanGetFiles() | dataObjectHelper.CanGetNames()) { this.m_Effect = esriControlsDragDropEffect.esriDragDropCopy; } else if (dataObjectHelper.InternalObject is IDataObject) { this.m_Effect = esriControlsDragDropEffect.esriDragDropCopy; } break; case esriControlsDropAction.esriDropOver: e.effect = (int)this.m_Effect; break; } if (dropAction == esriControlsDropAction.esriDropped) { int num; if (dataObjectHelper.CanGetFiles()) { System.Array files = System.Array.CreateInstance(typeof(string), 0, 0); files = (System.Array)dataObjectHelper.GetFiles(); for (num = 0; num <= (files.Length - 1); num++) { if (this.axMapControl1.CheckMxFile(files.GetValue(num).ToString())) { try { this.axMapControl1.LoadMxFile(files.GetValue(num).ToString(), System.Type.Missing, ""); } catch (Exception exception) { MessageBox.Show("Error:" + exception.Message); return; } } else { IFileName name = new FileNameClass { Path = files.GetValue(num).ToString() }; this.CreateLayer((IName)name); } } } else if (dataObjectHelper.CanGetNames()) { IEnumName names = dataObjectHelper.GetNames(); names.Reset(); for (IName name3 = names.Next(); name3 != null; name3 = names.Next()) { this.CreateLayer(name3); } } if (dataObjectHelper.InternalObject is IDataObject) { IList data = (dataObjectHelper.InternalObject as IDataObject).GetData("System.Collections.ArrayList") as IList; for (num = 0; num < data.Count; num++) { IWorkspaceName workspaceName; IWorkspaceName name6; object obj3 = data[num]; if (obj3 is IFeatureDatasetName) { IFeatureDatasetName name4 = new FeatureDatasetNameClass(); workspaceName = (obj3 as IDatasetName).WorkspaceName; name6 = new WorkspaceNameClass { WorkspaceFactoryProgID = workspaceName.WorkspaceFactoryProgID }; if (workspaceName.ConnectionProperties != null) { name6.ConnectionProperties = workspaceName.ConnectionProperties; } else { name6.PathName = workspaceName.PathName; } (name4 as IDatasetName).WorkspaceName = name6; (name4 as IDatasetName).Name = (obj3 as IDatasetName).Name; this.CreateLayer(name4 as IName); } else if (obj3 is IRasterDatasetName) { IRasterDatasetName name7 = new RasterDatasetNameClass(); workspaceName = (obj3 as IDatasetName).WorkspaceName; name6 = new WorkspaceNameClass { WorkspaceFactoryProgID = workspaceName.WorkspaceFactoryProgID }; if (workspaceName.ConnectionProperties != null) { name6.ConnectionProperties = workspaceName.ConnectionProperties; } else { name6.PathName = workspaceName.PathName; } (name7 as IDatasetName).WorkspaceName = name6; (name7 as IDatasetName).Name = (obj3 as IDatasetName).Name; this.CreateLayer(name7 as IName); } else if (obj3 is IDatasetName) { IDatasetName name8 = null; if ((obj3 as IDatasetName).Type == esriDatasetType.esriDTTin) { name8 = new TinNameClass(); } if ((obj3 as IDatasetName).Type == esriDatasetType.esriDTFeatureClass) { name8 = new FeatureClassNameClass(); (name8 as IFeatureClassName).FeatureDatasetName = (obj3 as IFeatureClassName).FeatureDatasetName; } else if ((obj3 as IDatasetName).Type == esriDatasetType.esriDTTopology) { name8 = new TopologyNameClass(); (name8 as ITopologyName).FeatureDatasetName = (obj3 as ITopologyName).FeatureDatasetName; } else if ((obj3 as IDatasetName).Type == esriDatasetType.esriDTRasterBand) { name8 = new RasterBandNameClass(); (name8 as IRasterBandName).RasterDatasetName = (obj3 as IRasterBandName).RasterDatasetName; } else if ((obj3 as IDatasetName).Type == esriDatasetType.esriDTGeometricNetwork) { name8 = new GeometricNetworkNameClass(); (name8 as IGeometricNetworkName).FeatureDatasetName = (obj3 as IGeometricNetworkName).FeatureDatasetName; } else if ((obj3 as IDatasetName).Type == esriDatasetType.esriDTRasterCatalog) { name8 = new RasterCatalogNameClass(); (name8 as IFeatureClassName).FeatureDatasetName = (obj3 as IFeatureClassName).FeatureDatasetName; } else if ((obj3 as IDatasetName).Type == esriDatasetType.esriDTNetworkDataset) { name8 = new NetworkDatasetNameClass(); (name8 as INetworkDatasetName).FeatureDatasetName = (obj3 as INetworkDatasetName).FeatureDatasetName; } if (name8 != null) { if (name8.WorkspaceName == null) { workspaceName = (obj3 as IDatasetName).WorkspaceName; name6 = new WorkspaceNameClass { WorkspaceFactoryProgID = workspaceName.WorkspaceFactoryProgID }; if (workspaceName.ConnectionProperties != null) { name6.ConnectionProperties = workspaceName.ConnectionProperties; } else { name6.PathName = workspaceName.PathName; } name8.WorkspaceName = name6; } name8.Name = (obj3 as IDatasetName).Name; this.CreateLayer(name8 as IName); } } else if (obj3 is IWorkspaceName) { workspaceName = obj3 as IWorkspaceName; name6 = new WorkspaceNameClass { WorkspaceFactoryProgID = workspaceName.WorkspaceFactoryProgID }; if (workspaceName.ConnectionProperties != null) { name6.ConnectionProperties = workspaceName.ConnectionProperties; } else { name6.PathName = workspaceName.PathName; } this.CreateLayer(name6 as IName); } else if (obj3 is IPropertySet) { IPropertySet set = obj3 as IPropertySet; ILayer property = set.GetProperty("Layer") as ILayer; this.axMapControl1.AddLayer(property, 0); } } } } }
string m_strErr; //错误信息提醒 //SHP数据入库到GDB数据库的方法 private void ImportFeatureClassToNewWorkSpace(string filename, string outfilename) { //try //{ m_success = false; //初始化 string ImportShapeFileName = filename; string ExportFileShortName = outfilename; if (ImportShapeFileName == "") { return; } string ImportFileShortName = System.IO.Path.GetFileNameWithoutExtension(ImportShapeFileName); string ImportFilePath = System.IO.Path.GetDirectoryName(ImportShapeFileName); //打开存在的工作空间,作为导入的空间 IWorkspaceFactory Pwf = new FileGDBWorkspaceFactoryClass(); //IWorkspace pWorkspace = Pwf.OpenFromFile(GetSourcePath(comboBoxSource.Text), 0); // IWorkspace2 pWorkspace2 =(IWorkspace2)(Pwf.OpenFromFile(GetSourcePath(comboBoxSource.Text), 0)); IWorkspace pWorkspace = GetWorkspace(comboBoxSource.Text); if (pWorkspace == null) { m_strErr = "数据源未找到"; m_success = false; return; } string username = GetSourceUser(comboBoxSource.Text); if (username.Trim() != "") { ExportFileShortName = username + "." + ExportFileShortName; } IWorkspace2 pWorkspace2 = pWorkspace as IWorkspace2; //判断要素是否存在,若存在将删除源文件 if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, ExportFileShortName)) { if (m_newfile == true) { IFeatureClass tmpfeatureclass; IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace; tmpfeatureclass = pFeatureWorkspace.OpenFeatureClass(ExportFileShortName); IDataset set = tmpfeatureclass as IDataset; fdr.DeleteSql(ExportFileShortName); set.CanDelete(); set.Delete(); } else { //MessageBox.Show("存在相同文件名", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); m_strErr = "存在相同文件名"; m_success = false; return; } } IWorkspaceName pInWorkspaceName; IFeatureDatasetName pOutFeatureDSName; IFeatureClassName pInFeatureClassName; IDatasetName pInDatasetName; IFeatureClassName pOutFeatureClassName; IDatasetName pOutDatasetName; long iCounter; IFields pOutFields, pInFields; IFieldChecker pFieldChecker; IField pGeoField; IGeometryDef pOutGeometryDef; IGeometryDefEdit pOutGeometryDefEdit; IName pName; IFeatureClass pInFeatureClass; IFeatureDataConverter pShpToClsConverter; IEnumFieldError pEnumFieldError = null; //得到一个输入SHP文件的工作空间, pInWorkspaceName = new WorkspaceNameClass(); pInWorkspaceName.PathName = ImportFilePath; pInWorkspaceName.WorkspaceFactoryProgID = "esriCore.ShapefileWorkspaceFactory.1"; //创建一个新的要素类名称,目的是为了以来PNAME接口的OPEN方法打开SHP文件 pInFeatureClassName = new FeatureClassNameClass(); pInDatasetName = (IDatasetName)pInFeatureClassName; pInDatasetName.Name = ImportFileShortName; pInDatasetName.WorkspaceName = pInWorkspaceName; //打开一个SHP文件,将要读取它的字段集合 pName = (IName)pInFeatureClassName; pInFeatureClass = (IFeatureClass)pName.Open(); //通过FIELDCHECKER检查字段的合法性,为输入要素类获得字段集合 pInFields = pInFeatureClass.Fields; pFieldChecker = new FieldChecker(); pFieldChecker.Validate(pInFields, out pEnumFieldError, out pOutFields); //通过循环查找几何字段 pGeoField = null; for (iCounter = 0; iCounter < pOutFields.FieldCount; iCounter++) { if (pOutFields.get_Field((int)iCounter).Type == esriFieldType.esriFieldTypeGeometry) { pGeoField = pOutFields.get_Field((int)iCounter); break; } } //得到几何字段的几何定义 pOutGeometryDef = pGeoField.GeometryDef; //设置几何字段的空间参考和网格 pOutGeometryDefEdit = (IGeometryDefEdit)pOutGeometryDef; pOutGeometryDefEdit.GridCount_2 = 1; pOutGeometryDefEdit.set_GridSize(0, 1500000); //创建一个新的要素类名称作为可用的参数 pOutFeatureClassName = new FeatureClassNameClass(); pOutDatasetName = (IDatasetName)pOutFeatureClassName; pOutDatasetName.Name = ExportFileShortName; //创建一个新的数据集名称作为可用的参数 pOutFeatureDSName = (IFeatureDatasetName) new FeatureDatasetName(); //如果参数的值是NULL,说明要创建独立要素类 //创建一个不存在的要素集合pFDN,通过它将IFeatureClassName和工作空间连接起来,而ConvertFeatureClass函数并不使用该变量作为参数, IFeatureDatasetName pFDN = new FeatureDatasetNameClass(); IDatasetName pDN = (IDatasetName)pFDN; IDataset pDS = (IDataset)pWorkspace; pDN.WorkspaceName = (IWorkspaceName)pDS.FullName; pOutFeatureClassName.FeatureDatasetName = (IDatasetName)pFDN; //将pOutFeatureDSName设置为Null,将它做为参数给ConvertFeatureClass函数,因为IFeatureClassName本身已经和工作空间关联了,生成的 //要素类在工作空间的根目录下,即独立要素类 pOutFeatureDSName = null; //开始导入 if (InsertIntoDatabase(ExportFileShortName)) { pShpToClsConverter = new FeatureDataConverterClass(); pShpToClsConverter.ConvertFeatureClass(pInFeatureClassName, null, pOutFeatureDSName, pOutFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0); //MessageBox.Show("导入成功", "提示"); m_success = true; } //} //catch //{ // m_success = false; //} }
public void ConvertMDBFeatureDatasetToSDE(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureDataset, string nameOfTargetFeatureDataset) { if (sourceWorkspace == null || targetWorkspace == null) { return; } //创建源工作空间名 IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace; IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName; //创建源数据集名 IFeatureDatasetName sourceFeatureDatasetName =new FeatureDatasetNameClass(); IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureDatasetName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = nameOfSourceFeatureDataset; //创建目标工作空间名 IDataset targetWorkspaceDataset = (IDataset)targetWorkspace; IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName; //创建目标数据集名 IFeatureDatasetName targetFeatureDatasetName = new FeatureDatasetNameClass(); IDatasetName targetDatasetName = (IDatasetName)targetFeatureDatasetName; targetDatasetName.WorkspaceName = targetWorkspaceName; targetDatasetName.Name = nameOfTargetFeatureDataset; //转换(复制)源数据集到目标数据集 IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass(); featureDataConverter.ConvertFeatureDataset(sourceFeatureDatasetName, targetFeatureDatasetName, null, "", 1000, 0); }
private void ImportFeatureClassToNewWorkSpace(string filename, string outfilename) { //try //{ string ImportShapeFileName = filename; if (ImportShapeFileName == "") { return; } string ImportFileShortName = System.IO.Path.GetFileNameWithoutExtension(ImportShapeFileName); string ExportFileShortName = System.IO.Path.GetFileNameWithoutExtension(outfilename); string ImportFilePath = System.IO.Path.GetDirectoryName(ImportShapeFileName); IWorkspaceFactory Pwf = new FileGDBWorkspaceFactoryClass(); IWorkspace pWorkspace = Pwf.OpenFromFile(@comboBox1.Text, 0); //IWorkspaceFactory Pwf = new AccessWorkspaceFactoryClass(); //IWorkspace pWorkspace = Pwf.OpenFromFile(@"E:\test\x.mdb", 0); IWorkspaceName pInWorkspaceName; IFeatureDatasetName pOutFeatureDSName; IFeatureClassName pInFeatureClassName; IDatasetName pInDatasetName; IFeatureClassName pOutFeatureClassName; IDatasetName pOutDatasetName; long iCounter; IFields pOutFields, pInFields; IFieldChecker pFieldChecker; IField pGeoField; IGeometryDef pOutGeometryDef; IGeometryDefEdit pOutGeometryDefEdit; IName pName; IFeatureClass pInFeatureClass; IFeatureDataConverter pShpToClsConverter; IEnumFieldError pEnumFieldError = null; //得到一个输入SHP文件的工作空间, pInWorkspaceName = new WorkspaceNameClass(); pInWorkspaceName.PathName = ImportFilePath; pInWorkspaceName.WorkspaceFactoryProgID = "esriCore.ShapefileWorkspaceFactory.1"; //创建一个新的要素类名称,目的是为了以来PNAME接口的OPEN方法打开SHP文件 pInFeatureClassName = new FeatureClassNameClass(); pInDatasetName = (IDatasetName)pInFeatureClassName; pInDatasetName.Name = ImportFileShortName; pInDatasetName.WorkspaceName = pInWorkspaceName; //打开一个SHP文件,将要读取它的字段集合 pName = (IName)pInFeatureClassName; pInFeatureClass = (IFeatureClass)pName.Open(); //通过FIELDCHECKER检查字段的合法性,为输入要素类获得字段集合 pInFields = pInFeatureClass.Fields; pFieldChecker = new FieldChecker(); pFieldChecker.Validate(pInFields, out pEnumFieldError, out pOutFields); //通过循环查找几何字段 pGeoField = null; for (iCounter = 0; iCounter < pOutFields.FieldCount; iCounter++) { if (pOutFields.get_Field((int)iCounter).Type == esriFieldType.esriFieldTypeGeometry) { pGeoField = pOutFields.get_Field((int)iCounter); break; } } //得到几何字段的几何定义 pOutGeometryDef = pGeoField.GeometryDef; //设置几何字段的空间参考和网格 pOutGeometryDefEdit = (IGeometryDefEdit)pOutGeometryDef; pOutGeometryDefEdit.GridCount_2 = 1; pOutGeometryDefEdit.set_GridSize(0, 1500000); //创建一个新的要素类名称作为可用的参数 pOutFeatureClassName = new FeatureClassNameClass(); pOutDatasetName = (IDatasetName)pOutFeatureClassName; pOutDatasetName.Name = ExportFileShortName; //创建一个新的数据集名称作为可用的参数 pOutFeatureDSName = (IFeatureDatasetName) new FeatureDatasetName(); //如果参数的值是NULL,说明要创建独立要素类 //创建一个不存在的要素集合pFDN,通过它将IFeatureClassName和工作空间连接起来,而ConvertFeatureClass函数并不使用该变量作为参数, IFeatureDatasetName pFDN = new FeatureDatasetNameClass(); IDatasetName pDN = (IDatasetName)pFDN; IDataset pDS = (IDataset)pWorkspace; pDN.WorkspaceName = (IWorkspaceName)pDS.FullName; pOutFeatureClassName.FeatureDatasetName = (IDatasetName)pFDN; //将pOutFeatureDSName设置为Null,将它做为参数给ConvertFeatureClass函数,因为IFeatureClassName本身已经和工作空间关联了,生成的 //要素类在工作空间的根目录下,即独立要素类 pOutFeatureDSName = null; //开始导入 pShpToClsConverter = new FeatureDataConverterClass(); pShpToClsConverter.ConvertFeatureClass(pInFeatureClassName, null, pOutFeatureDSName, pOutFeatureClassName, null, pOutFields, "", 1000, 0); MessageBox.Show("导入成功", "系统提示"); //} //catch //{ // MessageBox.Show("导入失败", "系统提示"); //} }
/// <summary> /// performs a simple copy of database object /// </summary> /// <param name="parentObjClass">the parent object</param> /// <param name="outWks">out Workspace</param> /// <returns>the new feature object</returns> public IObjectClass simpleCopyObj(object parentObjClass, IWorkspace outWks) { IObjectClass outCls = null; IQueryFilter qyf = new QueryFilterClass(); IFeatureDataConverter2 fdConv2 = new FeatureDataConverterClass(); IDataset dSet = (IDataset)parentObjClass; esriDatasetType pDsetType = dSet.Type; string bn = dSet.BrowseName; string sbn = bn.Substring(bn.LastIndexOf(".")+1); IDatasetName dSetN = (IDatasetName)dSet.FullName; IDatasetName dSetN2; IWorkspaceName wksN = (IWorkspaceName)((IDataset)outWks).FullName; IFields pfs; if (pDsetType == esriDatasetType.esriDTTable) { ITableName tbn = new TableNameClass(); dSetN2 = (IDatasetName)tbn; dSetN2.Name = sbn; dSetN2.WorkspaceName = wksN; pfs = (IFields)((IClone)((IObjectClass)parentObjClass).Fields).Clone(); updateDomains(ref pfs, outWks); fdConv2.ConvertTable(dSetN,qyf, null, dSetN2, pfs, "",1000, 0); outCls = (IObjectClass)((IName)dSetN2).Open(); } else if (pDsetType == esriDatasetType.esriDTFeatureClass) { IFeatureClass pFtCls = (IFeatureClass)dSet; IFeatureClassName fcn = new FeatureClassNameClass(); IFeatureDatasetName fdn = new FeatureDatasetNameClass(); IDatasetName dSetN3 = (IDatasetName)fdn; dSetN3.WorkspaceName = wksN; IFeatureDataset pFtDs = pFtCls.FeatureDataset; if (pFtDs == null) { dSetN3 = null; fdn = null; } else { string ftDN = pFtCls.FeatureDataset.Name; string ftDNs = ftDN.Substring(ftDN.LastIndexOf(".") + 1); dSetN3.Name = ftDNs; } dSetN2 = (IDatasetName)fcn; dSetN2.Name = sbn; dSetN2.WorkspaceName = wksN; IField pSf = pFtCls.Fields.get_Field(pFtCls.FindField(pFtCls.ShapeFieldName)); pfs = (IFields)((IClone)pFtCls.Fields).Clone(); updateDomains(ref pfs, outWks); fdConv2.ConvertFeatureClass(dSetN, qyf, null, fdn, fcn, (IGeometryDef)((IClone)pSf.GeometryDef).Clone(), pfs, "", 1000, 0); outCls = (IObjectClass)((IName)dSetN2).Open(); } else { } return outCls; }