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 + ".";
}
}
}