private void ExportDatasetToXML(string fileGdbPath, string sourceFCName, string outputXmlFile) { // Open the source geodatabase and create a name object for it. IWorkspaceName sourceWorkspaceName = getWorkspaceName("esriDataSourcesGDB.FileGDBWorkspaceFactory", fileGdbPath); IFeatureClassName sourceFeatureClassName = getFeatureClassName(sourceWorkspaceName, sourceFCName); IName sourceName = (IName)sourceFeatureClassName; // Create a new names enumerator and add the feature dataset name. IEnumNameEdit enumNameEdit = new NamesEnumeratorClass(); enumNameEdit.Add(sourceName); IEnumName enumName = (IEnumName)enumNameEdit; // Create a GeoDBDataTransfer object and create a name mapping. IGeoDBDataTransfer geoDBDataTransfer = new GeoDBDataTransferClass(); IEnumNameMapping enumNameMapping = null; geoDBDataTransfer.GenerateNameMapping(enumName, sourceWorkspaceName as IName, out enumNameMapping); // Create an exporter and export the dataset with binary geometry, not compressed, // and including metadata. IGdbXmlExport gdbXmlExport = new GdbExporterClass(); gdbXmlExport.ExportDatasets(enumNameMapping, outputXmlFile, true, false, true); }
public static void ExportToXml(IWorkspace sourceWorkspace, string targetPath,bool binaryGeometry,bool compressed,bool retriveMetadata) { // Open the source geodatabase and create a name object for it. IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass(); //IWorkspace workspace = workspaceFactory.OpenFromFile(databaseName, 0); IDataset workspaceDataset = (IDataset)sourceWorkspace; IName workspaceName = workspaceDataset.FullName; // Retrieve the first feature dataset from the workspace. IEnumDatasetName enumDatasetName = sourceWorkspace.get_DatasetNames (esriDatasetType.esriDTFeatureDataset); enumDatasetName.Reset(); IName featureDatasetName = (IName)enumDatasetName.Next(); if (featureDatasetName == null) { throw new Exception( "No feature datasets exist in the specified geodatabase."); } // Create a new names enumerator and add the feature dataset name. IEnumNameEdit enumNameEdit = new NamesEnumeratorClass(); enumNameEdit.Add(featureDatasetName); IEnumName enumName = (IEnumName)enumNameEdit; // Create a GeoDBDataTransfer object and create a name mapping. IGeoDBDataTransfer geoDBDataTransfer = new GeoDBDataTransferClass(); IEnumNameMapping enumNameMapping = null; geoDBDataTransfer.GenerateNameMapping(enumName, workspaceName, out enumNameMapping); // Create an exporter and export the dataset with binary geometry, not compressed, // and including metadata. IGdbXmlExport gdbXmlExport = new GdbExporterClass(); gdbXmlExport.ExportDatasets(enumNameMapping, targetPath, binaryGeometry, compressed, retriveMetadata); }
private void KTreeView_DragDrop(object sender, DragEventArgs e) { if (this.bool_0) { IGxObject tag = this.treeNode_1.Tag as IGxObject; if (tag is IGxObjectContainer) { this.Expand(this.treeNode_1); IEnumNameEdit edit = new NamesEnumeratorClass(); IEnumerator enumerator = (e.Data.GetData("System.Collections.ArrayList") as ArrayList).GetEnumerator(); enumerator.Reset(); IGxObject current = null; while (enumerator.MoveNext()) { current = enumerator.Current as IGxObject; if (current != null) { edit.Add(current.InternalObjectName); } } if ((tag as IGxPasteTarget).Paste(edit as IEnumName, ref this.bool_1) && this.bool_1) { enumerator.Reset(); while (enumerator.MoveNext()) { current = enumerator.Current as IGxObject; if (current is IGxDataset) { if ((current as IGxDataset).DatasetName.Type == esriDatasetType.esriDTFeatureDataset) { IEnumGxObject children = (current as IGxObjectContainer).Children; children.Reset(); for (IGxObject obj5 = children.Next(); obj5 != null; obj5 = children.Next()) { obj5.Detach(); } } else { current.Detach(); } } else if (current != null) { current.Detach(); } } } if (this.SelectNodeChanged != null) { this.SelectNodeChanged(this); } } } }
private IEnumNameEdit getFCNames(IWorkspace wsp, String tabnames) { Log.p("get featureclass list..."); IEnumNameEdit edtNames = new NamesEnumeratorClass(); String[] tabs = tabnames.Split(','); int numItems = 0; IEnumDatasetName dsetNames = wsp.get_DatasetNames( esriDatasetType.esriDTFeatureClass); //esriDatasetType.esriDTFeatureDataset); IDatasetName dsetName = null; foreach (String t in tabs) { Log.p(String.Format(" tabname is [{0}]", t)); dsetNames.Reset(); while (true) { dsetName = dsetNames.Next(); if (dsetName == null) { break; } //Log.p(String.Format(" check feature class name [{0}]", dsetName.Name)); if (t.ToUpper() == dsetName.Name.ToUpper()) { Log.p(String.Format(" add feature class name [{0}]", dsetName.Name)); edtNames.Add((IName)dsetName); numItems += 1; break; } } if (dsetName == null) { Log.p(String.Format("Error, tabname [{0}] will not exported", t), "both"); } } if (numItems != tabs.GetLength(0)) { throw new ArgumentException("Can't find all of tables in gdb."); } return(edtNames); } // getFCNames
/// <summary> /// Transfers the feature class (and all relationships) to the specified workspace, while preserving the OBJECTID /// values. /// </summary> /// <param name="source">The source.</param> /// <param name="name">The name feature class in the transfer.</param> /// <param name="workspace">The workspace.</param> /// <param name="conflicts">if set to <c>true</c> has conflicts with the export.</param> /// <param name="enumNameMapping">The enum name mapping.</param> /// <returns> /// Returns a <see cref="IFeatureClass" /> representing the feature class in the target workspace. /// </returns> public static IFeatureClass Transfer(this IFeatureClass source, string name, IWorkspace workspace, out bool conflicts, out IEnumNameMapping enumNameMapping) { IDataset ds = (IDataset)source; IName fromName = ds.Workspace.Define(ds.Name, new FeatureClassNameClass()); IEnumName fromNames = new NamesEnumeratorClass(); IEnumNameEdit edit = (IEnumNameEdit)fromNames; edit.Add(fromName); ds.Workspace.Transfer(workspace, fromNames, out conflicts, out enumNameMapping); if (!conflicts) { return(workspace.GetFeatureClass(name)); } return(null); }
private void KTreeView_DragOver(object sender, DragEventArgs e) { System.Drawing.Point p = new System.Drawing.Point(e.X, e.Y); p = base.PointToClient(p); this.treeNode_1 = base.GetNodeAt(p); this.bool_0 = false; if ((this.treeNode_1 != null) && (this.treeNode_1.Tag is IGxPasteTarget)) { IEnumerator enumerator = (e.Data.GetData("System.Collections.ArrayList") as ArrayList).GetEnumerator(); enumerator.Reset(); IEnumNameEdit edit = new NamesEnumeratorClass(); IGxObject current = null; while (enumerator.MoveNext()) { current = enumerator.Current as IGxObject; if (current != null) { edit.Add(current.InternalObjectName); } } this.bool_0 = (this.treeNode_1.Tag as IGxPasteTarget).CanPaste(edit as IEnumName, ref this.bool_1); } if (this.bool_0) { if (this.bool_1) { e.Effect = DragDropEffects.Move; } else { e.Effect = DragDropEffects.Copy; } } else { e.Effect = DragDropEffects.None; } }
/// <summary> /// 签出数据 /// </summary> /// <param name="pMasterWorkspace">源工作空间</param> /// <param name="featureClassName">要素类的名字</param> /// <param name="featureDatasetName">数据集的名字</param> /// <param name="checkoutName">版本名称</param> /// <param name="onlySchema">是否只签出结构</param> /// <param name="reuseSchema">是否重用已有的结构</param> /// <param name="fileName">文件名</param> /// <param name="dataExtractionType">数据提取的类型(checkout或只导出数据)</param> /// <param name="replicaModelType">简单图层或与源工作空间结构相同</param> public void CheckOut(IWorkspace pMasterWorkspace, string[] featureClassName, //要素类类的名字 string[] featureDatasetName, //数据集的名字 string checkoutName, bool onlySchema, bool reuseSchema, string fileName, esriDataExtractionType dataExtractionType, esriReplicaModelType replicaModelType) { if (File.Exists(fileName)) { File.Delete(fileName); } bool hasVersion = false; string versionName = System.IO.Path.GetFileNameWithoutExtension(fileName); IEnumVersionInfo pEnumVersionInfo = (pMasterWorkspace as IVersionedWorkspace).Versions; if (pEnumVersionInfo != null) { pEnumVersionInfo.Reset(); IVersionInfo pVersionInfo = pEnumVersionInfo.Next(); while (pVersionInfo != null) { if (pVersionInfo.VersionName == "SDE." + checkoutName) { hasVersion = true; break; } pVersionInfo = pEnumVersionInfo.Next(); } } if (hasVersion) { IVersion pVersion = (pMasterWorkspace as IVersionedWorkspace).FindVersion(versionName); if (pVersion != null) { pVersion.Delete(); } } IPropertySet pCheckOutPropSet = new PropertySetClass(); pCheckOutPropSet.SetProperty("Database", fileName); IWorkspaceFactory pCheckOutWorkFact = new AccessWorkspaceFactoryClass(); string path = System.IO.Path.GetDirectoryName(fileName); IWorkspaceName pCheckOutWorkspaceName = pCheckOutWorkFact.Create(path, checkoutName, pCheckOutPropSet, 0); IName pName = pCheckOutWorkspaceName as IName; IWorkspace pCheckOutWorkspace = pName.Open() as IWorkspace; if (pCheckOutWorkspace != null) { IFeatureWorkspace pMasterFeaWorkspace = pMasterWorkspace as IFeatureWorkspace; IFeatureClass pFeaClass; IFeatureDataset pFeatureDataset; IDataset pDS; IEnumNameEdit pEnumNameEdit = new NamesEnumeratorClass(); IEnumName pEnumName; IReplicaDescription pRepDescription = new ReplicaDescriptionClass(); for (int i = 0; i < featureClassName.Length; i++) { pFeaClass = pMasterFeaWorkspace.OpenFeatureClass(featureClassName[i]); pDS = pFeaClass as IDataset; pEnumNameEdit.Add(pDS.FullName as IName); } for (int i = 0; i < featureDatasetName.Length; i++) { pFeatureDataset = pMasterFeaWorkspace.OpenFeatureDataset(featureDatasetName[i]); pDS = pFeatureDataset as IDataset; pEnumNameEdit.Add(pDS.FullName as IName); } pEnumName = pEnumNameEdit as IEnumName; pRepDescription.Init(pEnumName, pCheckOutWorkspaceName, false, dataExtractionType); pRepDescription.ReplicaModelType = replicaModelType;//简单图层类型或与SDE数据库一样 ICheckOut pCheckOut = new CheckOutClass(); try { pCheckOut.CheckOutData(pRepDescription, true, checkoutName); } catch (Exception ex) { MessageBox.Show("可能是备份的SDE数据没有注册为版本,或者是由于该文件名上次已经作为一个版本号存在数据库中。" + ex.ToString()); } pCheckOutWorkspace = null; GC.Collect(); } }
private void frmCheckInWizard_Load(object sender, EventArgs e) { if (this.iarray_0.Count == 0) { MessageBox.Show("没有检入的数据!"); base.Close(); } else if (this.iarray_0.Count == 1) { CheckInOutWorkspaceInfo info = this.iarray_0.get_Element(0) as CheckInOutWorkspaceInfo; CheckInHelper.m_pHelper = new CheckInHelper(); IWorkspaceName fullName = (info.Workspace as IDataset).FullName as IWorkspaceName; if (fullName.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) { CheckInHelper.m_pHelper.MasterWorkspaceName = fullName; CheckInHelper.m_pHelper.CheckoutWorkspaceName = null; } else { CheckInHelper.m_pHelper.CheckoutWorkspaceName = fullName; CheckInHelper.m_pHelper.MasterWorkspaceName = null; } IEnumNameEdit edit = new NamesEnumeratorClass(); IEnumName enumName = info.EnumName; enumName.Reset(); IName name = enumName.Next(); IList list = new ArrayList(); IList list2 = new ArrayList(); while (name != null) { string str; if (name is IFeatureClassName) { if ((name as IFeatureClassName).FeatureDatasetName != null) { IDatasetName featureDatasetName = (name as IFeatureClassName).FeatureDatasetName; str = featureDatasetName.Name; if (list.IndexOf(str) == -1) { list.Add(str); edit.Add(featureDatasetName as IName); } } else { str = (name as IDatasetName).Name; if (list2.IndexOf(str) == -1) { list2.Add(str); edit.Add(name); } } } else if (name is IFeatureDatasetName) { str = (name as IDatasetName).Name; if (list.IndexOf(str) == -1) { list.Add(str); edit.Add(name); } } else { str = (name as IDatasetName).Name; if (list2.IndexOf(str) == -1) { list2.Add(str); edit.Add(name); } } name = enumName.Next(); } this.checkInSetupCtrl_0.Visible = true; this.btnNext.Text = "完成"; } else { CheckInHelper.m_pHelper = new CheckInHelper(); this.selectCheckOutWorkspaceCtrl_0.WorkspaceArray = this.iarray_0; this.selectCheckOutWorkspaceCtrl_0.Visible = true; } }
private void frmExtractionDataWizard_Load(object sender, EventArgs e) { if (this.iarray_0.Count == 0) { MessageBox.Show("没有可用于提取的数据!"); base.Close(); } else if (this.iarray_0.Count == 1) { CheckInOutWorkspaceInfo info = this.iarray_0.get_Element(0) as CheckInOutWorkspaceInfo; ExtractionDataHelper.m_pHelper = new ExtractionDataHelper(); ExtractionDataHelper.m_pHelper.MasterWorkspaceName = (info.Workspace as IDataset).FullName as IWorkspaceName; IEnumNameEdit edit = new NamesEnumeratorClass(); IEnumName enumName = info.EnumName; enumName.Reset(); IName name = enumName.Next(); IList list = new ArrayList(); IList list2 = new ArrayList(); while (name != null) { string str; if (name is IFeatureClassName) { if ((name as IFeatureClassName).FeatureDatasetName != null) { IDatasetName featureDatasetName = (name as IFeatureClassName).FeatureDatasetName; str = featureDatasetName.Name; if (list.IndexOf(str) == -1) { list.Add(str); edit.Add(featureDatasetName as IName); } } else { str = (name as IDatasetName).Name; if (list2.IndexOf(str) == -1) { list2.Add(str); edit.Add(name); } } } else if (name is IFeatureDatasetName) { str = (name as IDatasetName).Name; if (list.IndexOf(str) == -1) { list.Add(str); edit.Add(name); } } else { str = (name as IDatasetName).Name; if (list2.IndexOf(str) == -1) { list2.Add(str); edit.Add(name); } } name = enumName.Next(); } ExtractionDataHelper.m_pHelper.EnumName = edit as IEnumName; this.extractionDataSetupCtrl_0.Visible = true; } else { ExtractionDataHelper.m_pHelper = new ExtractionDataHelper(); this.selectCheckOutWorkspaceCtrl_0.WorkspaceArray = this.iarray_0; this.selectCheckOutWorkspaceCtrl_0.Visible = true; } }
public void TansferFileGDBToSDE(string fileGDBPath, string sourceFCName) { // Create workspace name objects. IWorkspaceName sourceWorkspaceName = getWorkspaceName("esriDataSourcesGDB.FileGDBWorkspaceFactory", fileGDBPath); // Create a name object for the target (SDE) workspace and open it. IWorkspaceName targetWorkspaceName = getWorkspaceName("esriDataSourcesGDB.SdeWorkspaceFactory", sdePath); IName targetName = (IName)targetWorkspaceName; // Create a name object for the source dataset. IFeatureClassName sourceFeatureClassName = getFeatureClassName(sourceWorkspaceName, sourceFCName); IName sourceName = (IName)sourceFeatureClassName; // Create an enumerator for source datasets. IEnumName sourceEnumName = new NamesEnumeratorClass(); IEnumNameEdit sourceEnumNameEdit = (IEnumNameEdit)sourceEnumName; // Add the name object for the source class to the enumerator. sourceEnumNameEdit.Add(sourceName); // Create a GeoDBDataTransfer object and a null name mapping enumerator. IGeoDBDataTransfer geoDBDataTransfer = new GeoDBDataTransferClass(); IEnumNameMapping enumNameMapping = null; // Use the data transfer object to create a name mapping enumerator. Boolean conflictsFound = geoDBDataTransfer.GenerateNameMapping(sourceEnumName, targetName, out enumNameMapping); enumNameMapping.Reset(); // Check for conflicts. if (conflictsFound) { // Iterate through each name mapping. INameMapping nameMapping = null; while ((nameMapping = enumNameMapping.Next()) != null) { // Resolve the mapping's conflict (if there is one). if (nameMapping.NameConflicts) { nameMapping.TargetName = nameMapping.GetSuggestedName(targetName); } // See if the mapping's children have conflicts. IEnumNameMapping childEnumNameMapping = nameMapping.Children; if (childEnumNameMapping != null) { childEnumNameMapping.Reset(); // Iterate through each child mapping. INameMapping childNameMapping = null; while ((childNameMapping = childEnumNameMapping.Next()) != null) { if (childNameMapping.NameConflicts) { childNameMapping.TargetName = childNameMapping.GetSuggestedName(targetName); } } } } } // Start the transfer. geoDBDataTransfer.Transfer(enumNameMapping, targetName); }
/// <summary> /// copies the feature Class table from one database to another /// </summary> /// <param name="inWks">inWorkspace</param> /// <param name="inObjName">object name</param> /// <param name="outWks">out workspace</param> /// <param name="dType">data type</param> /// <returns>messages</returns> public string copyFeatureClassTable(IWorkspace inWks, string inObjName, IWorkspace outWks, esriDatasetType dType) { if (!(dType == esriDatasetType.esriDTFeatureClass || dType == esriDatasetType.esriDTTable)) { return "Error: must specify a FeatureClass or Table"; } if (!((IWorkspace2)inWks).get_NameExists(dType, inObjName)) { return "Error: Parent object does not exist!"; } Console.WriteLine(inObjName); string x = "successfully copied " + inObjName; try { IDataset outWksDset = (IDataset)outWks; IName targetWks = outWksDset.FullName; IEnumName eName = new NamesEnumeratorClass(); IEnumNameEdit eNameEdit = (IEnumNameEdit)eName; //need to get name of table IFeatureWorkspace ftrWks = (IFeatureWorkspace)inWks; IObjectClass objCls; if (dType == esriDatasetType.esriDTTable) { ITable inTbl = ftrWks.OpenTable(inObjName); objCls = (IObjectClass)inTbl; } else { IFeatureClass inFtr = ftrWks.OpenFeatureClass(inObjName); objCls = (IObjectClass)inFtr; } IDataset tblDset = (IDataset)objCls; eNameEdit.Add(tblDset.FullName); IGeoDBDataTransfer geoTrans = new GeoDBDataTransferClass(); IEnumNameMapping enumNameMapping = null; Boolean conflictsFound = geoTrans.GenerateNameMapping(eName, targetWks, out enumNameMapping); enumNameMapping.Reset(); try { if (conflictsFound) { Console.WriteLine("Conflicts found can't transfer"); } else { geoTrans.Transfer(enumNameMapping, targetWks); } } catch (Exception e) { x = "Error in trasfering data: " + e.ToString(); MessageBox.Show(x); } } catch (Exception e) { x = "Error: " + e.ToString(); Console.WriteLine(x); } return x; }
private void btnOK_Click(object sender, EventArgs e) { //首先进行坐标系x,y变换 //string fileExpTran;//进行x,y做表转换后输出的tiff文件存储路径,用这一文件在进行后期的Z转换 //fileExpTran = System.IO.Path.GetDirectoryName(LayerExpName) +"\\"+ System.IO.Path.GetFileNameWithoutExtension(LayerExpName)+"XY.tif"; //try //{ // if (NorthEastToEastNorth(pRasterLayer, LayerExpName)) // { // RasterLayerClass rasterlayer = new RasterLayerClass(); // rasterlayer.CreateFromFilePath(LayerExpName); // IRaster2 pRaster2 = rasterlayer.Raster as IRaster2; // IRasterDataset2 pRasterDataset = pRaster2.RasterDataset as IRasterDataset2; // ChangeRasterValue(pRasterDataset, -1, 0); // pMapControl.AddLayer(rasterlayer as ILayer); // this.Close(); // } //} //catch (System.Exception ex) //{ // MessageBox.Show(ex.Message); //} try { IFeatureClass pFC = pFeatureLayer.FeatureClass; IDataset pDS = pFC as IDataset; IWorkspace pWS = pDS.Workspace; string filedir = pWS.PathName; string fdestname = System.IO.Path.GetFileNameWithoutExtension(txtFeatureName.Text); ClsGDBDataCommon CGD = new ClsGDBDataCommon(); IWorkspace pTargetWS = CGD.OpenFromShapefile(txtLayerExp.Text); IWorkspace2 workspace2 = pTargetWS as IWorkspace2; if (workspace2.get_NameExists(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureClass, fdestname)) { MessageBox.Show("目标文件已存在!"); return; } //shape文件直接拷贝后再修改 if (pDS.CanCopy() == true) { pDS.Copy(txtFeatureName.Text, pTargetWS); IFeatureWorkspace pFW = pTargetWS as IFeatureWorkspace; pTargetFeatureClass = pFW.OpenFeatureClass(txtFeatureName.Text); TransCoordiante(pFW as IWorkspace, pTargetFeatureClass); } //表示为gdb的feature,只能往gdb拷贝 else { // Create workspace name objects. IWorkspaceName sourceWorkspaceName = new WorkspaceNameClass(); IWorkspaceName targetWorkspaceName = new WorkspaceNameClass(); IName targetName = (IName)targetWorkspaceName; // Set the workspace name properties. sourceWorkspaceName.PathName = pWS.PathName; sourceWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.FileGDBWorkspaceFactory"; // targetWorkspaceName.PathName = @"PartialMontgomery.gdb"; targetWorkspaceName.PathName = txtLayerExp.Text; targetWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.FileGDBWorkspaceFactory"; //if (txtLayerExp.Text.Length>4 && txtLayerExp.Text.Substring(txtLayerExp.Text.Length-4,4) == ".gdb") //{ // targetWorkspaceName.WorkspaceFactoryProgID = // "esriDataSourcesGDB.FileGDBWorkspaceFactory"; //} //else //{ // targetWorkspaceName.WorkspaceFactoryProgID = // "esriDataSourcesFile.ShapefileWorkspaceFactory"; //} // Create a name object for the source feature class. IFeatureClassName featureClassName = new FeatureClassNameClass(); // Set the featureClassName properties. IDatasetName sourceDatasetName = (IDatasetName)featureClassName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = pDS.BrowseName; IName sourceName = (IName)sourceDatasetName; // Create an enumerator for source datasets. IEnumName sourceEnumName = new NamesEnumeratorClass(); IEnumNameEdit sourceEnumNameEdit = (IEnumNameEdit)sourceEnumName; // Add the name object for the source class to the enumerator. sourceEnumNameEdit.Add(sourceName); // Create a GeoDBDataTransfer object and a null name mapping enumerator. IGeoDBDataTransfer geoDBDataTransfer = new GeoDBDataTransferClass(); IEnumNameMapping enumNameMapping = null; // Use the data transfer object to create a name mapping enumerator. Boolean conflictsFound = geoDBDataTransfer.GenerateNameMapping(sourceEnumName, targetName, out enumNameMapping); enumNameMapping.Reset(); //修改拷贝的文件名 INameMapping nameMapping = enumNameMapping.Next(); if ((nameMapping != null)) { nameMapping.TargetName = txtFeatureName.Text; } // Check for conflicts. //if (conflictsFound) //{ // // Iterate through each name mapping. // INameMapping nameMapping = null; // while ((nameMapping = enumNameMapping.Next()) != null) // { // // Resolve the mapping's conflict (if there is one). // if (nameMapping.NameConflicts) // { // nameMapping.TargetName = nameMapping.GetSuggestedName(targetName); // } // // See if the mapping's children have conflicts. // IEnumNameMapping childEnumNameMapping = nameMapping.Children; // if (childEnumNameMapping != null) // { // childEnumNameMapping.Reset(); // // Iterate through each child mapping. // INameMapping childNameMapping = null; // while ((childNameMapping = childEnumNameMapping.Next()) != null) // { // if (childNameMapping.NameConflicts) // { // childNameMapping.TargetName = childNameMapping.GetSuggestedName // (targetName); // } // } // } // } //} // Start the transfer. geoDBDataTransfer.Transfer(enumNameMapping, targetName); IFeatureWorkspace pFW = CGD.OpenFromFileGDB(txtLayerExp.Text) as IFeatureWorkspace; pTargetFeatureClass = pFW.OpenFeatureClass(txtFeatureName.Text); TransCoordiante(pFW as IWorkspace, pTargetFeatureClass); } if (pTargetFeatureClass != null) { //添加到图层中 IFeatureLayer featureLayer = new FeatureLayerClass(); featureLayer.FeatureClass = pTargetFeatureClass; featureLayer.Name = fdestname; pMapControl.AddLayer(featureLayer as ILayer); pMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } this.DialogResult = DialogResult.OK; } catch (System.Exception ex) { MessageBox.Show(ex.Message); } }
public static void TranferBetweenGeodatabase(string featureClass, string targetPath, string sourcePath) { // Create new workspace name objects. IWorkspaceName sourceWorkspaceName = new WorkspaceNameClass(); IWorkspaceName targetWorkspaceName = new WorkspaceNameClass(); IName targetName = (IName)targetWorkspaceName; // Set the workspace name properties. sourceWorkspaceName.PathName = @sourcePath;//"C:\arcgis\ArcTutor\BuildingaGeodatabase\Montgomery.gdb"; sourceWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.FileGDBWorkspaceFactory"; targetWorkspaceName.PathName = @targetPath;//"PartialMontgomery.gdb"; targetWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.FileGDBWorkspaceFactory"; // Create a name object for the source feature class. IFeatureClassName featureClassName = new FeatureClassNameClass(); // Set the featureClassName properties. IDatasetName sourceDatasetName = (IDatasetName)featureClassName; sourceDatasetName.WorkspaceName = sourceWorkspaceName; sourceDatasetName.Name = featureClass;//"Blocks"; IName sourceName = (IName)sourceDatasetName; // Create an enumerator for source datasets. IEnumName sourceEnumName = new NamesEnumeratorClass(); IEnumNameEdit sourceEnumNameEdit = (IEnumNameEdit)sourceEnumName; // Add the name object for the source class to the enumerator. sourceEnumNameEdit.Add(sourceName); // Create a GeoDBDataTransfer object and a null name mapping enumerator. IGeoDBDataTransfer geoDBDataTransfer = new GeoDBDataTransferClass(); IEnumNameMapping enumNameMapping = null; // Use the data transfer object to create a name mapping enumerator. Boolean conflictsFound = geoDBDataTransfer.GenerateNameMapping(sourceEnumName, targetName, out enumNameMapping); enumNameMapping.Reset(); // Check for conflicts. if (conflictsFound) { // Iterate through each name mapping. INameMapping nameMapping = null; while ((nameMapping = enumNameMapping.Next()) != null) { // Resolve the mapping's conflict (if there is one). if (nameMapping.NameConflicts) { nameMapping.TargetName = nameMapping.GetSuggestedName(targetName); } // See if the mapping's children have conflicts. IEnumNameMapping childEnumNameMapping = nameMapping.Children; if (childEnumNameMapping != null) { childEnumNameMapping.Reset(); // Iterate through each child mapping. INameMapping childNameMapping = null; while ((childNameMapping = childEnumNameMapping.Next()) != null) { if (childNameMapping.NameConflicts) { childNameMapping.TargetName = childNameMapping.GetSuggestedName (targetName); } } } } } // Start the transfer. geoDBDataTransfer.Transfer(enumNameMapping, targetName); }
public bool Do() { IEnumNameEdit edit; IEnumName enumName; IName name2; IList list; IList list2; IDatasetName featureDatasetName; string name; if (this.EditWorkspacelist.SelectedItems.Count == 0) { return(false); } CheckInOutWorkspaceInfo tag = this.EditWorkspacelist.SelectedItems[0].Tag as CheckInOutWorkspaceInfo; if (this.int_0 == 0) { CheckOutHelper.m_pHelper.MasterWorkspaceName = (tag.Workspace as IDataset).FullName as IWorkspaceName; edit = new NamesEnumeratorClass(); enumName = tag.EnumName; enumName.Reset(); name2 = enumName.Next(); list = new ArrayList(); list2 = new ArrayList(); while (name2 != null) { if (name2 is IFeatureClassName) { if ((name2 as IFeatureClassName).FeatureDatasetName != null) { featureDatasetName = (name2 as IFeatureClassName).FeatureDatasetName; name = featureDatasetName.Name; if (list.IndexOf(name) == -1) { list.Add(name); edit.Add(featureDatasetName as IName); } } else { name = (name2 as IDatasetName).Name; if (list2.IndexOf(name) == -1) { list2.Add(name); edit.Add(name2); } } } else if (name2 is IFeatureDatasetName) { name = (name2 as IDatasetName).Name; if (list.IndexOf(name) == -1) { list.Add(name); edit.Add(name2); } } else { name = (name2 as IDatasetName).Name; if (list2.IndexOf(name) == -1) { list2.Add(name); edit.Add(name2); } } name2 = enumName.Next(); } CheckOutHelper.m_pHelper.EnumName = edit as IEnumName; } else if (this.int_0 == 1) { IWorkspaceName fullName = (tag.Workspace as IDataset).FullName as IWorkspaceName; if (fullName.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) { CheckInHelper.m_pHelper.MasterWorkspaceName = fullName; CheckInHelper.m_pHelper.CheckoutWorkspaceName = null; } else { CheckInHelper.m_pHelper.MasterWorkspaceName = null; CheckInHelper.m_pHelper.CheckoutWorkspaceName = fullName; } } else if (this.int_0 == 2) { ExtractionDataHelper.m_pHelper.MasterWorkspaceName = (tag.Workspace as IDataset).FullName as IWorkspaceName; edit = new NamesEnumeratorClass(); enumName = tag.EnumName; enumName.Reset(); name2 = enumName.Next(); list = new ArrayList(); list2 = new ArrayList(); while (name2 != null) { if (name2 is IFeatureClassName) { if ((name2 as IFeatureClassName).FeatureDatasetName != null) { featureDatasetName = (name2 as IFeatureClassName).FeatureDatasetName; name = featureDatasetName.Name; if (list.IndexOf(name) == -1) { list.Add(name); edit.Add(featureDatasetName as IName); } } else { name = (name2 as IDatasetName).Name; if (list2.IndexOf(name) == -1) { list2.Add(name); edit.Add(name2); } } } else if (name2 is IFeatureDatasetName) { name = (name2 as IDatasetName).Name; if (list.IndexOf(name) == -1) { list.Add(name); edit.Add(name2); } } else { name = (name2 as IDatasetName).Name; if (list2.IndexOf(name) == -1) { list2.Add(name); edit.Add(name2); } } name2 = enumName.Next(); } ExtractionDataHelper.m_pHelper.EnumName = edit as IEnumName; } else if (this.int_0 == 3) { ExportChangesHelper.m_pHelper.CheckoutWorkspaceName = (tag.Workspace as IDataset).FullName as IWorkspaceName; } return(true); }