Пример #1
0
        private void ExecuteButton_Click(object sender, RoutedEventArgs e)
        {
            GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;

            graphicsLayer.ClearGraphics();

            FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");

            findTask.Failed += FindTask_Failed;

            FindParameters findParameters = new FindParameters();

            // Layer ids to search
            findParameters.LayerIds.AddRange(new int[] { 0, 1, 2 });
            // Fields in layers to search
            findParameters.SearchFields.AddRange(new string[] { "CITY_NAME", "NAME", "SYSTEM", "STATE_ABBR", "STATE_NAME" });
            // Return features in map's spatial reference
            findParameters.SpatialReference = MyMap.SpatialReference;


            // Bind data grid to find results.  Bind to the LastResult property which returns a list
            // of FindResult instances.  When LastResult is updated, the ItemsSource property on the
            // will update.
            Binding resultFeaturesBinding = new Binding("LastResult");

            resultFeaturesBinding.Source = findTask;
            FindDetailsDataGrid.SetBinding(DataGrid.ItemsSourceProperty, resultFeaturesBinding);

            findParameters.SearchText = FindText.Text;
            findTask.ExecuteAsync(findParameters);

            // Since binding to DataGrid, handling the ExecuteComplete event is not necessary.
        }
Пример #2
0
        protected void CreateCriteriaFromFindParameters(ActiveRecordDataSourceFindEventArgs args)
        {
            IOrderedDictionary values = FindParameters.GetValues(HttpContext.Current, Source);

            for (int i = 0; i < FindParameters.Count; i++)
            {
                Parameter parameter = FindParameters[i];

                if (parameter is NullParameter)
                {
                    NullParameter nullParameter = (NullParameter)parameter;

                    if (nullParameter.Expression == NullExpression.IsNull)
                    {
                        args.Criteria.Add(Expression.IsNull(parameter.Name));
                    }
                    else if (nullParameter.Expression == NullExpression.IsNotNull)
                    {
                        args.Criteria.Add(Expression.IsNotNull(parameter.Name));
                    }
                }
                else
                {
                    args.Criteria.Add(Expression.Eq(parameter.Name, values[i]));
                }
            }
        }
        /// <summary>
        /// Searches asynchronously for places matching the specified text.
        /// </summary>
        public Task<List<Graphic>> FindAsync(string searchText)
        {
            FindParameters findParams = new FindParameters();
              findParams.LayerIds.AddRange(new int[] { 0 });  // cities layer
              findParams.SearchFields.AddRange(new string[] { "CITY_NAME" });
              findParams.SpatialReference = new SpatialReference(4326);
              findParams.SearchText = searchText;

              FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");

              var tcs = new TaskCompletionSource<List<Graphic>>();
              findTask.ExecuteCompleted += (sender, e) =>
              {
            List<Graphic> graphics = new List<Graphic>();
            foreach (var result in e.FindResults)
              graphics.Add(result.Feature);

            tcs.TrySetResult(graphics);
              };

              findTask.Failed += (sender, e) =>
              {
            tcs.TrySetResult(new List<Graphic>());
              };

              findTask.ExecuteAsync(findParams);
              return tcs.Task;
        }
Пример #4
0
        /// <summary>
        /// Searches asynchronously for places matching the specified text.
        /// </summary>
        public Task <List <Graphic> > FindAsync(string searchText)
        {
            FindParameters findParams = new FindParameters();

            findParams.LayerIds.AddRange(new int[] { 0 }); // cities layer
            findParams.SearchFields.AddRange(new string[] { "CITY_NAME" });
            findParams.SpatialReference = new SpatialReference(4326);
            findParams.SearchText       = searchText;

            FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");

            var tcs = new TaskCompletionSource <List <Graphic> >();

            findTask.ExecuteCompleted += (sender, e) =>
            {
                List <Graphic> graphics = new List <Graphic>();
                foreach (var result in e.FindResults)
                {
                    graphics.Add(result.Feature);
                }

                tcs.TrySetResult(graphics);
            };

            findTask.Failed += (sender, e) =>
            {
                tcs.TrySetResult(new List <Graphic>());
            };

            findTask.ExecuteAsync(findParams);
            return(tcs.Task);
        }
        private void ExecuteButton_Click(object sender, RoutedEventArgs e)
        {
            GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
            graphicsLayer.Graphics.Clear();

            FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");
            findTask.Failed += FindTask_Failed;

            FindParameters findParameters = new FindParameters();
            // Layer ids to search
            findParameters.LayerIds.AddRange(new int[] { 0,1,2 });
            // Fields in layers to search
            findParameters.SearchFields.AddRange(new string[] { "CITY_NAME", "NAME", "SYSTEM", "STATE_ABBR", "STATE_NAME" });
            // Return features in map's spatial reference
            findParameters.SpatialReference = MyMap.SpatialReference;

            // Bind data grid to find results.  Bind to the LastResult property which returns a list
            // of FindResult instances.  When LastResult is updated, the ItemsSource property on the
            // will update.
            Binding resultFeaturesBinding = new Binding("LastResult");
            resultFeaturesBinding.Source = findTask;
            FindDetailsDataGrid.SetBinding(DataGrid.ItemsSourceProperty, resultFeaturesBinding);

            findParameters.SearchText = FindText.Text;
            findTask.ExecuteAsync(findParameters);

            // Since binding to DataGrid, handling the ExecuteComplete event is not necessary.
        }
Пример #6
0
        public async void Execute(object parameter)
        {
            var url      = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer";
            var findTask = new FindTask(new Uri(url));

            var findParameters = new FindParameters();

            findParameters.LayerIDs.Add(0); // Cities
            findParameters.LayerIDs.Add(3); // Counties
            findParameters.LayerIDs.Add(2); // States

            findParameters.SearchFields.Add("name");
            findParameters.SearchFields.Add("areaname");
            findParameters.SearchFields.Add("state_name");

            findParameters.ReturnGeometry = true;
            //findParameters.SpatialReference = MyMapView.SpatialReference;

            findParameters.SearchText = (string)parameter;
            findParameters.Contains   = true;

            FindResult findResult = await
                                    findTask.ExecuteAsync(findParameters);

            var foundCities   = 0;
            var foundCounties = 0;
            var foundStates   = 0;

            // Loop thru results; count the matches found in each layer
            foreach (FindItem findItem in findResult.Results)
            {
                switch (findItem.LayerID)
                {
                case 0:     // Cities
                    foundCities++;
                    break;

                case 3:     // Counties
                    foundCounties++;
                    break;

                case 2:     // States
                    foundStates++;
                    break;
                }
            }

            // Report the number of matches for each layer
            var msg = string.Format("Found {0} cities, {1} counties, and {2} states containing '" + (string)parameter +
                                    "' in a Name attribute", foundCities, foundCounties,
                                    foundStates);

            MessageBox.Show(msg);

            vm.SearchResults = findResult.Results;
            // Bind the results to a DataGrid control on the page
            // MyDataGrid.ItemsSource = findResult.Results;
        }
Пример #7
0
        private async void Button_Click(object sender, RoutedEventArgs e)
        {

            var url = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer";
            var findTask = new FindTask(new Uri(url));

            var findParameters = new FindParameters();
            findParameters.LayerIDs.Add(0); // Cities
            findParameters.LayerIDs.Add(3); // Counties
            findParameters.LayerIDs.Add(2); // States
            
            findParameters.SearchFields.Add("name");
            findParameters.SearchFields.Add("areaname");
            findParameters.SearchFields.Add("state_name");

            findParameters.ReturnGeometry = true;
            findParameters.SpatialReference = MyMapView.SpatialReference;

            findParameters.SearchText = SearchTextBox.Text;
            findParameters.Contains = true; 

            FindResult findResult = await 
                     findTask.ExecuteAsync(findParameters);

            var foundCities = 0;
            var foundCounties = 0;
            var foundStates = 0;

            // Loop thru results; count the matches found in each layer
            foreach (FindItem findItem in findResult.Results)
            {
                switch (findItem.LayerID)
                {
                    case 0: // Cities
                        foundCities++;
                        break;
                    case 3: // Counties
                        foundCounties++;
                        break;
                    case 2: // States
                        foundStates++;
                        break;
                }
            }

            // Report the number of matches for each layer
            var msg = string.Format("Found {0} cities, {1} counties, and {2} states containing '" + SearchTextBox.Text +
                               "' in a Name attribute", foundCities, foundCounties, 
                     foundStates);
            MessageBox.Show(msg);


            // Bind the results to a DataGrid control on the page
            MyDataGrid.ItemsSource = findResult.Results;    
        }
Пример #8
0
        protected Dictionary <string, object> CreateMethodParametersFromFindParameters()
        {
            Dictionary <string, object> methodParameters = new Dictionary <string, object>();
            IOrderedDictionary          values           = FindParameters.GetValues(HttpContext.Current, Source);

            for (int i = 0; i < FindParameters.Count; i++)
            {
                Parameter parameter = FindParameters[i];

                methodParameters[parameter.Name] = values[i];
            }

            return(methodParameters);
        }
Пример #9
0
 static void Main(string[] args)
 {
     PrintArgs(args);
     if (args.Length < 1)
     {
         PrintUsage();
         Environment.Exit(0);
     }
     try
     {
         new Finder(FindParameters.Parse(args)).Find();
     }
     catch (FindException e)
     {
         PrintError(e);
     }
 }
Пример #10
0
        public Task <FindResult> DoFind(string serviceId, Geometry geometry, string fields, string value)
        {
            LayerObject lo = null;

            foreach (var t in ConfigUtil.DynamicLayer)
            {
                if (serviceId != t.Id)
                {
                    continue;
                }
                lo = t;
            }
            if (lo == null)
            {
                return(null);
            }
            var findTask = new FindTask(lo.Uri);

            if (lo.Token != null)
            {
                findTask.Token = lo.Token;
            }

            //初始化FindParameters参数
            FindParameters findParameters = new FindParameters();

            string[] Layers = lo.Layers.Split('、');
            if (Layers != null && Layers.Length > 0)
            {
                foreach (var item in Layers)
                {
                    var layerId = lo.GetLayerId(item);
                    if (layerId != null)
                    {
                        findParameters.LayerIDs.Add(Convert.ToInt16(layerId)); //查找的图层
                    }
                }
            }
            findParameters.SearchFields.Add(fields); //查找的字段范围
            findParameters.ReturnGeometry = true;
            findParameters.Contains       = false;
            findParameters.SearchText     = value; //查找的“属性值”

            //异步执行
            return(findTask.ExecuteAsync(findParameters));
        }
Пример #11
0
        // Find map service items with entered information in given fields
        private async void FindButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                progress.Visibility     = Visibility.Visible;
                resultsGrid.Visibility  = Visibility.Collapsed;
                resultsGrid.ItemsSource = null;
                _graphicsOverlay.Graphics.Clear();

                FindTask findTask = new FindTask(
                    new Uri("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer"));

                var param = new FindParameters()
                {
                    LayerIDs = new List <int> {
                        0, 1, 2
                    },
                    SearchFields = new List <string> {
                        "CITY_NAME", "NAME", "SYSTEM", "STATE_ABBR", "STATE_NAME"
                    },
                    ReturnGeometry   = true,
                    SpatialReference = MyMapView.SpatialReference,
                    SearchText       = txtFind.Text
                };

                var findResults = await findTask.ExecuteAsync(param);

                if (findResults != null && findResults.Results.Count > 0)
                {
                    resultsGrid.ItemsSource = findResults.Results;
                    resultsGrid.Visibility  = Visibility.Visible;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Find Sample");
            }
            finally
            {
                progress.Visibility = Visibility.Collapsed;
            }
        }
        // Find map service items with entered information in given fields
        private async void FindButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                progress.Visibility = Visibility.Visible;
                resultsGrid.Visibility = Visibility.Collapsed;
                resultsGrid.ItemsSource = null;
                _graphicsLayer.Graphics.Clear();

                FindTask findTask = new FindTask(
                    new Uri("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer"));

                var param = new FindParameters()
                {
                    LayerIDs = new int[] { 0, 1, 2 },
                    SearchFields = new string[] { "CITY_NAME", "NAME", "SYSTEM", "STATE_ABBR", "STATE_NAME" },
                    ReturnGeometry = true,
                    SpatialReference = mapView.SpatialReference,
                    SearchText = txtFind.Text
                };

                var findResults = await findTask.ExecuteAsync(param);
                if (findResults != null && findResults.Results.Count > 0)
                {
                    resultsGrid.ItemsSource = findResults.Results;
                    resultsGrid.Visibility = Visibility.Visible;
                }
            }
            catch (Exception ex)
            {
                var _ = new MessageDialog(ex.Message, "Sample Error").ShowAsync();
            }
            finally
            {
                progress.Visibility = Visibility.Collapsed;
            }
        }
Пример #13
0
            public async void Search(int wkid)
            {

                var findTask = new FindTask(new System.Uri(this.USAUri));

                var findParameters = new FindParameters();
                findParameters.LayerIDs.Add(0); // Cities
                findParameters.LayerIDs.Add(3); // Counties
                findParameters.LayerIDs.Add(2); // States

                findParameters.SearchFields.Add("name");
                findParameters.SearchFields.Add("areaname");
                findParameters.SearchFields.Add("state_name");

                findParameters.ReturnGeometry = true;

                SpatialReference sr = new SpatialReference(wkid);
                findParameters.SpatialReference = sr;


                findParameters.SearchText = this.SearchText;
                findParameters.Contains = true;

                FindResult findResult = await
                         findTask.ExecuteAsync(findParameters);

                var foundCities = 0;
                var foundCounties = 0;
                var foundStates = 0;

                // Loop thru results; count the matches found in each layer
                foreach (FindItem findItem in findResult.Results)
                {
                    switch (findItem.LayerID)
                    {
                        case 0: // Cities
                            foundCities++;
                            break;
                        case 3: // Counties
                            foundCounties++;
                            break;
                        case 2: // States
                            foundStates++;
                            break;
                    }
                }

                // Report the number of matches for each layer
                var msg = string.Format("Found {0} cities, {1} counties, and {2} states containing '" + this.SearchText +
                                   "' in a Name attribute", foundCities, foundCounties,
                         foundStates);

                // Bind the results to a DataGrid control on the page
                IReadOnlyList<FindItem> temp = findResult.Results;

                ObservableCollection<FindItem> obsCollection = new ObservableCollection<FindItem>();
                foreach (FindItem item in temp)
                {
                    obsCollection.Add(item);
                }

                this.GridDataResults = obsCollection;

                // show message
                Messenger.Default.Send<NotificationMessage>(new NotificationMessage(msg));
            }
Пример #14
0
        public async void Search(int wkid)
        {
            var findTask = new FindTask(new System.Uri(this.USAUri));

            var findParameters = new FindParameters();

            findParameters.LayerIDs.Add(0); // Cities
            findParameters.LayerIDs.Add(3); // Counties
            findParameters.LayerIDs.Add(2); // States

            findParameters.SearchFields.Add("name");
            findParameters.SearchFields.Add("areaname");
            findParameters.SearchFields.Add("state_name");

            findParameters.ReturnGeometry = true;

            SpatialReference sr = new SpatialReference(wkid);

            findParameters.SpatialReference = sr;


            findParameters.SearchText = this.SearchText;
            findParameters.Contains   = true;

            FindResult findResult = await
                                    findTask.ExecuteAsync(findParameters);

            var foundCities   = 0;
            var foundCounties = 0;
            var foundStates   = 0;

            // Loop thru results; count the matches found in each layer
            foreach (FindItem findItem in findResult.Results)
            {
                switch (findItem.LayerID)
                {
                case 0:     // Cities
                    foundCities++;
                    break;

                case 3:     // Counties
                    foundCounties++;
                    break;

                case 2:     // States
                    foundStates++;
                    break;
                }
            }

            // Report the number of matches for each layer
            var msg = string.Format("Found {0} cities, {1} counties, and {2} states containing '" + this.SearchText +
                                    "' in a Name attribute", foundCities, foundCounties,
                                    foundStates);

            // Bind the results to a DataGrid control on the page
            IReadOnlyList <FindItem> temp = findResult.Results;

            ObservableCollection <FindItem> obsCollection = new ObservableCollection <FindItem>();

            foreach (FindItem item in temp)
            {
                obsCollection.Add(item);
            }

            this.GridDataResults = obsCollection;

            // show message
            Messenger.Default.Send <NotificationMessage>(new NotificationMessage(msg));
        }
Пример #15
0
 public Finder(FindParameters parameters)
 {
     _parameters = parameters;
     _regex      = new Regex(_parameters.Pattern);
 }
Пример #16
0
        public async void Search(int wkid)
        {
            var url      = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer";
            var findTask = new FindTask(new System.Uri(url));

            var findParameters = new FindParameters();

            findParameters.LayerIDs.Add(0); // Cities
            findParameters.LayerIDs.Add(3); // Counties
            findParameters.LayerIDs.Add(2); // States

            findParameters.SearchFields.Add("name");
            findParameters.SearchFields.Add("areaname");
            findParameters.SearchFields.Add("state_name");

            findParameters.ReturnGeometry = true;

            SpatialReference sr = new SpatialReference(wkid);

            findParameters.SpatialReference = sr;


            findParameters.SearchText = this.SearchText;
            findParameters.Contains   = true;

            FindResult findResult = await
                                    findTask.ExecuteAsync(findParameters);

            var foundCities   = 0;
            var foundCounties = 0;
            var foundStates   = 0;

            // Loop thru results; count the matches found in each layer
            foreach (FindItem findItem in findResult.Results)
            {
                switch (findItem.LayerID)
                {
                case 0:     // Cities
                    foundCities++;
                    break;

                case 3:     // Counties
                    foundCounties++;
                    break;

                case 2:     // States
                    foundStates++;
                    break;
                }
            }

            // Report the number of matches for each layer
            var msg = string.Format("Found {0} cities, {1} counties, and {2} states containing '" + this.SearchText +
                                    "' in a Name attribute", foundCities, foundCounties,
                                    foundStates);

            // Bind the results to a DataGrid control on the page
            IReadOnlyList <FindItem> temp = findResult.Results;

            ObservableCollection <FindItem> obsCollection = new ObservableCollection <FindItem>();

            foreach (FindItem item in temp)
            {
                obsCollection.Add(item);
            }

            this.GridDataResults = obsCollection;

            System.Diagnostics.Debug.WriteLine(msg);
        }
Пример #17
0
        public async void Search(int wkid)
        {
            var url = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer";
            var findTask = new FindTask(new System.Uri(url));

            var findParameters = new FindParameters();
            findParameters.LayerIDs.Add(0); // Cities
            findParameters.LayerIDs.Add(3); // Counties
            findParameters.LayerIDs.Add(2); // States

            findParameters.SearchFields.Add("name");
            findParameters.SearchFields.Add("areaname");
            findParameters.SearchFields.Add("state_name");

            findParameters.ReturnGeometry = true;

            SpatialReference sr = new SpatialReference(wkid);
            findParameters.SpatialReference = sr;


            findParameters.SearchText = this.SearchText;
            findParameters.Contains = true;

            FindResult findResult = await
                     findTask.ExecuteAsync(findParameters);

            var foundCities = 0;
            var foundCounties = 0;
            var foundStates = 0;

            // Loop thru results; count the matches found in each layer
            foreach (FindItem findItem in findResult.Results)
            {
                switch (findItem.LayerID)
                {
                    case 0: // Cities
                        foundCities++;
                        break;
                    case 3: // Counties
                        foundCounties++;
                        break;
                    case 2: // States
                        foundStates++;
                        break;
                }
            }

            // Report the number of matches for each layer
            var msg = string.Format("Found {0} cities, {1} counties, and {2} states containing '" + this.SearchText +
                               "' in a Name attribute", foundCities, foundCounties,
                     foundStates);

            // Bind the results to a DataGrid control on the page
            IReadOnlyList<FindItem> temp = findResult.Results;

            ObservableCollection<FindItem> obsCollection = new ObservableCollection<FindItem>();
            foreach (FindItem item in temp)
            {
                obsCollection.Add(item);
            }

            this.GridDataResults = obsCollection;

            System.Diagnostics.Debug.WriteLine(msg);
        }
Пример #18
0
 public FindRequest()
 {
     State = new FindParameters();
 }