/Report7.0.6/EpiDashboard/MapControl.xaml.cs
C# | 292 lines | 251 code | 37 blank | 4 comment | 27 complexity | a38f1b30e06688563a4510f04295382c MD5 | raw file
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Linq;
- using System.Net;
- using System.Runtime.Serialization;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using ESRI.ArcGIS.Client;
- using ESRI.ArcGIS.Client.Layers;
- using ESRI.ArcGIS.Client.Geometry;
- using ESRI.ArcGIS.Client.Symbols;
- using Epi;
- using Epi.Data;
-
- namespace EpiDashboard
- {
-
- public delegate void RecordSelectedHandler(int id);
-
- /// <summary>
- /// Interaction logic for MapControl.xaml
- /// </summary>
- public partial class MapControl : UserControl
- {
- public event RecordSelectedHandler RecordSelected;
- private BackgroundWorker worker;
- private Map myMap;
- private delegate void RenderMapDelegate(string url);
- private delegate void SimpleDelegate();
- private delegate void DebugDelegate(string debugMsg);
- private const string SatelliteViewURL = "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer";
- private const string StreetViewURL = "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer";
-
- public MapControl()
- {
- InitializeComponent();
- worker = new System.ComponentModel.BackgroundWorker();
- worker.DoWork += new DoWorkEventHandler(worker_DoWork);
- worker.RunWorkerAsync();
- }
-
- void worker_DoWork(object sender, DoWorkEventArgs e)
- {
- if (InternetAvailable())
- {
- this.Dispatcher.BeginInvoke(new SimpleDelegate(PrepareToLoad));
- System.Threading.Thread.Sleep(6000);
- this.Dispatcher.BeginInvoke(new SimpleDelegate(RenderMap));
- }
- }
-
- private void PrepareToLoad()
- {
- txtInternet.Visibility = Visibility.Collapsed;
- txtLoading.Visibility = Visibility.Visible;
- waitCursor.Visibility = Visibility.Visible;
- }
-
- private void RenderMap()
- {
- txtLoading.Visibility = Visibility.Collapsed;
- waitCursor.Visibility = Visibility.Collapsed;
- LayerTypeSelector.Visibility = Visibility.Visible;
-
- ArcGISTiledMapServiceLayer layer = new ArcGISTiledMapServiceLayer()
- {
- Url = SatelliteViewURL
- };
-
- myMap = new Map()
- {
- Background = Brushes.White,
- Extent = new Envelope(-154.16, 82.44, -17.05, -50)
- };
- myMap.Layers.Add(layer);
- myMap.MouseMove += new MouseEventHandler(myMap_MouseMove);
- MapContainer.Children.Add(myMap);
- }
- public void UnSubscribe()
- {
- if(myMap != null)
- {
- myMap.MouseMove -= new MouseEventHandler(myMap_MouseMove);
- }
- this.myMap = null;
- this.worker = null;
- }
- private void RadioButton_Click(object sender, RoutedEventArgs e)
- {
- if (myMap != null)
- {
- if (myMap.Layers.Count > 0)
- {
- if (ImageryRadioButton.IsChecked.Value)
- {
- ((ArcGISTiledMapServiceLayer)myMap.Layers[0]).Url = SatelliteViewURL;
- }
- else
- {
- ((ArcGISTiledMapServiceLayer)myMap.Layers[0]).Url = StreetViewURL;
- }
- }
- }
- }
-
- private Symbol YellowMarkerSymbol
- {
- get
- {
- SimpleMarkerSymbol symbol = new SimpleMarkerSymbol();
- symbol.Color = Brushes.Yellow;
- symbol.Size = 15;
- symbol.Style = SimpleMarkerSymbol.SimpleMarkerStyle.Circle;
- return symbol;
- }
- }
-
- public void RenderClusterMap(View view, IDbDriver db, string latVar, string longVar)
- {
- CustomCoordinateList coordinateList = GetCoordinates(view, db, latVar, longVar);
- GraphicsLayer graphicsLayer = new GraphicsLayer();
- for (int i = 0; i < coordinateList.Coordinates.Count; i++)
- {
- ExtendedGraphic graphic = new ExtendedGraphic()
- {
- Geometry = new MapPoint(coordinateList.Coordinates[i].X, coordinateList.Coordinates[i].Y),
- RecordId = coordinateList.Coordinates[i].RecordId,
- Symbol = YellowMarkerSymbol
- };
- graphic.MouseLeftButtonUp += new MouseButtonEventHandler(graphic_MouseLeftButtonUp);
- graphicsLayer.Graphics.Add(graphic);
- }
- FlareClusterer clusterer = new FlareClusterer()
- {
- FlareBackground = Brushes.Yellow,
- FlareForeground = new SolidColorBrush(Color.FromArgb(0x99, 0, 0, 0)),
- MaximumFlareCount = 10,
- Radius = 15,
- Gradient = ClustererGradient
- };
- graphicsLayer.Clusterer = clusterer;
-
- myMap.Layers.Add(graphicsLayer);
- object objMinX = db.ExecuteScalar(db.CreateQuery("SELECT MIN(" + longVar + ") FROM " + view.TableName));
- object objMinY = db.ExecuteScalar(db.CreateQuery("SELECT MIN(" + latVar + ") FROM " + view.TableName));
- object objMaxX = db.ExecuteScalar(db.CreateQuery("SELECT MAX(" + longVar + ") FROM " + view.TableName));
- object objMaxY = db.ExecuteScalar(db.CreateQuery("SELECT MAX(" + latVar + ") FROM " + view.TableName));
- if (objMaxX != DBNull.Value && objMaxY != DBNull.Value && objMinX != DBNull.Value && objMinY != DBNull.Value)
- {
- double minX = double.Parse(objMinX.ToString());
- double minY = double.Parse(objMinY.ToString());
- double maxX = double.Parse(objMaxX.ToString());
- double maxY = double.Parse(objMaxY.ToString());
- myMap.Extent = new Envelope(minX - 0.01, minY - 0.01, maxX + 0.01, maxY + 0.01);
- }
- }
-
- private CustomCoordinateList GetCoordinates(View view, IDbDriver db, string latVar, string longVar)
- {
- DataTable data = db.Select(db.CreateQuery("SELECT UniqueKey, " + latVar + ", " + longVar + " FROM " + view.TableName));
- CustomCoordinateList coordinateList = new CustomCoordinateList();
- foreach (DataRow row in data.Rows)
- {
- if (row[latVar] != DBNull.Value && row[longVar] != DBNull.Value)
- {
- double latitude = double.Parse(row[latVar].ToString());
- double longitude = double.Parse(row[longVar].ToString());
- if (latitude <= 180 && latitude >= -180 && longitude <= 90 && longitude >= -90)
- coordinateList.Coordinates.Add(new CustomCoordinate((int)row["UniqueKey"], latitude, longitude));
- }
- }
- return coordinateList;
- }
-
- void graphic_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
- {
- int recordId = ((ExtendedGraphic)sender).RecordId;
- if (RecordSelected != null)
- {
- RecordSelected(recordId);
- }
- }
-
- void myMap_MouseMove(object sender, MouseEventArgs e)
- {
- Map myMap = (Map)e.Source;
- if (!myMap.IsFocused)
- myMap.Focus();
- }
-
- private LinearGradientBrush ClustererGradient
- {
- get
- {
- LinearGradientBrush brush = new LinearGradientBrush();
- brush.MappingMode = BrushMappingMode.RelativeToBoundingBox;
- brush.GradientStops.Add(new GradientStop(Color.FromArgb(0x99, 0xFF, 0x11, 0), 0));
- brush.GradientStops.Add(new GradientStop(Color.FromArgb(0x99, 0xFF, 0x55, 0), 0.25));
- brush.GradientStops.Add(new GradientStop(Color.FromArgb(0x99, 0xFF, 0x99, 0), 0.5));
- brush.GradientStops.Add(new GradientStop(Color.FromArgb(0x99, 0xFF, 0xCC, 0), 0.75));
- brush.GradientStops.Add(new GradientStop(Color.FromArgb(0x99, 0xFF, 0xFF, 0), 1));
- return brush;
- }
- }
-
- private bool InternetAvailable()
- {
- bool retval = false;
- try
- {
- HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
- HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
- retval = true;
- //this.Dispatcher.Invoke(new DebugDelegate(ShowDebugMessage), retval);
- }
- catch (Exception ex)
- {
-
- }
- return retval;
- }
-
- private void ShowDebugMessage(string debugMsg)
- {
- MessageBox.Show(debugMsg);
- }
-
- private void ColorBlendCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
-
- }
-
- private void ClassCountCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
-
- }
-
- private void LoadShapeButton_Click(object sender, RoutedEventArgs e)
- {
-
- }
-
- private void LoadDataButton_Click(object sender, RoutedEventArgs e)
- {
-
- }
-
- void Triangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
- {
-
- }
-
- }
-
- public class CustomCoordinateList
- {
- public List<CustomCoordinate> Coordinates = new List<CustomCoordinate>();
- }
-
- public class CustomCoordinate
- {
- public CustomCoordinate() { }
-
- public CustomCoordinate(int recordId, double y, double x)
- {
- this.RecordId = recordId;
- this.X = x;
- this.Y = y;
- }
-
- public int RecordId { get; set; }
-
- public double X { get; set; }
-
- public double Y { get; set; }
- }
-
- public class ExtendedGraphic : Graphic
- {
- public int RecordId { get; set; }
- }
- }