class ExportGeoprocessing { GeoProcessor gp = new GeoProcessor(); IGPUtilities gputils = new GPUtilitiesClass(); public void ExecuteGeoprocessingTask(String infeature, String outfeature, IWorkspace outworkspace, IFeatureWorkspace inputworkspace, IFields fields, Hashtable fieldpairings) { String extension = outfeature.Split('.')[1]; IVariantArray parameters = null; object severity = 2; switch (extension) { case("dbf"): parameters = BuildParameterObjectForTable(infeature, outfeature, outworkspace, inputworkspace, fields, fieldpairings); break; case("shp"): parameters = BuildParameterObjectForShapefile(infeature, outfeature, outworkspace, inputworkspace, fields, fieldpairings); try { gp.Execute("FeatureclassToFeatureclass_conversion", parameters, null); } catch { Console.WriteLine(gp.GetMessages(ref severity).ToString()); } break; } } private IVariantArray BuildParameterObjectForShapefile(String infeature, String outfeature, IWorkspace outworkspace, IFeatureWorkspace inputworkspace,IFields fields, Hashtable fieldpairings) { IVariantArray parameters = new VarArrayClass(); IName fcname = GetFeatureName(infeature, outfeature, (IWorkspace)inputworkspace); IFeatureClass infc = inputworkspace.OpenFeatureClass(infeature); IGPFieldMapping fieldmapping = BuildOutputFieldMapping(fcname, fields, fieldpairings); parameters.Add(infc); parameters.Add(outworkspace); //make a string object parameters.Add(outfeature); parameters.Add(" "); parameters.Add(fieldmapping); return parameters; } private IVariantArray BuildParameterObjectForTable(String infeature, String outfeature, IWorkspace outworkspace, IFeatureWorkspace inputworkspace, IFields fields, Hashtable fieldpairings) { IVariantArray parameters = new VarArrayClass(); IName fcname = GetFeatureName(infeature, outfeature, (IWorkspace)inputworkspace); ITable intable = inputworkspace.OpenTable(infeature); return parameters; } private IName GetFeatureName(String infeature, String outfeature, IWorkspace workspace) { IName infeaturename = null; String extension = outfeature.Split('.')[1]; String infcname = infeature.Split('.')[1]; switch (extension) { case ("dbf"): IEnumDatasetName tablenames = workspace.get_DatasetNames(esriDatasetType.esriDTTable); infeaturename = AssignNameVariable(infcname, tablenames); break; case ("shp"): IEnumDatasetName dsnames = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass); if (infeature.Contains("\\")) { IDatasetName ds = dsnames.Next(); while (ds != null) { IEnumDatasetName fcs = ds.SubsetNames; infeaturename = AssignNameVariable(infcname, fcs); ds = dsnames.Next(); } } else { infeaturename = AssignNameVariable(infcname, dsnames); } break; } return infeaturename; } private IName AssignNameVariable(String infeaturename, IEnumDatasetName dsnames) { IName infcname = null; IDatasetName fc = dsnames.Next(); while (fc != null) { if (fc.Name.ToUpper().Contains(infeaturename.ToUpper())) { if (infcname == null) { infcname = (IName)fc; } break; } fc = dsnames.Next(); } return infcname; } private IGPFieldMapping BuildOutputFieldMapping(IName fcname, IFields fields, Hashtable fieldpairings) { IGPFieldMapping fieldmapping = new GPFieldMappingClass(); IDETable intable = (IDETable)gputils.MakeDataElementFromNameObject(fcname); IArray intables = new ArrayClass(); intables.Add(intable); fieldmapping.Initialize(intables, null); IFields infields = intable.Fields; foreach (String key in fieldpairings.Keys) { int fieldindex = fieldmapping.FindFieldMap(fieldpairings[key].ToString()); IGPFieldMap tempfieldmap = fieldmapping.GetFieldMap(fieldindex); int tempmapindex = tempfieldmap.FindInputField(intable, fieldpairings[key].ToString()); IField inputfield = tempfieldmap.GetField(tempmapindex); int inindex = infields.FindField(fieldpairings[key].ToString()); IField fieldin = infields.get_Field(inindex); IGPFieldMap fieldmap = new GPFieldMapClass(); fieldmap.OutputField = fields.get_Field(fields.FindField(key.ToString())); fieldmap.AddInputField(intable, fieldin, 0, fieldin.Length); fieldmapping.AddFieldMap(fieldmap); fieldmap.RemoveAll(); } return fieldmapping; } }
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.