Select to view content in your preferred language

geoprocessing with a definition expression

678
1
05-10-2013 03:57 PM
GaryBilotta
Regular Contributor
I am trying to use the Geoprocessor class to run a symmetrical difference on two layers with definition expressions on them in a console application.  Whenever I run the code, the symmetrical difference is run, but the definition expression is not taken into consideration.  Has anyone else tried to use a definition expression while using the geoprocessor class?  Thank you.

Here is what I have:

//create a new layer
IFeatureLayer arcFLayer1 = new FeatureLayer();
//assign the feature class
Layer1.FeatureClass = arcFClass1;
arcFLayer1.Name = 'Layer1';

//create a definition expression
IFeatureLayerDefinition2 arcFLayerDef1 = arcFLayer1 as IFeatureLayerDefinition2;
arcFLayerDef1.DefinitionExpression = "BDTYPE = 'F'";

//add it to a map object
arcMapp.addLayer(arcFLayer1);

//get the layer as a geofeaturelayer
IGeoFeatureLayer arcGeoFLayer1 = arcMapp.get_Layer(0) as IGeoFeatureLayer;

//create a new layer
IFeatureLayer arcFLayer2 = new FeatureLayer();
//assign the feature class
Layer2.FeatureClass = arcFClass2;
arcFLayer2.Name = 'Layer2';

//create a definition expression
IFeatureLayerDefinition2 arcFLayerDef2 = arcFLayer2 as IFeatureLayerDefinition2;
arcFLayerDef2.DefinitionExpression = "BDTYPE = 'F'";

//add it to a map object
arcMapp.addLayer(arcFLayer2);

//get the layer as a geofeaturelayer
IGeoFeatureLayer arcGeoFLayer2 = arcMapp.get_Layer(0) as IGeoFeatureLayer;

//create a geoprocessor objects
Geoprocessor GP = new Geoprocessor();

//setup the symmetrical difference
ESRI.ArcGIS.AnalysisTools.SymDiff arcSymDiff = new ESRI.ArcGIS.AnalysisTools.SymDiff();
arcSymDiff.in_features = arcGeoFLayer1.DisplayFeatureClass;
arcSymDiff.update_features = arcGeoFLayer2.DisplayFeatureClass ;
arcSymDiff.join_attributes = "ONLY_FID";

//execute
GP.Execute(arcSymDiff, null);
0 Kudos
1 Reply
LeoDonahue
Deactivated User
I have code that applies the definition expression on a IGeoFeatureLayer, not the IFeatureLayer.  But I do cast to FeatureLayer.

Not sure if that helps.

IGeoFeatureLayer functionalNeedsFeatureLayer = (FeatureLayer) RDSAMapUtility.getLayerByName(ManageMCSOEvacuationsModel.MCSOEVACUATIONSFEATURELAYERNAME);
((FeatureLayer) functionalNeedsFeatureLayer).setDefinitionExpression("EVAC_REQ_STATUS = 'EVAC NOT REQUESTED'");
0 Kudos