Solved! Go to Solution.
Unfortunately did not work, only creates an empty layer.
Simple exampel:IFeatureLayer featlayerP = Class2.FindFeatureLayer("monitoring.dbo.path_polygon", mxDocument); IFeatureLayer featlayerC = Class2.FindFeatureLayer("monitoring.dbo.%compartment_polygon", mxDocument); Geoprocessor GP = new Geoprocessor(); // Intialize the MakeFeatureLayer tool MakeFeatureLayer makefeaturelayer = new MakeFeatureLayer(); makefeaturelayer.in_features = featlayerP; makefeaturelayer.out_layer = "Wells_Lyr"; copyfeatures.RunTool(GP, makefeaturelayer, null); makefeaturelayer.in_features = featlayerC; makefeaturelayer.out_layer = "bedrock_Lyr"; copyfeatures.RunTool(GP, makefeaturelayer, null); SelectLayerByLocation SelectByLocation = new SelectLayerByLocation(); SelectByLocation.in_layer = "Wells_Lyr"; SelectByLocation.select_features = "bedrock_Lyr"; SelectByLocation.overlap_type = "INTERSECT"; copyfeatures.RunTool(GP, SelectByLocation, null); SelectLayerByAttribute SelectByAttribute = new SelectLayerByAttribute(); SelectByAttribute.in_layer_or_view = "Wells_Lyr"; SelectByAttribute.selection_type = "NEW_SELECTION"; SelectByAttribute.where_clause = "id = '916EEBA8-7721-4BD3-8833-B61AC78A8F74'"; copyfeatures.RunTool(GP, SelectByAttribute, null); // Intialize the CopyFeatures tool CopyFeatures CopyFeatures = new CopyFeatures(); CopyFeatures.in_features = "Wells_Lyr";// "monitoring.dbo.path_polygon"; CopyFeatures.out_feature_class = @"C:\Users\kharitonov.sv\Documents\ArcGIS\Default.gdb\Wells_Lyr_c"; copyfeatures.RunTool(GP, CopyFeatures, null);
I tried it the other way. He gives me all the values ??????of the parent layer. Secret:(IFeatureSelection featureSelection = featlayerP as IFeatureSelection; IQueryFilter qFilter = new QueryFilter(); qFilter.WhereClause = "id = '916EEBA8-7721-4BD3-8833-B61AC78A8F74'"; ISelectionSet selectionSet = featureSelection.SelectionSet; ICursor cursor; selectionSet.Search(qFilter, false, out cursor); IFeatureCursor featureCursor = cursor as IFeatureCursor; IFeature feature = featureCursor.NextFeature(); List<IFeature> features = new List<IFeature>(); while (feature != null) { features.Add(feature); feature = featureCursor.NextFeature(); } IFeatureClass r = (IFeatureClass)features[0].Class; IFeatureLayer y = new FeatureLayerClass(); y.FeatureClass = r; y.Name = "new"; mxDocument.Maps.Item[1].AddLayer(y); mxDocument.ActiveView.Refresh();
Hi, I have one problem!
How to copy an object from the layer selected by the filter, in another new layer.
I can get the selected feature, but how to add it to a new layer don't know: (
Use CopyFeatures class which you can execute through Geoprocessor ,
Check this link for sample example http://edndoc.esri.com/arcobjects/9.2/NET/ViewCodePages/43d8cc77-5193-4ca8-9878-6027782e2bbbexecutet...
Hope this helps,
Regards,
Pavan
        
            IFeatureLayer featlayerP = Class2.FindFeatureLayer("monitoring.dbo.path_polygon", mxDocument);
            IFeatureLayer featlayerC = Class2.FindFeatureLayer("monitoring.dbo.%compartment_polygon", mxDocument);
            Geoprocessor GP = new Geoprocessor();
            // Intialize the MakeFeatureLayer tool
            MakeFeatureLayer makefeaturelayer = new MakeFeatureLayer();
            makefeaturelayer.in_features = featlayerP;
            makefeaturelayer.out_layer = "Wells_Lyr";
            copyfeatures.RunTool(GP, makefeaturelayer, null);
            makefeaturelayer.in_features = featlayerC;
            makefeaturelayer.out_layer = "bedrock_Lyr";
            copyfeatures.RunTool(GP, makefeaturelayer, null);
            SelectLayerByLocation SelectByLocation = new SelectLayerByLocation();
            SelectByLocation.in_layer = "Wells_Lyr";
            SelectByLocation.select_features = "bedrock_Lyr";
            SelectByLocation.overlap_type = "INTERSECT";
            copyfeatures.RunTool(GP, SelectByLocation, null);
            SelectLayerByAttribute SelectByAttribute = new SelectLayerByAttribute();
            SelectByAttribute.in_layer_or_view = "Wells_Lyr";
            SelectByAttribute.selection_type = "NEW_SELECTION";
            SelectByAttribute.where_clause = "id = '916EEBA8-7721-4BD3-8833-B61AC78A8F74'";
            copyfeatures.RunTool(GP, SelectByAttribute, null);
            // Intialize the CopyFeatures tool
            CopyFeatures CopyFeatures = new CopyFeatures();
            CopyFeatures.in_features = "Wells_Lyr";// "monitoring.dbo.path_polygon";            
            CopyFeatures.out_feature_class = @"C:\Users\kharitonov.sv\Documents\ArcGIS\Default.gdb\Wells_Lyr_c";
            copyfeatures.RunTool(GP, CopyFeatures, null);
            IFeatureSelection featureSelection = featlayerP as IFeatureSelection;
            IQueryFilter qFilter = new QueryFilter();
            qFilter.WhereClause = "id = '916EEBA8-7721-4BD3-8833-B61AC78A8F74'";
            ISelectionSet selectionSet = featureSelection.SelectionSet;
            ICursor cursor;
            selectionSet.Search(qFilter, false, out cursor);
            IFeatureCursor featureCursor = cursor as IFeatureCursor;
            IFeature feature = featureCursor.NextFeature();
            List<IFeature> features = new List<IFeature>();
            while (feature != null)
            {
                features.Add(feature);
                feature = featureCursor.NextFeature();
            }
            IFeatureClass r = (IFeatureClass)features[0].Class;
            IFeatureLayer y = new FeatureLayerClass();
            y.FeatureClass = r;
            y.Name = "new";
            mxDocument.Maps.Item[1].AddLayer(y);            
            mxDocument.ActiveView.Refresh();
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		Unfortunately did not work, only creates an empty layer.
Simple exampel:IFeatureLayer featlayerP = Class2.FindFeatureLayer("monitoring.dbo.path_polygon", mxDocument); IFeatureLayer featlayerC = Class2.FindFeatureLayer("monitoring.dbo.%compartment_polygon", mxDocument); Geoprocessor GP = new Geoprocessor(); // Intialize the MakeFeatureLayer tool MakeFeatureLayer makefeaturelayer = new MakeFeatureLayer(); makefeaturelayer.in_features = featlayerP; makefeaturelayer.out_layer = "Wells_Lyr"; copyfeatures.RunTool(GP, makefeaturelayer, null); makefeaturelayer.in_features = featlayerC; makefeaturelayer.out_layer = "bedrock_Lyr"; copyfeatures.RunTool(GP, makefeaturelayer, null); SelectLayerByLocation SelectByLocation = new SelectLayerByLocation(); SelectByLocation.in_layer = "Wells_Lyr"; SelectByLocation.select_features = "bedrock_Lyr"; SelectByLocation.overlap_type = "INTERSECT"; copyfeatures.RunTool(GP, SelectByLocation, null); SelectLayerByAttribute SelectByAttribute = new SelectLayerByAttribute(); SelectByAttribute.in_layer_or_view = "Wells_Lyr"; SelectByAttribute.selection_type = "NEW_SELECTION"; SelectByAttribute.where_clause = "id = '916EEBA8-7721-4BD3-8833-B61AC78A8F74'"; copyfeatures.RunTool(GP, SelectByAttribute, null); // Intialize the CopyFeatures tool CopyFeatures CopyFeatures = new CopyFeatures(); CopyFeatures.in_features = "Wells_Lyr";// "monitoring.dbo.path_polygon"; CopyFeatures.out_feature_class = @"C:\Users\kharitonov.sv\Documents\ArcGIS\Default.gdb\Wells_Lyr_c"; copyfeatures.RunTool(GP, CopyFeatures, null);
I tried it the other way. He gives me all the values ??????of the parent layer. Secret:(IFeatureSelection featureSelection = featlayerP as IFeatureSelection; IQueryFilter qFilter = new QueryFilter(); qFilter.WhereClause = "id = '916EEBA8-7721-4BD3-8833-B61AC78A8F74'"; ISelectionSet selectionSet = featureSelection.SelectionSet; ICursor cursor; selectionSet.Search(qFilter, false, out cursor); IFeatureCursor featureCursor = cursor as IFeatureCursor; IFeature feature = featureCursor.NextFeature(); List<IFeature> features = new List<IFeature>(); while (feature != null) { features.Add(feature); feature = featureCursor.NextFeature(); } IFeatureClass r = (IFeatureClass)features[0].Class; IFeatureLayer y = new FeatureLayerClass(); y.FeatureClass = r; y.Name = "new"; mxDocument.Maps.Item[1].AddLayer(y); mxDocument.ActiveView.Refresh();
It worked for me though.. I applied SelectlayerByAttributes on my layer. This is how did
IFeatureLayer pFeatureLayer = GetFeatureLayer(); // I got my desired featurelayer from layers list displayed on map.
SelectLayerByAttribute pSelect = new SelectLayerByAttribute();
pSelect .in_layer_or_view = pFeatureLayer; // directly take your featurelayerP or featurelayerC
pSelect .selection_type = "NEW_SELECTION";
pSelect .where_clause = "id = '916EEBA8-7721-4BD3-8833-B61AC78A8F74'"; // I had given a Where condition .. "Country = India"
pSelect.out_layer_or_view = "Filtered_layer";
copyfeatures.RunTool(GP, SelectByAttribute, null); // RunTool () as mentioned in the link
// Intialize the CopyFeatures tool
CopyFeatures CopyFeatures = new CopyFeatures();
// Here since the features are already selected in pFeatureLayer..
CopyFeatures.in_features = pFeatureLayer; // only selected elements are passed as in_features.
CopyFeatures.out_feature_class = @"C:\Users\kharitonov.sv\Documents\ArcGIS\Default.gdb\Wells_Lyr_c"; // specify a valid path that exists
copyfeatures.RunTool(GP, CopyFeatures, null);
Worked for me this way.. i feel you should also get it.
Regards,
Pavan
string outs = @"Database Connections\Connection to 192.168.56.102 (3).sde"; CopyFeatures.in_features = featlayerP; CopyFeatures.out_feature_class = outs+@"\\Wells_Lyr_c";
Good to hear that the solution works but I am sorry Sergey .. I do not have an idea on your second question. I think you can mark this post as Answered, so that i also get a point added 😛 .. and start a new post for your second question. 🙂
Regards,
Pavan
