using System;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
using ThinkGeo.MapSuite.SilverlightCore;
using ThinkGeo.MapSuite.SilverlightEdition;
namespace CSharp_Silverlight_HowDoISamples.Samples
{
public partial class ServiceAreaDefinition : UserControl
{
private SimpleMarkerOverlay markerOverlay;
private InMemoryFeatureLayer routeLayer;
private PointShape sourcePoint;
public ServiceAreaDefinition()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(ServiceAreaDefinition_Loaded);
}
void ServiceAreaDefinition_Loaded(object sender, RoutedEventArgs e)
{
Map1.MapUnit = GeographyUnit.DecimalDegree;
WorldMapKitWmsSilverlightOverlay baseOverlay = new WorldMapKitWmsSilverlightOverlay();
Map1.Overlays.Add(baseOverlay);
markerOverlay = new SimpleMarkerOverlay();
Map1.Overlays.Add("SimpleMarkerOverlay", markerOverlay);
// Add the start and end flag
RenderCenterMarker(txtSourceFeatureId.Text);
routeLayer = new InMemoryFeatureLayer();
routeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush = new GeoSolidBrush(GeoColor.FromArgb(100, GeoColor.StandardColors.Blue));
routeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.OuterPen.Color = GeoColor.StandardColors.Red;
routeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay routeOverlay = new LayerOverlay();
routeOverlay.Layers.Add("routeLayer", routeLayer);
Map1.Overlays.Add("RouteOverlay", routeOverlay);
Map1.CurrentExtent = new RectangleShape(-97.7589906891967, 30.291409034941, -97.6954759797241, 30.2460904314254);
}
private void GetServiceArea_Click(object sender, RoutedEventArgs e)
{
GeoDataService.GeoDataGettingClient client = new CSharp_Silverlight_HowDoISamples.GeoDataService.GeoDataGettingClient();
client.GetServiceAreaCompleted += new EventHandler(client_GetServiceAreaCompleted);
int drivingMinutes = int.Parse(txtTime.Text);
string point = String.Format("{0},{1}", sourcePoint.X.ToString(CultureInfo.InvariantCulture), sourcePoint.Y.ToString(CultureInfo.InvariantCulture));
string speedUnit = ((System.Windows.Controls.ContentControl)(cmbSpeedUnit.SelectedItem)).Content.ToString();
client.GetServiceAreaAsync(point, new TimeSpan(0, drivingMinutes, 0), float.Parse(txtSpeed.Text), speedUnit);
}
void client_GetServiceAreaCompleted(object sender, CSharp_Silverlight_HowDoISamples.GeoDataService.GetServiceAreaCompletedEventArgs e)
{
if (e.Error == null)
{
string wkt = e.Result;
PolygonShape route = BaseShape.CreateShapeFromWellKnownData(wkt) as PolygonShape;
routeLayer.InternalFeatures.Clear();
routeLayer.InternalFeatures.Add(new Feature(route));
Map1.CurrentExtent = route.GetBoundingBox();
Map1.Refresh();
}
}
internal void RenderCenterMarker(string featureId)
{
GeoDataService.GeoDataGettingClient client = new CSharp_Silverlight_HowDoISamples.GeoDataService.GeoDataGettingClient();
client.GetPointShapeByIdCompleted += new EventHandler(client_GetStartPointShapeByIdCompleted);
client.GetPointShapeByIdAsync(featureId);
}
void client_GetStartPointShapeByIdCompleted(object sender, CSharp_Silverlight_HowDoISamples.GeoDataService.GetPointShapeByIdCompletedEventArgs e)
{
if (e.Error == null)
{
string[] positions = e.Result.Split(',');
sourcePoint = new PointShape(double.Parse(positions[0], CultureInfo.InvariantCulture), double.Parse(positions[1], CultureInfo.InvariantCulture));
Marker marker = new Marker(sourcePoint);
marker.ImageSource = new BitmapImage(new Uri("/theme/Star.png", UriKind.RelativeOrAbsolute)); ;
markerOverlay.Markers.Add(marker);
GetServiceArea_Click(null, null);
Map1.Refresh();
}
}
}
}