private void MyMap_MouseClick(object sender, ESRI.ArcGIS.Client.Map.MouseEventArgs e) { if (BufferPointSelect.IsExpanded == true) { _geometryService = new GeometryService("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"); _geometryService.BufferCompleted += GeometryService_BufferCompleted; _geometryService.Failed += GeometryService_Failed; _queryTask = new QueryTask((Layers.SelectedItem as FeatureLayer).Url); // _queryTask = new QueryTask("http://servername/ArcGIS/rest/services/MS4/MapServer/4"); _queryTask.ExecuteCompleted += BuffPointQueryTask_ExecuteCompleted; _queryTask.Failed += BuffPointQueryTask_Failed; _pointAndBufferGraphicsLayer = Map.Layers["MyGraphicsLayer"] as GraphicsLayer; GraphicsLayer graphicsLayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; _geometryService.CancelAsync(); _queryTask.CancelAsync(); Graphic clickGraphic = new Graphic(); clickGraphic.Symbol = LayoutRoot.Resources["DefaultMarkerSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol; clickGraphic.Geometry = e.MapPoint; // Input spatial reference for buffer operation defined by first feature of input geometry array clickGraphic.Geometry.SpatialReference = Map.SpatialReference; _pointAndBufferGraphicsLayer.ClearGraphics(); graphicsLayer.ClearGraphics(); clickGraphic.SetZIndex(2); _pointAndBufferGraphicsLayer.Graphics.Add(clickGraphic); // If buffer spatial reference is GCS and unit is linear, geometry service will do geodesic buffering ESRI.ArcGIS.Client.Tasks.BufferParameters bufferParams = new ESRI.ArcGIS.Client.Tasks.BufferParameters() { BufferSpatialReference = new SpatialReference(4326), OutSpatialReference = Map.SpatialReference, Unit = LinearUnit.Meter, }; bufferParams.Distances.Add(100); bufferParams.Features.Add(clickGraphic); _geometryService.BufferAsync(bufferParams); } } void GeometryService_BufferCompleted(object sender, GraphicsEventArgs args) { Graphic bufferGraphic = new Graphic(); bufferGraphic.Geometry = args.Results[0].Geometry; bufferGraphic.Symbol = LayoutRoot.Resources["BufferSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol; bufferGraphic.SetZIndex(1); _pointAndBufferGraphicsLayer.Graphics.Add(bufferGraphic); ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query(); query.ReturnGeometry = true; query.OutSpatialReference = Map.SpatialReference; query.Geometry = bufferGraphic.Geometry; query.OutFields.Add("*"); _queryTask.ExecuteAsync(query); } private void BuffPointQueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features retured from query"); return; } GraphicsLayer graphicsLayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; if (featureSet != null && featureSet.Features.Count > 0) { foreach (Graphic feature in featureSet.Features) { switch (featureSet.GeometryType.ToString()) { case "Polygon": feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as FillSymbol; break; case "Polyline": feature.Symbol = LayoutRoot.Resources["CustomGrowLineSymbol"] as LineSymbol; break; case "Point": feature.Symbol = LayoutRoot.Resources["ResultsMarkerSymbol"] as SimpleMarkerSymbol; break; } graphicsLayer.Graphics.Insert(0, feature); } ResultsDisplay.IsExpanded = true; } MyDrawSurface.IsEnabled = false; } private void GeometryService_Failed(object sender, TaskFailedEventArgs args) { MessageBox.Show("Geometry service failed: " + args.Error); } private void BuffPointQueryTask_Failed(object sender, TaskFailedEventArgs args) { MessageBox.Show("Query failed: " + args.Error); }
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.