public FeatureClassListViewItem(IFeatureClass fc, int maxFieldLength) { _maxFieldLength = (maxFieldLength != 0) ? maxFieldLength : _maxFieldLength; _fc = fc; _fields = new DataTable(); _fields.Columns.Add(" ", typeof(bool)).DefaultValue = true; _fields.Columns.Add("Source Name", typeof(string)).DefaultValue = ""; _fields.Columns.Add("Destination Name", typeof(string)).DefaultValue = ""; _fields.Columns[2].MaxLength = _maxFieldLength; _fields.Columns.Add("Aliasname", typeof(string)).DefaultValue = ""; if (_fc == null || _fc.Fields == null) { return; } this.Text = fc.Name; foreach (IField field in _fc.Fields.ToEnumerable()) { DataRow row = _fields.NewRow(); row["Source Name"] = field.name; row["Destination Name"] = FieldTranslation.CheckName(field.name); row["Destination Name"] = FieldTranslation.CheckNameLength(_fc.Fields, field, row["Destination Name"].ToString(), _maxFieldLength); row["Aliasname"] = field.aliasname; _fields.Rows.Add(row); } _targetName = _fc.Name; }
async private void btnScript_Click(object sender, EventArgs e) { if (_fcs.Count == 0) { return; } SaveFileDialog dlg = new SaveFileDialog(); dlg.Title = "Explort Script..."; dlg.Filter = "BATCH File(*.bat)|*.bat"; string destConnStr = String.Empty; Guid destGUID = new Guid(); if (cmbDestFormat.Visible == true && cmbDestFormat.SelectedItem is FileDatabaseItem) { destConnStr = _directory; destGUID = PlugInManager.PlugInID(((FileDatabaseItem)cmbDestFormat.SelectedItem).FileFeatureDatabase); } else if (_destDataset != null) { if (_destDataset is IDataset2) { IDataset2 ds2 = await((IDataset2)_destDataset).EmptyCopy(); if (ds2 != null) { destConnStr = ds2.ConnectionString; ds2.Dispose(); } } else { destConnStr = _destDataset.ConnectionString; } destGUID = PlugInManager.PlugInID(_destDataset); } else { return; } if (dlg.ShowDialog() == DialogResult.OK) { StringBuilder sb = new StringBuilder(); sb.Append("echo off\r\n"); //foreach (IFeatureClass fc in _fcs) foreach (FeatureClassListViewItem item in FeatureClassItems) { if (!item.Checked || item.FeatureClass == null) { continue; } IDataset ds = item.FeatureClass.Dataset; string connStr = ds.ConnectionString; if (item.FeatureClass.Dataset is IDataset2) { IDataset2 ds2 = await((IDataset2)item.FeatureClass.Dataset).EmptyCopy(); await ds2.AppendElement(item.FeatureClass.Name); connStr = ds2.ConnectionString; ds2.Dispose(); } if (ds == null) { sb.Append("rem FeatureClass " + item.FeatureClass.Name + " has no dataset...\r\n"); continue; } FieldTranslation ftrans = item.ImportFieldTranslation; StringBuilder sb1 = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); foreach (IField field in ftrans.SourceFields.ToEnumerable()) { if (field.type == FieldType.ID || field.type == FieldType.Shape) { continue; } if (sb1.Length != 0) { sb1.Append(";"); } sb1.Append(field.name); } foreach (IField field in ftrans.DestinationFields.ToEnumerable()) { if (field.type == FieldType.ID || field.type == FieldType.Shape) { continue; } if (sb2.Length != 0) { sb2.Append(";"); } sb2.Append(field.name); } sb.Append("\"%GVIEW4_HOME%\\gView.Cmd.CopyFeatureclass\" -source_connstr \"" + connStr + "\" -source_guid \"" + PlugInManager.PlugInID(ds) + "\" -source_fc \"" + item.FeatureClass.Name + "\" "); sb.Append("-dest_connstr \"" + destConnStr + "\" -dest_guid \"" + destGUID + "\" -dest_fc \"" + item.FeatureClass.Name + "\" "); sb.Append("-sourcefields \"" + sb1.ToString() + "\" -destfields \"" + sb2.ToString() + "\""); sb.Append("\r\n"); } StreamWriter sw = new StreamWriter(dlg.FileName, false); if (!String2DOS(sw.BaseStream, sb.ToString())) { MessageBox.Show("Warning: Can't find encoding codepage (ibm850)..."); sw.WriteLine(sb.ToString()); } sw.Close(); } }
public Task <bool> ImportToNewFeatureclass(IFeatureDatabase fdb, string dsname, string fcname, IFeatureClass sourceFC, FieldTranslation fieldTranslation, bool project, List <IQueryFilter> filters) { return(ImportToNewFeatureclass(fdb, dsname, fcname, sourceFC, fieldTranslation, true, filters, null)); }
async public Task <bool> ImportToNewFeatureclass(IFeatureDatabase fdb, string dsname, string fcname, IFeatureClass sourceFC, FieldTranslation fieldTranslation, bool project, List <IQueryFilter> filters, ISpatialIndexDef sIndexDef, geometryType?sourceGeometryType = null) { if (!_cancelTracker.Continue) { return(true); } if (fdb is AccessFDB) { ISpatialIndexDef dsSpatialIndexDef = await((AccessFDB)fdb).SpatialIndexDef(dsname); if (sIndexDef == null) { sIndexDef = dsSpatialIndexDef; } else if (sIndexDef.GeometryType != dsSpatialIndexDef.GeometryType) { _errMsg = "Spatial-Index-Definition-GeometryTypes are not compatible!"; return(false); } } if (sIndexDef == null) { sIndexDef = new gViewSpatialIndexDef(); } bool msSpatial = false; if (fdb is SqlFDB && (sIndexDef.GeometryType == GeometryFieldType.MsGeography || sIndexDef.GeometryType == GeometryFieldType.MsGeometry)) { msSpatial = true; } else { int maxAllowedLevel = ((fdb is SqlFDB || fdb is pgFDB) ? 62 : 30); if (sIndexDef.Levels > maxAllowedLevel) { ISpatialReference defSRef = sIndexDef.SpatialReference; sIndexDef = new gViewSpatialIndexDef( sIndexDef.SpatialIndexBounds, Math.Min(sIndexDef.Levels, maxAllowedLevel), sIndexDef.MaxPerNode, sIndexDef.SplitRatio); ((gViewSpatialIndexDef)sIndexDef).SpatialReference = defSRef; } } try { fcname = fcname.Replace(".", "_"); IFeatureDataset destDS = await fdb.GetDataset(dsname); if (destDS == null) { _errMsg = fdb.LastErrorMessage; return(false); } IDatasetElement destLayer = await destDS.Element(fcname); if (destLayer != null) { if (ReportRequest != null) { RequestArgs args = new RequestArgs( "Featureclass " + fcname + " already exists in " + dsname + "\nDo want to replace it?", MessageBoxButtons.YesNoCancel, DialogResult.Cancel); ReportRequest(this, args); switch (args.Result) { case DialogResult.No: return(true); case DialogResult.Cancel: _errMsg = "Import is canceled by the user..."; return(false); } } } GeometryDef geomDef = new GeometryDef(sourceFC); if (geomDef.GeometryType == geometryType.Unknown && sourceGeometryType != null) { geomDef.GeometryType = sourceGeometryType.Value; } int fcID = -1; if (destLayer != null) { if (fdb is AccessFDB) { fcID = await((AccessFDB)fdb).ReplaceFeatureClass(destDS.DatasetName, fcname, geomDef, (fieldTranslation == null) ? ((sourceFC.Fields != null) ? (IFields)sourceFC.Fields.Clone() : new Fields()) : fieldTranslation.DestinationFields); if (fcID < 0) { _errMsg = "Can't replace featureclass " + fcname + "...\r\n" + fdb.LastErrorMessage; destDS.Dispose(); return(false); } } else { await fdb.DeleteFeatureClass(fcname); } } if (fcID < 0) { fcID = await fdb.CreateFeatureClass(destDS.DatasetName, fcname, geomDef, (fieldTranslation == null)? ((sourceFC.Fields != null) ? (IFields)sourceFC.Fields.Clone() : new Fields()) : fieldTranslation.DestinationFields); } if (fcID < 0) { _errMsg = "Can't create featureclass " + fcname + "...\r\n" + fdb.LastErrorMessage; destDS.Dispose(); return(false); } destLayer = await destDS.Element(fcname); if (destLayer == null || !(destLayer.Class is IFeatureClass)) { _errMsg = "Can't load featureclass " + fcname + "...\r\n" + destDS.LastErrorMessage; destDS.Dispose(); return(false); } IFeatureClass destFC = destLayer.Class as IFeatureClass; if (project && destFC.SpatialReference != null && !destFC.SpatialReference.Equals(sourceFC.SpatialReference)) { _transformer = GeometricTransformerFactory.Create(); //_transformer.FromSpatialReference = sourceFC.SpatialReference; //_transformer.ToSpatialReference = destFC.SpatialReference; _transformer.SetSpatialReferences(sourceFC.SpatialReference, destFC.SpatialReference); } if (!Envelope.IsNull(sIndexDef.SpatialIndexBounds) && sIndexDef.SpatialReference != null && !sIndexDef.SpatialReference.Equals(destFC.SpatialReference)) { if (!sIndexDef.ProjectTo(destFC.SpatialReference)) { _errMsg = "Can't project SpatialIndex Boundaries..."; destDS.Dispose(); return(false); } } DualTree tree = null; BinaryTree2Builder tree2 = null; if (msSpatial) { ((SqlFDB)fdb).SetMSSpatialIndex((MSSpatialIndex)sIndexDef, destFC.Name); await((SqlFDB)fdb).SetFeatureclassExtent(destFC.Name, sIndexDef.SpatialIndexBounds); } else { if (_treeVersion == TreeVersion.BinaryTree) { tree = await SpatialIndex(sourceFC, sIndexDef.MaxPerNode, filters); if (tree == null) { return(false); } } else if (_treeVersion == TreeVersion.BinaryTree2) { if (_schemaOnly && sourceFC.Dataset.Database is IImplementsBinarayTreeDef) { BinaryTreeDef tDef = await((IImplementsBinarayTreeDef)sourceFC.Dataset.Database).BinaryTreeDef(sourceFC.Name); tree2 = new BinaryTree2Builder(tDef.Bounds, tDef.MaxLevel, tDef.MaxPerNode, tDef.SplitRatio); } else { tree2 = await SpatialIndex2(fdb, sourceFC, sIndexDef, filters); if (tree2 == null) { return(false); } } } // Vorab einmal alle "Bounds" festlegen, damit auch // ein aufzubauender Layer geviewt werden kann if (_treeVersion == TreeVersion.BinaryTree2 && fdb is AccessFDB) { if (ReportAction != null) { ReportAction(this, "Insert spatial index nodes"); } List <long> nids = new List <long>(); foreach (BinaryTree2BuilderNode node in tree2.Nodes) { nids.Add(node.Number); } await((AccessFDB)fdb).ShrinkSpatialIndex(fcname, nids); if (ReportAction != null) { ReportAction(this, "Set spatial index bounds"); } //((AccessFDB)fdb).SetSpatialIndexBounds(fcname, "BinaryTree2", tree2.Bounds, sIndexDef.SplitRatio, sIndexDef.MaxPerNode, tree2.maxLevels); await((AccessFDB)fdb).SetSpatialIndexBounds(fcname, "BinaryTree2", tree2.Bounds, tree2.SplitRatio, tree2.MaxPerNode, tree2.maxLevels); await((AccessFDB)fdb).SetFeatureclassExtent(fcname, tree2.Bounds); } } if (_cancelTracker.Continue) { bool result = true; if (!_schemaOnly) { if (msSpatial) { result = await CopyFeatures(sourceFC, fdb, destFC, fieldTranslation, filters); } else if (_treeVersion == TreeVersion.BinaryTree) { if (String.IsNullOrEmpty(sourceFC.IDFieldName)) // SDE Views haben keine ID -> Tree enthält keine Features { result = await CopyFeatures(sourceFC, fdb, destFC, fieldTranslation, filters); } else { result = await CopyFeatures(sourceFC, fdb, destFC, fieldTranslation, tree); } } else if (_treeVersion == TreeVersion.BinaryTree2) { if (String.IsNullOrEmpty(sourceFC.IDFieldName)) // SDE Views haben keine ID -> Tree enthält keine Features { result = await CopyFeatures(sourceFC, fdb, destFC, fieldTranslation, filters); } else { result = await CopyFeatures2(sourceFC, fdb, destFC, fieldTranslation, tree2); } } if (!result) { await fdb.DeleteFeatureClass(fcname); destDS.Dispose(); return(false); } } } destDS.Dispose(); if (_cancelTracker.Continue && fdb is AccessFDB) { if (ReportAction != null) { ReportAction(this, "Calculate extent"); } await((AccessFDB)fdb).CalculateExtent(destFC); if (msSpatial == false) { if (_treeVersion == TreeVersion.BinaryTree) { if (ReportAction != null) { ReportAction(this, "Set spatial index bounds"); } await((AccessFDB)fdb).SetSpatialIndexBounds(fcname, "BinaryTree", tree.Bounds, sIndexDef.SplitRatio, sIndexDef.MaxPerNode, 0); if (ReportAction != null) { ReportAction(this, "Insert spatial index nodes"); } await((AccessFDB)fdb).__intInsertSpatialIndexNodes2(fcname, tree.Nodes); } } return(true); } else { await fdb.DeleteFeatureClass(fcname); _errMsg = "Import is canceled by the user..."; return(false); } } finally { if (_transformer != null) { _transformer.Release(); _transformer = null; } } }
async private Task <int> CopyFeatures(IFeatureCursor fCursor, long NID, IFeatureUpdater fdb, IFeatureClass dest, FieldTranslation fTrans, int featcounter) { IFeature feat; List <IFeature> features = new List <IFeature>(); while ((feat = await fCursor.NextFeature()) != null) { if (!_cancelTracker.Continue) { break; } feat.Fields.Add(new FieldValue("$FDB_NID", NID)); if (_transformer != null) { feat.Shape = _transformer.Transform2D(feat.Shape) as IGeometry; } if (fTrans != null) { fTrans.RenameFields(feat); } features.Add(feat); if (features.Count >= this.FeatureBufferSize) { if (!await fdb.Insert(dest, features)) { _errMsg = "Fatal error: destdb insert failed...\n" + fdb.LastErrorMessage; return(-1); } features.Clear(); } featcounter++; if ((featcounter % this.FeatureBufferSize) == 0 && ReportProgress != null) { ReportProgress(this, featcounter); } } if (features.Count > 0 && _cancelTracker.Continue) { if (!await fdb.Insert(dest, features)) { _errMsg = "Fatal error: destdb insert failed...\n" + fdb.LastErrorMessage; return(-1); } features.Clear(); } return(featcounter); }
async private Task <bool> CopyFeatures(IFeatureClass source, IFeatureUpdater fdb, IFeatureClass dest, FieldTranslation fTrans, List <IQueryFilter> filters) { if (ReportAction != null) { ReportAction(this, "Copy Features (" + dest.Name + ")"); } int featcounter = 0; List <IFeature> features = new List <IFeature>(); if (filters == null || filters.Count == 0) { QueryFilter filter = new QueryFilter(); filter.SubFields = "*"; filters = new List <IQueryFilter>(); filters.Add(filter); } foreach (IQueryFilter filter in filters) { using (IFeatureCursor fCursor = await source.GetFeatures(filter)) { IFeature feature; while ((feature = await fCursor.NextFeature()) != null) { if (!_cancelTracker.Continue) { break; } if (_transformer != null) { feature.Shape = _transformer.Transform2D(feature.Shape) as IGeometry; } if (fTrans != null) { fTrans.RenameFields(feature); } features.Add(feature); if (features.Count >= this.FeatureBufferSize) { if (!await fdb.Insert(dest, features)) { _errMsg = "Fatal error: destdb insert failed...\n" + fdb.LastErrorMessage; return(false); } features.Clear(); } featcounter++; if ((featcounter % this.FeatureBufferSize) == 0 && ReportProgress != null) { ReportProgress(this, featcounter); } } if (features.Count > 0 && _cancelTracker.Continue) { if (!await fdb.Insert(dest, features)) { _errMsg = "Fatal error: destdb insert failed...\n" + fdb.LastErrorMessage; return(false); } features.Clear(); } } } return(true); }
public bool ImportToNewFeatureclass(IFeatureDatabase fdb, string dsname, string fcname, IFeatureClass sourceFC, FieldTranslation fieldTranslation, bool project) { return(ImportToNewFeatureclass(fdb, dsname, fcname, sourceFC, fieldTranslation, true, null)); }
async private Task <bool> CopyFeatures2(IFeatureClass source, IFeatureUpdater fdb, IFeatureClass dest, FieldTranslation fTrans, BinaryTree2Builder treeBuilder) { List <BinaryTree2BuilderNode> nodes; if (treeBuilder == null || (nodes = treeBuilder.Nodes) == null) { _errMsg = "Spatial Index is not defined..."; return(false); } if (ReportAction != null) { ReportAction(this, "Copy Features (" + dest.Name + ")"); } int featcounter = 0; foreach (BinaryTree2BuilderNode node in nodes) { if (!_cancelTracker.Continue) { break; } RowIDFilter filter = new RowIDFilter(source.IDFieldName); filter.IDs = node.OIDs; filter.SubFields = "*"; using (IFeatureCursor fCursor = await source.GetFeatures(filter)) { if (fCursor == null) { _errMsg = "Fatal error: sourcedb query failed..."; return(false); } int copycounter = await CopyFeatures(fCursor, node.Number, fdb, dest, fTrans, featcounter); if (copycounter < 0) { fCursor.Dispose(); return(false); } featcounter = copycounter; fCursor.Dispose(); } } if (ReportProgress != null) { ReportProgress(this, featcounter); } return(true); }
static void Main(string[] args) { string source_connstr = "", source_fc = ""; string dest_connstr = "", dest_fc = ""; string[] sourceFields = null, destFields = null; Guid source_guid = Guid.Empty, dest_guid = Guid.Empty; bool checkout = false; string checkoutDescription = String.Empty; string child_rights = "iud"; string parent_rights = "iud"; string conflict_handling = "normal"; ISpatialIndexDef treeDef = null; for (int i = 0; i < args.Length - 1; i++) { if (args[i] == "-source_connstr") { source_connstr = args[++i]; } else if (args[i] == "-source_guid") { source_guid = new Guid(args[++i]); } else if (args[i] == "-source_fc") { source_fc = args[++i]; } else if (args[i] == "-dest_connstr") { dest_connstr = args[++i]; } else if (args[i] == "-dest_guid") { dest_guid = new Guid(args[++i]); } else if (args[i] == "-dest_fc") { dest_fc = args[++i]; } else if (args[i] == "-sourcefields") { sourceFields = args[++i].Split(';'); } else if (args[i] == "-destfields") { destFields = args[++i].Split(';'); } else if (args[i] == "-checkout") { checkout = true; checkoutDescription = args[++i]; } else if (args[i] == "-pr") { parent_rights = args[++i]; } else if (args[i] == "-cr") { child_rights = args[++i]; } else if (args[i] == "-ch") { conflict_handling = args[++i]; } //else if (args[i] == "-si") //{ // treeDef = BinaryTreeDef.FromString(args[++i]); // if (treeDef == null) // { // Console.WriteLine("Invalid Spatial Index Def. " + args[i]); // } //} } if (source_connstr == "" || source_fc == "" || source_guid == Guid.Empty || dest_connstr == "" || dest_fc == "" || dest_guid == Guid.Empty) { Console.WriteLine("USAGE:"); Console.WriteLine("gView.Cmd.CopyFeatureclass -source_connstr <Source Dataset Connection String>"); Console.WriteLine(" -source_guid <GUID of Dataset Extension>"); Console.WriteLine(" -source_fc <Featureclass name>"); Console.WriteLine(" -dest_connstr <Destination Dataset Connection String>"); Console.WriteLine(" -dest_guid <GUID of Dataset Extension>"); Console.WriteLine(" -dest_fc <Featureclass name>"); Console.WriteLine(" when check out featureclass:"); Console.WriteLine(" -checkout <Description> ... Write checkout information"); Console.WriteLine(" -pr ... parent rights. <iud|iu|ud|...> (i..INSERT, u..UPDATE, d..DELETE)"); Console.WriteLine(" -cr ... child rights. <iud|iu|ud|...> (i..INSERT, u..UPDATE, d..DELETE)"); Console.WriteLine(" -ch <none|normal|parent_wins|child_wins|newer_wins> ... conflict handling"); return; } IFeatureDataset sourceDS, destDS; IFeatureClass sourceFC; PlugInManager compMan = new PlugInManager(); object comp = compMan.CreateInstance(source_guid); if (!(comp is IFeatureDataset)) { Console.WriteLine("Component with GUID '" + source_guid.ToString() + "' is not a feature dataset..."); return; } sourceDS = (IFeatureDataset)comp; sourceDS.ConnectionString = source_connstr; sourceDS.Open(); sourceFC = GetFeatureclass(sourceDS, source_fc); if (sourceFC == null) { Console.WriteLine("Can't find featureclass '" + source_fc + "' in source dataset..."); sourceDS.Dispose(); return; } if (String.IsNullOrWhiteSpace(sourceFC.IDFieldName)) { Console.WriteLine("WARNING: Souorce FeatureClass has no IDField -> Bad performance!!"); } Console.WriteLine("Source FeatureClass: " + sourceFC.Name); Console.WriteLine("-----------------------------------------------------"); Console.WriteLine("Shape Field: " + sourceFC.ShapeFieldName); if (String.IsNullOrWhiteSpace(sourceFC.IDFieldName)) { Console.WriteLine("WARNING: Souorce FeatureClass has no IDField -> Bad performance!!"); } else { Console.WriteLine("Id Field : " + sourceFC.IDFieldName); } Console.WriteLine(); Console.WriteLine("Import: " + source_fc); Console.WriteLine("-----------------------------------------------------"); FieldTranslation fieldTranslation = new FieldTranslation(); if (sourceFields != null && destFields != null) { if (sourceFields.Length != destFields.Length) { Console.WriteLine("Error in field definition..."); sourceDS.Dispose(); return; } for (int i = 0; i < sourceFields.Length; i++) { IField field = sourceFC.FindField(sourceFields[i]); if (field == null) { Console.WriteLine("Error: Can't find field '" + sourceFields[i] + "'..."); sourceDS.Dispose(); return; } fieldTranslation.Add(field, destFields[i]); } } else { foreach (IField field in sourceFC.Fields) { if (field.type == FieldType.ID || field.type == FieldType.Shape) { continue; } fieldTranslation.Add(field, FieldTranslation.CheckName(field.name)); } } comp = compMan.CreateInstance(dest_guid); if (comp is IFileFeatureDatabase) { IFileFeatureDatabase fileDB = (IFileFeatureDatabase)comp; if (!fileDB.Open(dest_connstr)) { Console.WriteLine("Error opening destination database:" + fileDB.lastErrorMsg); return; } destDS = fileDB[dest_connstr]; } else if (comp is IFeatureDataset) { destDS = (IFeatureDataset)comp; destDS.ConnectionString = dest_connstr; if (!destDS.Open()) { Console.WriteLine("Error opening destination dataset:" + destDS.lastErrorMsg); return; } } else { Console.WriteLine("Component with GUID '" + dest_guid.ToString() + "' is not a feature dataset..."); return; } string replIDField = String.Empty; if (checkout) { if (!(destDS.Database is IFeatureDatabaseReplication) || !(sourceDS.Database is IFeatureDatabaseReplication)) { Console.WriteLine("Can't checkout FROM/TO databasetype..."); return; } replIDField = Replication.FeatureClassReplicationIDFieldname(sourceFC); if (String.IsNullOrEmpty(replIDField)) { Console.WriteLine("Can't checkout from source featureclass. No replication ID!"); return; } IDatasetElement element = destDS[dest_fc]; if (element != null) { List <Guid> checkout_guids = Replication.FeatureClassSessions(element.Class as IFeatureClass); if (checkout_guids != null && checkout_guids.Count != 0) { string errMsg = "Can't check out to this featureclass\n"; errMsg += "Check in the following Sessions first:\n"; foreach (Guid g in checkout_guids) { errMsg += " CHECKOUT_GUID: " + g.ToString(); } Console.WriteLine("ERROR:\n" + errMsg); return; } } } if (destDS.Database is IFeatureDatabase) { if (destDS.Database is AccessFDB) { //Console.WriteLine(); //Console.WriteLine("Import: " + source_fc); //Console.WriteLine("-----------------------------------------------------"); FDBImport import = new FDBImport(((IFeatureUpdater)destDS.Database).SuggestedInsertFeatureCountPerTransaction); import.ReportAction += new FDBImport.ReportActionEvent(import_ReportAction); import.ReportProgress += new FDBImport.ReportProgressEvent(import_ReportProgress); if (checkout) { if (sourceDS.Database is AccessFDB) { treeDef = ((AccessFDB)sourceDS.Database).FcSpatialIndexDef(source_fc); if (destDS.Database is AccessFDB) { ISpatialIndexDef dsTreeDef = ((AccessFDB)destDS.Database).SpatialIndexDef(destDS.DatasetName); if (treeDef.GeometryType != dsTreeDef.GeometryType) { treeDef = dsTreeDef; } } } } if (!import.ImportToNewFeatureclass((IFeatureDatabase)destDS.Database, destDS.DatasetName, dest_fc, sourceFC, fieldTranslation, true, null, treeDef)) { Console.WriteLine("ERROR: " + import.lastErrorMsg); } } else { Console.WriteLine(); Console.WriteLine("Create: " + source_fc); Console.WriteLine("-----------------------------------------------------"); FeatureImport import = new FeatureImport(); import.ReportAction += new FeatureImport.ReportActionEvent(import_ReportAction2); import.ReportProgress += new FeatureImport.ReportProgressEvent(import_ReportProgress2); if (!import.ImportToNewFeatureclass(destDS, dest_fc, sourceFC, fieldTranslation, true)) { Console.WriteLine("ERROR: " + import.lastErrorMsg); } } if (checkout) { IDatasetElement element = destDS[dest_fc]; if (element == null) { Console.WriteLine("ERROR: Can't write checkout information..."); return; } IFeatureClass destFC = element.Class as IFeatureClass; string errMsg; if (!Replication.InsertReplicationIDFieldname(destFC, replIDField, out errMsg)) { Console.WriteLine("ERROR: " + errMsg); return; } Replication.VersionRights cr = Replication.VersionRights.NONE; Replication.VersionRights pr = Replication.VersionRights.NONE; Replication.ConflictHandling ch = Replication.ConflictHandling.NORMAL; if (child_rights.ToLower().Contains("i")) { cr |= Replication.VersionRights.INSERT; } if (child_rights.ToLower().Contains("u")) { cr |= Replication.VersionRights.UPDATE; } if (child_rights.ToLower().Contains("d")) { cr |= Replication.VersionRights.DELETE; } if (parent_rights.ToLower().Contains("i")) { pr |= Replication.VersionRights.INSERT; } if (parent_rights.ToLower().Contains("u")) { pr |= Replication.VersionRights.UPDATE; } if (parent_rights.ToLower().Contains("d")) { pr |= Replication.VersionRights.DELETE; } switch (conflict_handling.ToLower()) { case "none": ch = Replication.ConflictHandling.NONE; break; case "normal": ch = Replication.ConflictHandling.NORMAL; break; case "parent_wins": ch = Replication.ConflictHandling.PARENT_WINS; break; case "child_wins": ch = Replication.ConflictHandling.CHILD_WINS; break; case "newer_wins": ch = Replication.ConflictHandling.NEWER_WINS; break; } if (!Replication.InsertNewCheckoutSession(sourceFC, pr, destFC, cr, ch, SystemInformation.Replace(checkoutDescription), out errMsg)) { Console.WriteLine("ERROR: " + errMsg); return; } if (!Replication.InsertCheckoutLocks(sourceFC, destFC, out errMsg)) { Console.WriteLine("ERROR: " + errMsg); return; } } } else { Console.WriteLine("Destination dataset has no feature database..."); Console.WriteLine("Can't create featureclasses for this kind of dataset..."); } sourceDS.Dispose(); destDS.Dispose(); }
private bool CopyFeatures(IFeatureClass source, IFeatureUpdater fdb, IFeatureClass dest, FieldTranslation fTrans, DualTree tree) { if (tree == null || tree.Nodes == null) { _errMsg = "Spatial Index is not defined..."; return(false); } if (ReportAction != null) { ReportAction(this, "Copy Features (" + dest.Name + ")"); } int featcounter = 0; foreach (SpatialIndexNode node in tree.Nodes) { if (!_cancelTracker.Continue) { break; } RowIDFilter filter = new RowIDFilter(source.IDFieldName); filter.IDs = node.IDs; filter.SubFields = "*"; using (IFeatureCursor fCursor = source.GetFeatures(filter)) { if (fCursor == null) { _errMsg = "Fatal error: sourcedb query failed..."; return(false); } if (!CopyFeatures(fCursor, node.NID, fdb, dest, fTrans, ref featcounter)) { fCursor.Dispose(); return(false); } fCursor.Dispose(); } } if (ReportProgress != null) { ReportProgress(this, featcounter); } return(true); }
private bool ImportToNewFeatureclass(IFeatureDataset destDS, string fcname, IFeatureClass sourceFC, FieldTranslation fieldTranslation, bool project, List <IQueryFilter> filters, DatasetNameCase namecase) { if (!_cancelTracker.Continue) { return(true); } switch (namecase) { case DatasetNameCase.upper: fcname = fcname.ToUpper(); fieldTranslation.ToUpper(); break; case DatasetNameCase.lower: fcname = fcname.ToLower(); fieldTranslation.ToLower(); break; case DatasetNameCase.classNameUpper: fcname = fcname.ToUpper(); break; case DatasetNameCase.classNameLower: fcname = fcname.ToLower(); break; case DatasetNameCase.fieldNamesUpper: fieldTranslation.ToUpper(); break; case DatasetNameCase.fieldNamesLower: fieldTranslation.ToLower(); break; } try { fcname = fcname.Replace(".", "_"); if (destDS == null) { _errMsg = "Argument Exception"; return(false); } IFeatureDatabase fdb = destDS.Database as IFeatureDatabase; if (!(fdb is IFeatureUpdater)) { _errMsg = "Database don't implement IFeatureUpdater..."; return(false); } IDatasetElement destLayer = destDS[fcname] as IDatasetElement; if (destLayer != null) { if (ReportRequest != null) { RequestArgs args = new RequestArgs( "Featureclass " + fcname + " already exists in database\nDo want to replace it?", MessageBoxButtons.YesNoCancel, DialogResult.Cancel); ReportRequest(this, args); switch (args.Result) { case DialogResult.No: return(true); case DialogResult.Cancel: _errMsg = "Import is canceled by the user..."; return(false); } } } if (destLayer != null) { fdb.DeleteFeatureClass(fcname); } int fcID = fdb.CreateFeatureClass(destDS.DatasetName, fcname, sourceFC, (fieldTranslation == null) ? ((sourceFC.Fields != null) ? (IFields)sourceFC.Fields.Clone() : new Fields()) : fieldTranslation.DestinationFields); if (fcID < 0) { _errMsg = "Can't create featureclass " + fcname + "...\r\n" + fdb.lastErrorMsg; destDS.Dispose(); return(false); } destLayer = destDS[fcname] as IDatasetElement; if (destLayer == null || !(destLayer.Class is IFeatureClass)) { _errMsg = "Can't load featureclass " + fcname + "...\r\n" + destDS.lastErrorMsg; destDS.Dispose(); return(false); } IFeatureClass destFC = destLayer.Class as IFeatureClass; if (project && destFC.SpatialReference != null && !destFC.SpatialReference.Equals(sourceFC.SpatialReference)) { _transformer = new GeometricTransformer(); //_transformer.FromSpatialReference = sourceFC.SpatialReference; //_transformer.ToSpatialReference = destFC.SpatialReference; _transformer.SetSpatialReferences(sourceFC.SpatialReference, destFC.SpatialReference); } if (_cancelTracker.Continue) { bool result = true; if (fdb is IFeatureImportEvents) { ((IFeatureImportEvents)fdb).BeforeInsertFeaturesEvent(sourceFC, destFC); } if (!_schemaOnly) { result = CopyFeatures(sourceFC, fdb, destFC, fieldTranslation, filters); } if (!result) { fdb.DeleteFeatureClass(fcname); destDS.Dispose(); return(false); } if (fdb is IFeatureImportEvents) { ((IFeatureImportEvents)fdb).AfterInsertFeaturesEvent(sourceFC, destFC); } } if (fdb is IFileFeatureDatabase) { if (!((IFileFeatureDatabase)fdb).Flush(destFC)) { _errMsg = "Error executing flush for file database..."; return(false); } } destDS.Dispose(); if (_cancelTracker.Continue) { return(true); } else { fdb.DeleteFeatureClass(fcname); _errMsg = "Import is canceled by the user..."; return(false); } } finally { if (_transformer != null) { _transformer.Release(); _transformer = null; } } }
public bool ImportToNewFeatureclass(IFeatureDataset destDS, string fcname, IFeatureClass sourceFC, FieldTranslation fieldTranslation, bool project, List <IQueryFilter> filters) { if (destDS == null) { return(false); } DatasetNameCase nameCase = DatasetNameCase.ignore; foreach (System.Attribute attribute in System.Attribute.GetCustomAttributes(destDS.GetType())) { if (attribute is UseDatasetNameCase) { nameCase = ((UseDatasetNameCase)attribute).Value; } } return(ImportToNewFeatureclass(destDS, fcname, sourceFC, fieldTranslation, project, filters, nameCase)); }
public bool ImportToNewFeatureclass(IFeatureDataset destDS, string fcname, IFeatureClass sourceFC, FieldTranslation fieldTranslation, bool project) { return(ImportToNewFeatureclass(destDS, fcname, sourceFC, fieldTranslation, project, null)); }
private bool CopyFeatures(IFeatureClass source, IFeatureUpdater fdb, IFeatureClass dest, FieldTranslation fTrans, List <IQueryFilter> filters) { if (filters == null) { QueryFilter filter = new QueryFilter(); filter.SubFields = "*"; filters = new List <IQueryFilter>(); filters.Add(filter); } int counter = 0; List <IFeature> features = new List <IFeature>(); foreach (IQueryFilter filter in filters) { using (IFeatureCursor cursor = source.GetFeatures(filter)) { IFeature feature; while ((feature = cursor.NextFeature) != null) { if (fTrans != null) { fTrans.RenameFields(feature); } if (_transformer != null) { feature.Shape = _transformer.Transform2D(feature.Shape) as IGeometry; } features.Add(feature); counter++; if ((counter % this.FeatureBufferSize) == 0) { if (!fdb.Insert(dest, features)) { _errMsg = "Fatal error: destdb insert failed...\n" + fdb.lastErrorMsg; return(false); } features.Clear(); if (ReportProgress != null) { ReportProgress(this, counter); } } } } } if (features.Count > 0) { if (!fdb.Insert(dest, features)) { _errMsg = "Fatal error: destdb insert failed..."; return(false); } features.Clear(); if (ReportProgress != null) { ReportProgress(this, counter); } } return(true); }
public Task <bool> ImportToNewFeatureclass(IFeatureDataset destDS, string fcname, IFeatureClass sourceFC, FieldTranslation fieldTranslation, bool project, geometryType?sourceGeometryType = null) { return(ImportToNewFeatureclass(destDS, fcname, sourceFC, fieldTranslation, project, null, sourceGeometryType)); }