using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Threading; using ESRI.ArcGIS.Client; using ESRI.ArcGIS.Client.Tasks; namespace ArcGISSilverlightSDK { public partial class ClipFeatures : UserControl { private DispatcherTimer _processingTimer; private Draw MyDrawObject; public ClipFeatures() { InitializeComponent(); _processingTimer = new System.Windows.Threading.DispatcherTimer(); _processingTimer.Interval = new TimeSpan(0, 0, 0, 0, 800); _processingTimer.Tick += ProcessingTimer_Tick; MyDrawObject = new Draw(MyMap) { DrawMode = DrawMode.Polyline, IsEnabled = true, LineSymbol = LayoutRoot.Resources["ClipLineSymbol"] as ESRI.ArcGIS.Client.Symbols.LineSymbol }; MyDrawObject.DrawComplete += MyDrawObject_DrawComplete; } private void MyDrawObject_DrawComplete(object sender, DrawEventArgs args) { MyDrawObject.IsEnabled = false; ProcessingTextBlock.Visibility = Visibility.Visible; _processingTimer.Start(); GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer; Graphic graphic = new Graphic() { Symbol = LayoutRoot.Resources["ClipLineSymbol"] as ESRI.ArcGIS.Client.Symbols.LineSymbol, Geometry = args.Geometry }; graphicsLayer.Graphics.Add(graphic); Geoprocessor geoprocessorTask = new Geoprocessor("http://serverapps.esri.com/ArcGIS/rest/services/" + "SamplesNET/USA_Data_ClipTools/GPServer/ClipCounties"); geoprocessorTask.UpdateDelay = 5000; geoprocessorTask.JobCompleted += GeoprocessorTask_JobCompleted; List<GPParameter> parameters = new List<GPParameter>(); parameters.Add(new GPFeatureRecordSetLayer("Input_Features", args.Geometry)); parameters.Add(new GPLinearUnit("Linear_unit", esriUnits.esriMiles, Int32.Parse(DistanceTextBox.Text))); geoprocessorTask.SubmitJobAsync(parameters); } private void GeoprocessorTask_JobCompleted(object sender, JobInfoEventArgs e) { Geoprocessor geoprocessorTask = sender as Geoprocessor; geoprocessorTask.GetResultDataCompleted += (s1, ev1) => { GraphicsLayer graphicsLayer = MyMap.Layers["MyResultGraphicsLayer"] as GraphicsLayer; //if (ev1.Parameter is GPFeatureRecordSetLayer) //{ // GPFeatureRecordSetLayer gpLayer = ev1.Parameter as GPFeatureRecordSetLayer; // if (gpLayer.FeatureSet.Features.Count == 0) // { // geoprocessorTask.GetResultImageLayerCompleted += (s2, ev2) => // { // GPResultImageLayer gpImageLayer = ev2.GPResultImageLayer; // gpImageLayer.Opacity = 0.5; // MyMap.Layers.Add(gpImageLayer); // ProcessingTextBlock.Text = "Greater than 500 features returned. Results drawn using map service."; // _processingTimer.Stop(); // }; // geoprocessorTask.GetResultImageLayerAsync(e.JobInfo.JobId, "Clipped_Counties"); // return; // } // foreach (Graphic graphic in gpLayer.FeatureSet.Features) // { // graphic.Symbol = LayoutRoot.Resources["ClipFeaturesFillSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol; // graphicsLayer.Graphics.Add(graphic); // } //} if (ev1.Parameter is GPDataFile) { GPDataFile gpdata = ev1.Parameter as GPDataFile; Uri uri = new Uri(gpdata.Url); System.Windows.Browser.HtmlPage.Window.Navigate(uri); } ProcessingTextBlock.Visibility = Visibility.Collapsed; _processingTimer.Stop(); }; //geoprocessorTask.GetResultDataAsync(e.JobInfo.JobId, "Clipped_Counties"); geoprocessorTask.GetResultDataAsync(e.JobInfo.JobId, "output_zip"); } private void GeoprocessorTask_Failed(object sender, TaskFailedEventArgs e) { MessageBox.Show("Geoprocessor service failed: " + e.Error); } private void ClearButton_Click(object sender, RoutedEventArgs e) { List<Layer> gpResultImageLayers = new List<Layer>(); foreach (Layer layer in MyMap.Layers) if (layer is GraphicsLayer) (layer as GraphicsLayer).ClearGraphics(); else if (layer is GPResultImageLayer) gpResultImageLayers.Add(layer); for (int i = 0; i < gpResultImageLayers.Count; i++) MyMap.Layers.Remove(gpResultImageLayers); MyDrawObject.IsEnabled = true; ProcessingTextBlock.Text = ""; ProcessingTextBlock.Visibility = Visibility.Collapsed; } void ProcessingTimer_Tick(object sender, EventArgs e) { if (ProcessingTextBlock.Text.Length > 20 || !ProcessingTextBlock.Text.StartsWith("Processing")) ProcessingTextBlock.Text = "Processing."; else ProcessingTextBlock.Text = ProcessingTextBlock.Text + "."; } } }
<Grid HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="0,15,15,0" > <HyperlinkButton x:Name="button1" Visibility="Collapsed" Height="19" Width="auto" Foreground="Black" /> </Grid>
if (ev1.Parameter is GPDataFile) { GPDataFile gpdata = ev1.Parameter as GPDataFile; Uri uri = new Uri(gpdata.Url); button1.NavigateUri = uri; button1.Content = uri; button1.Visibility = System.Windows.Visibility.Visible; //System.Windows.Browser.HtmlPage.Window.Navigate(uri); }
using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Threading; using ESRI.ArcGIS.Client; using ESRI.ArcGIS.Client.Tasks; namespace ArcGISSilverlightSDK { public partial class ClipFeatures : UserControl { private DispatcherTimer _processingTimer; private Draw MyDrawObject; public ClipFeatures() { InitializeComponent(); _processingTimer = new System.Windows.Threading.DispatcherTimer(); _processingTimer.Interval = new TimeSpan(0, 0, 0, 0, 800); _processingTimer.Tick += ProcessingTimer_Tick; MyDrawObject = new Draw(MyMap) { DrawMode = DrawMode.Polyline, IsEnabled = true, LineSymbol = LayoutRoot.Resources["ClipLineSymbol"] as ESRI.ArcGIS.Client.Symbols.LineSymbol }; MyDrawObject.DrawComplete += MyDrawObject_DrawComplete; } private void MyDrawObject_DrawComplete(object sender, DrawEventArgs args) { MyDrawObject.IsEnabled = false; ProcessingTextBlock.Visibility = Visibility.Visible; _processingTimer.Start(); GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer; Graphic graphic = new Graphic() { Symbol = LayoutRoot.Resources["ClipLineSymbol"] as ESRI.ArcGIS.Client.Symbols.LineSymbol, Geometry = args.Geometry }; graphicsLayer.Graphics.Add(graphic); Geoprocessor geoprocessorTask = new Geoprocessor("http://serverapps.esri.com/ArcGIS/rest/services/" + "SamplesNET/USA_Data_ClipTools/GPServer/ClipCounties"); geoprocessorTask.UpdateDelay = 5000; geoprocessorTask.JobCompleted += GeoprocessorTask_JobCompleted; List<GPParameter> parameters = new List<GPParameter>(); parameters.Add(new GPFeatureRecordSetLayer("Input_Features", args.Geometry)); parameters.Add(new GPLinearUnit("Linear_unit", esriUnits.esriMiles, Int32.Parse(DistanceTextBox.Text))); geoprocessorTask.SubmitJobAsync(parameters); } private void GeoprocessorTask_JobCompleted(object sender, JobInfoEventArgs e) { Geoprocessor geoprocessorTask = sender as Geoprocessor; geoprocessorTask.GetResultDataCompleted += (s1, ev1) => { GraphicsLayer graphicsLayer = MyMap.Layers["MyResultGraphicsLayer"] as GraphicsLayer; if (ev1.Parameter is GPFeatureRecordSetLayer) { GPFeatureRecordSetLayer gpLayer = ev1.Parameter as GPFeatureRecordSetLayer; if (gpLayer.FeatureSet.Features.Count == 0) { geoprocessorTask.GetResultImageLayerCompleted += (s2, ev2) => { GPResultImageLayer gpImageLayer = ev2.GPResultImageLayer; gpImageLayer.Opacity = 0.5; MyMap.Layers.Add(gpImageLayer); ProcessingTextBlock.Text = "Greater than 500 features returned. Results drawn using map service."; _processingTimer.Stop(); }; geoprocessorTask.GetResultImageLayerAsync(e.JobInfo.JobId, "Clipped_Counties"); return; } foreach (Graphic graphic in gpLayer.FeatureSet.Features) { graphic.Symbol = LayoutRoot.Resources["ClipFeaturesFillSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol; graphicsLayer.Graphics.Add(graphic); } } if (ev1.Parameter is GPDataFile) { GPDataFile gpdata = ev1.Parameter as GPDataFile; Uri uri = new Uri(gpdata.Url); button1.NavigateUri = uri; button1.Content = uri; button1.Visibility = System.Windows.Visibility.Visible; //System.Windows.Browser.HtmlPage.Window.Navigate(uri); geoprocessorTask.GetResultDataAsync(e.JobInfo.JobId, "Clipped_Counties"); } ProcessingTextBlock.Visibility = Visibility.Collapsed; _processingTimer.Stop(); }; //geoprocessorTask.GetResultDataAsync(e.JobInfo.JobId, "Clipped_Counties"); geoprocessorTask.GetResultDataAsync(e.JobInfo.JobId, "output_zip"); } private void GeoprocessorTask_Failed(object sender, TaskFailedEventArgs e) { MessageBox.Show("Geoprocessor service failed: " + e.Error); } private void ClearButton_Click(object sender, RoutedEventArgs e) { List<Layer> gpResultImageLayers = new List<Layer>(); foreach (Layer layer in MyMap.Layers) if (layer is GraphicsLayer) (layer as GraphicsLayer).ClearGraphics(); else if (layer is GPResultImageLayer) gpResultImageLayers.Add(layer); for (int i = 0; i < gpResultImageLayers.Count; i++) MyMap.Layers.Remove(gpResultImageLayers); MyDrawObject.IsEnabled = true; ProcessingTextBlock.Text = ""; ProcessingTextBlock.Visibility = Visibility.Collapsed; } void ProcessingTimer_Tick(object sender, EventArgs e) { if (ProcessingTextBlock.Text.Length > 20 || !ProcessingTextBlock.Text.StartsWith("Processing")) ProcessingTextBlock.Text = "Processing."; else ProcessingTextBlock.Text = ProcessingTextBlock.Text + "."; } } }
<UserControl x:Class="GeoProcessTest.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:esri="http://schemas.esri.com/arcgis/client/2009"> <Grid x:Name="LayoutRoot" Background="White"> <Grid.Resources> <esri:SimpleLineSymbol x:Key="ClipLineSymbol" Color="Red" Width="2" /> <esri:SimpleFillSymbol x:Key="ClipFeaturesFillSymbol" Fill="#770000FF" BorderBrush="#FF0000FF" BorderThickness="1" /> </Grid.Resources> <esri:Map x:Name="MyMap" Background="White" > <esri:ArcGISDynamicMapServiceLayer ID="StreetMapLayer" Url="http://GISserver/ArcGIS/rest/services/GeoProcessTestSilver/MapServer"/> <esri:GraphicsLayer ID="MyResultGraphicsLayer" > <esri:GraphicsLayer.MapTip> <Grid Background="LightYellow"> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Text="Ownership: " FontWeight="Bold" /> <TextBlock Text="{Binding [APN]}" /> </StackPanel> <Border BorderBrush="Black" BorderThickness="1" /> </Grid> </esri:GraphicsLayer.MapTip> </esri:GraphicsLayer> <esri:GraphicsLayer ID="MyGraphicsLayer" /> </esri:Map> <Grid HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,15,15,0" > <Rectangle Fill="#77919191" Stroke="Gray" RadiusX="10" RadiusY="10" Margin="0,0,0,5" > <Rectangle.Effect> <DropShadowEffect/> </Rectangle.Effect> </Rectangle> <Rectangle Fill="#FFFFFFFF" Stroke="DarkGray" RadiusX="5" RadiusY="5" Margin="10" /> <StackPanel Orientation="Vertical" Margin="10" HorizontalAlignment="Left" > <TextBlock Text="Clip polygon features - Public Lands" HorizontalAlignment="Center" FontWeight="Bold" Margin="5"/> <TextBlock x:Name="InformationTextBlock" Text="Draw a line on the map over the Dido. When finished the line will be buffered and the buffer will be used to clip US county polygons. Results are returned as a GP map image." Width="200" TextAlignment="Left" TextWrapping="Wrap" /> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5"> <TextBlock Text="Distance (in miles): " VerticalAlignment="Center" /> <TextBox x:Name="DistanceTextBox" Text="1" Width="35" TextAlignment="Right" Margin="0,0,5,0" /> <!--TextBox x:Name="TitleTextBox" Text="HTML TITLE" Width="75" TextAlignment="Right" Margin="0,0,5,0" /--> <Button x:Name="ClearButton" Content="Clear Results" Click="ClearButton_Click" /> </StackPanel> <TextBlock x:Name="ProcessingTextBlock" MaxWidth="150" Margin="5,5,5,5" Visibility="Collapsed" HorizontalAlignment="Center" Text="Processing." TextWrapping="Wrap" /> </StackPanel> </Grid> </Grid> </UserControl>
using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Threading; using ESRI.ArcGIS.Client; using ESRI.ArcGIS.Client.Tasks; namespace GeoProcessTest { public partial class MainPage : UserControl { private DispatcherTimer _processingTimer; private Draw MyDrawObject; public MainPage() { InitializeComponent(); _processingTimer = new System.Windows.Threading.DispatcherTimer(); _processingTimer.Interval = new TimeSpan(0, 0, 0, 0, 800); _processingTimer.Tick += ProcessingTimer_Tick; MyDrawObject = new Draw(MyMap) { DrawMode = DrawMode.Polyline, IsEnabled = true, LineSymbol = LayoutRoot.Resources["ClipLineSymbol"] as ESRI.ArcGIS.Client.Symbols.LineSymbol }; MyDrawObject.DrawComplete += MyDrawObject_DrawComplete; } private void MyDrawObject_DrawComplete(object sender, DrawEventArgs args) { MyDrawObject.IsEnabled = false; ProcessingTextBlock.Visibility = Visibility.Visible; _processingTimer.Start(); GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer; Graphic graphic = new Graphic() { Symbol = LayoutRoot.Resources["ClipLineSymbol"] as ESRI.ArcGIS.Client.Symbols.LineSymbol, Geometry = args.Geometry }; graphicsLayer.Graphics.Add(graphic); Geoprocessor geoprocessorTask = new Geoprocessor("http://GISserver/ArcGIS/rest/services/GeoProcessTest/GPServer/Model"); geoprocessorTask.UpdateDelay = 5000; geoprocessorTask.JobCompleted += GeoprocessorTask_JobCompleted; List<GPParameter> parameters = new List<GPParameter>(); parameters.Add(new GPLinearUnit("Enter_Buffer_Distance", esriUnits.esriFeet, Int32.Parse(DistanceTextBox.Text))); parameters.Add(new GPFeatureRecordSetLayer("Draw_a_line_or_multiple_lines_to_select_parcels_", args.Geometry)); geoprocessorTask.SubmitJobAsync(parameters); } private void GeoprocessorTask_JobCompleted(object sender, JobInfoEventArgs e) { Geoprocessor geoprocessorTask = sender as Geoprocessor; geoprocessorTask.GetResultDataCompleted += (s1, ev1) => { GraphicsLayer graphicsLayer = MyMap.Layers["MyResultGraphicsLayer"] as GraphicsLayer; if (ev1.Parameter is GPFeatureRecordSetLayer) { GPFeatureRecordSetLayer gpLayer = ev1.Parameter as GPFeatureRecordSetLayer; if (gpLayer.FeatureSet.Features.Count == 0) { geoprocessorTask.GetResultImageLayerCompleted += (s2, ev2) => { GPResultImageLayer gpImageLayer = ev2.GPResultImageLayer; gpImageLayer.Opacity = 0.5; MyMap.Layers.Add(gpImageLayer); ProcessingTextBlock.Text = "Greater than 500 features returned. Results drawn using map service."; _processingTimer.Stop(); }; geoprocessorTask.GetResultImageLayerAsync(e.JobInfo.JobId, "BufferedParcels"); return; } foreach (Graphic graphic in gpLayer.FeatureSet.Features) { graphic.Symbol = LayoutRoot.Resources["ClipFeaturesFillSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol; graphicsLayer.Graphics.Add(graphic); } } ProcessingTextBlock.Visibility = Visibility.Collapsed; _processingTimer.Stop(); }; geoprocessorTask.GetResultDataAsync(e.JobInfo.JobId, "BufferedParcels"); } private void GeoprocessorTask_Failed(object sender, TaskFailedEventArgs e) { MessageBox.Show("Geoprocessor service failed: " + e.Error); } private void ClearButton_Click(object sender, RoutedEventArgs e) { List<Layer> gpResultImageLayers = new List<Layer>(); foreach (Layer layer in MyMap.Layers) if (layer is GraphicsLayer) (layer as GraphicsLayer).ClearGraphics(); else if (layer is GPResultImageLayer) gpResultImageLayers.Add(layer); for (int i = 0; i < gpResultImageLayers.Count; i++) MyMap.Layers.Remove(gpResultImageLayers); MyDrawObject.IsEnabled = true; ProcessingTextBlock.Text = ""; ProcessingTextBlock.Visibility = Visibility.Collapsed; } void ProcessingTimer_Tick(object sender, EventArgs e) { if (ProcessingTextBlock.Text.Length > 20 || !ProcessingTextBlock.Text.StartsWith("Processing")) ProcessingTextBlock.Text = "Processing."; else ProcessingTextBlock.Text = ProcessingTextBlock.Text + "."; } } }