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; } }
Membros conectados podem postar, seguir atualizações e mais. Novo aqui? Registre uma conta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.