Select to view content in your preferred language

Select Points inside selected polygon

4027
6
11-28-2012 09:35 PM
MuhammadWaqar_ul_islam
Occasional Contributor
Dear All
I Have two layer in my map service. one polygon,one point
i want to selecet point inside the selected polygon 
i m using http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#AttributeQuery
through this i can select polygon but how i can select points inside that selected polygon

required  code please


regards
Waqar
0 Kudos
6 Replies
JohanCarlsson
Regular Contributor
Would it be enough to check what type of symbol you clicked on?

if (g.Symbol is SimpleFillSymbol)
    // You clicked a polygon
else
    // You clicked some other graphic
0 Kudos
MuhammadWaqar_ul_islam
Occasional Contributor
My question is how I can select points from point layer which are completely in side selected polygon .
I already select polygon using attribute example
http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#AttributeQuery

required help in code
thanks in advance
0 Kudos
ChrisBradberry
Deactivated User
Waqar

Using your results from the attribute query get the geometry from the result
ESRI.ArcGIS.Client.Geometry.Geometry geo = e.FeatureSet.Features[0].Geometry
from the QueryTask_ExecuteCompleted

use this geometry to add to the identify parameters in the identify task
http://resources.arcgis.com/en/help/silverlight-api/samples/start.htm#Identify

place the identify query inside the QueryTask_ExecuteCompleted method.

IdentifyParameters idResParams = new IdentifyParameters()
            {
                Geometry = geo,
                MapExtent = Map.Extent,
                Width = (int)Map.ActualWidth,
                Height = (int)Map.ActualHeight,
                LayerOption = LayerOption.all,
                SpatialReference = Map.SpatialReference

            };

You might want to change the LayerOption to get the results that you need.
0 Kudos
MuhammadWaqar_ul_islam
Occasional Contributor
unbale to select points inside selected polygon graphic feature
c# code required
0 Kudos
MuhammadWaqar_ul_islam
Occasional Contributor
I m trying this need help here

public MainPage()
        {
            InitializeComponent();

            QueryTask queryTask = new QueryTask("http://localhost/ArcGISSERVER/rest/services/Customer_Area/MapServer/2");//polygon
            QueryTask qtponit = new QueryTask("http://localhost/ArcGISSERVER/rest/services/Customer_Area/MapServer/1"); //points
            qtponit.ExecuteCompleted += qtponit_ExecuteCompleted;
            queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;
            queryTask.Failed += QueryTask_Failed;
            qtponit.Failed += qtponit_Failed;

            ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query();
            query.ReturnGeometry = true;
            // Specify fields to return from initial query
            query.OutFields.AddRange(new string[] { "Area_Code_" }); //polygon feild

            // This query will just populate the drop-down, so no need to return geometry


            // Return all features
            query.Where = "1=1";
            queryTask.ExecuteAsync(query, "initial");

            ESRI.ArcGIS.Client.Tasks.Query queryPoint = new ESRI.ArcGIS.Client.Tasks.Query();
           // queryPoint.SpatialRelationship= "
        
            queryPoint.ReturnGeometry = true;
            queryPoint.SpatialRelationship = SpatialRelationship.esriSpatialRelIntersects;
           // queryPoint.OutFields.AddRange(new string[] { "Area" }); ;
            //queryPoint.Where = "1=1";
            qtponit.ExecuteAsync(queryPoint, "initial");
        }

        private void cmbArea_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (comboBox1.SelectedItem.ToString().Contains("Select..."))
                return;

            QueryTask queryTask = new QueryTask("http://localhost/ArcGISSERVER/rest/services/Customer_Area/MapServer/2");

            queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;

               queryTask.Failed += QueryTask_Failed;

            ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query();

            query.Text = comboBox1.SelectedItem.ToString();
            query.OutSpatialReference = MyMap.SpatialReference;
            query.OutFields.Add("*");
            query.ReturnGeometry = true;
            queryTask.ExecuteAsync(query);


        }
        private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args)
        {


            // If initial query to populate states combobox
            if ((args.UserState as string) == "initial")
            {
                // Just show on initial load
                comboBox1.Items.Add("Select...");

                foreach (Graphic graphic in args.FeatureSet.Features)
                {
                    comboBox1.Items.Add(graphic.Attributes["Area_Code_"].ToString());
                }

                comboBox1.SelectedIndex = 0;
                return;
            }

            // Remove the first entry if "Select..."
            if (comboBox1.Items[0].ToString().Contains("Select..."))
                comboBox1.Items.RemoveAt(0);
            // below  code is for select Polygon
            // If an item has been selected           
            GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
            graphicsLayer.ClearGraphics();

            FeatureSet featureSet = args.FeatureSet;
            if (featureSet != null && featureSet.Features.Count > 0)
            {
                // Show selected feature attributes in DataGrid
                Graphic selectedFeature = featureSet.Features[0];



                // Hightlight selected feature
                selectedFeature.Symbol = LayoutRoot.Resources["DefaultFillSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol;
                graphicsLayer.Graphics.Add(selectedFeature);

                // Zoom to selected feature (define expand percentage)
                ESRI.ArcGIS.Client.Geometry.Envelope selectedFeatureExtent = selectedFeature.Geometry.Extent;

                double expandPercentage = 30;

                double widthExpand = selectedFeatureExtent.Width * (expandPercentage / 100);
                double heightExpand = selectedFeatureExtent.Height * (expandPercentage / 100);

                ESRI.ArcGIS.Client.Geometry.Envelope displayExtent = new ESRI.ArcGIS.Client.Geometry.Envelope(
                selectedFeatureExtent.XMin - (widthExpand / 2),
                selectedFeatureExtent.YMin - (heightExpand / 2),
                selectedFeatureExtent.XMax + (widthExpand / 2),
                selectedFeatureExtent.YMax + (heightExpand / 2));

                MyMap.ZoomTo(displayExtent);
            }

        }
        private void qtponit_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args)
        {
            GraphicsLayer graphicsLayerpoint = MyMap.Layers["MyGraphicsLayerPoint"] as GraphicsLayer;
            graphicsLayerpoint.ClearGraphics();




            FeatureSet featureSet = args.FeatureSet;
            if (featureSet == null || featureSet.Features.Count < 1)
            {
                MessageBox.Show("No features retured from query");
                return;
            }



if (featureSet != null && featureSet.Features.Count > 0)
            {
                foreach (Graphic feature in featureSet.Features)
                {
                    feature.Symbol = LayoutRoot.Resources["DefaultMarkerSymbol"] as MarkerSymbol;
                    graphicsLayerpoint.Graphics.Insert(0, feature);
                }
           
            //if (featureSet != null && featureSet.Features.Count > 0)
            //{
            //    // Show selected feature attributes in DataGrid
            //    Graphic selectedFeature = featureSet.Features[0];



                //// Hightlight selected feature
                //selectedFeature.Symbol = LayoutRoot.Resources["DefaultMarkerSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol;
                //graphicsLayerpoint.Graphics.Add(selectedFeature);
            }
        }
        private void QueryTask_Failed(object sender, TaskFailedEventArgs args)
        {
            MessageBox.Show("Query failed: " + args.Error);
        }
        private void qtponit_Failed(object sender, TaskFailedEventArgs args)
        {
            MessageBox.Show("Query failed: " + args.Error);
        }
        public Symbol DefaultFillSymbol { get; set; }

        private void Click_Test(object sender, RoutedEventArgs e)
        {
// to select point inside in the selected polygon but its give erorr dont know why

            QueryTask qtponit = new QueryTask("http://localhost/ArcGISSERVER/rest/services/Customer_Area/MapServer/1");
            qtponit.ExecuteCompleted += qtponit_ExecuteCompleted;
            qtponit.Failed += qtponit_Failed;
            ESRI.ArcGIS.Client.Tasks.Query queryPoint = new ESRI.ArcGIS.Client.Tasks.Query();
            queryPoint.OutSpatialReference = MyMap.SpatialReference;
            queryPoint.ReturnGeometry = true;
            queryPoint.SpatialRelationship = SpatialRelationship.esriSpatialRelIntersects;
            queryPoint.OutFields.Add("*");
            qtponit.ExecuteAsync(queryPoint);
        }
0 Kudos
MuhammadWaqar_ul_islam
Occasional Contributor
final solution for above question
using AttributeQuery # sample

used simplify



        private void SimplifyAndQueryButton_Click(object sender, RoutedEventArgs e)
        {
            GeometryService geometryService =
              new GeometryService("http://localhost/ArcGISSERVER/rest/services/Geometry/GeometryServer");
            geometryService.SimplifyCompleted += GeometryService_SimplifyCompleted;
            geometryService.Failed += GeometryService_Failed;

            List<Graphic> graphicList = new List<Graphic>();
           // graphicList.Add(_unsimplifiedGraphic);
            graphicList.Add(selectedFeature);
            geometryService.SimplifyAsync(graphicList);

            ResultsDisplayCanvasBuffer.Visibility = Visibility.Visible;
        }

        private void GeometryService_SimplifyCompleted(object sender, GraphicsEventArgs args)
        {
            doQuery(args.Results[0].Geometry);
        }

        private void doQuery(ESRI.ArcGIS.Client.Geometry.Geometry geometry)
        {
            QueryTask queryTaskpoint = new QueryTask("http://localhost/ArcGISSERVER/rest/services/Customer_Area/MapServer/1");
            queryTaskpoint.ExecuteCompleted += QueryTaskpoint_ExecuteCompleted;
            queryTaskpoint.Failed += QueryTaskpoint_Failed;

            ESRI.ArcGIS.Client.Tasks.Query queryp = new ESRI.ArcGIS.Client.Tasks.Query()
            {
                Geometry = geometry,
                SpatialRelationship = SpatialRelationship.esriSpatialRelContains,
                OutSpatialReference = MyMap.SpatialReference,
                ReturnGeometry = true
            };
            queryp.OutFields.Add("*");
            queryTaskpoint.ExecuteAsync(queryp);
        }

        private void QueryTaskpoint_ExecuteCompleted(object sender, QueryEventArgs args)
        {
            if (args.FeatureSet == null)
                return;
            FeatureSet featureSet = args.FeatureSet;
            QueryDetailsDataGridBuffer.ItemsSource = featureSet.Features;
            GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
            graphicsLayer.ClearGraphics();

            if (featureSet != null && featureSet.Features.Count > 0)
            {
                foreach (Graphic feature in featureSet.Features)
                {
                    ESRI.ArcGIS.Client.Graphic graphic = new ESRI.ArcGIS.Client.Graphic()
                    {
                        Geometry = feature.Geometry,
                        Symbol = LayoutRoot.Resources["DefaultMarkerSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol
                    };
                    graphicsLayer.Graphics.Add(graphic);
                }
            }
          //  graphicsLayer.Graphics.Add(_unsimplifiedGraphic);
            graphicsLayer.Graphics.Add(selectedFeature);
        }

        private void GeometryService_Failed(object sender, TaskFailedEventArgs e)
        {
            MessageBox.Show("Geometry Service error: " + e.Error);
        }

        private void QueryTaskpoint_Failed(object sender, TaskFailedEventArgs e)
        {
            MessageBox.Show("Query failed: " + e.Error);
        }

        private void Selection_Change_Buffer(object sender, SelectionChangedEventArgs e)
        {
             System.Windows.Controls.DataGrid dataGrid = sender as System.Windows.Controls.DataGrid;

            int selectedIndex = dataGrid.SelectedIndex;
            if (selectedIndex > -1)
            {
                //FindResult findResult = (FindResult)QueryDetailsDataGrid.SelectedItem;
                //Graphic graphic = findResult.Feature;
                Graphic graphic = (Graphic)QueryDetailsDataGridBuffer.SelectedItem;
                ESRI.ArcGIS.Client.Geometry.Envelope selectedFeatureExtent = graphic.Geometry.Extent;
                double expandPercentage = 30;

                double widthExpand = selectedFeatureExtent.Width * (expandPercentage / 100);
                double heightExpand = selectedFeatureExtent.Height * (expandPercentage / 100);

                ESRI.ArcGIS.Client.Geometry.Envelope displayExtent = new ESRI.ArcGIS.Client.Geometry.Envelope(
                selectedFeatureExtent.XMin - (widthExpand / 2),
                selectedFeatureExtent.YMin - (heightExpand / 2),
                selectedFeatureExtent.XMax + (widthExpand / 2),
                selectedFeatureExtent.YMax + (heightExpand / 2));

          

                graphic.Symbol = LayoutRoot.Resources["SelectedSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol;

                GraphicsLayer graphicsLayer = MyMap.Layers["SelectedTableGraphicLayer"] as GraphicsLayer;
                //  graphicsLayer.ClearGraphics();
                // graphicsLayer.Graphics.Add(graphic);
                MyMap.PanTo(displayExtent);
            }

        }
0 Kudos