User Tools

Site Tools


source_code_serviceedition_projecttemplates_siteselection_cs.zip

Source Code ServiceEdition ProjectTemplates SiteSelection CS.zip

MainForm.cs

 using System;  
 using System.Collections.Generic;  
 using System.Collections.ObjectModel;  
 using System.Configuration;  
 using System.Drawing;  
 using System.Drawing.Drawing2D;  
 using System.Globalization;  
 using System.Linq;  
 using System.Windows.Forms;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.SiteSelection.Properties;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     public partial class MainForm : Form  
     {  
         private static readonly PointShape thinkGeoLocation = new PointShape(-10776838.0796536, 3912346.50475619);  
 
         private bool isLoad;  
         private Bitmap bitmap;  
         private MapModel mapModel;  
         private LayerSwitcher switcher;  
         private AreaCreateMode createAreasMode;  
         private Collection<QueryResultItem> queryResult;  
 
         public MainForm()  
         {  
             InitializeComponent();  
             InitializeBackground();  
         }  
 
         private void MainForm_Load(object sender, EventArgs e)  
         {  
             InitializeMapModel();  
             InitializeLayerSwitcher();  
 
             mapPicture.MouseMove += Map_MouseMove;  
             bitmap = new Bitmap(mapPicture.Width, mapPicture.Height);  
             foreach (var name in mapModel.GetCandidatePoiLayers().Select(l => l.Name))  
             {  
                 CandidatePoiLayersComboBox.Items.Add(name);  
             }  
             CandidatePoiLayersComboBox.SelectedIndex = 2;  
 
             RouteRadioButton.Checked = true;  
             PanRadioButton.Checked = true;  
             DistanceUnitComboBox.SelectedIndex = 1;  
             DistanceValueTextBox.Text = "2";  
             isLoad = true;  
 
             UpdateQueryResult();  
         }  
 
         private void CandidatePoiLayersComboBox_SelectedIndexChanged(object sender, EventArgs e)  
         {  
             mapModel.QueryingFeatureLayer = mapModel.GetPoiFeatureLayerByName(CandidatePoiLayersComboBox.SelectedItem.ToString());  
             UpdatePioTypeCandidates();  
         }  
 
         private void CandidatePoiTypeComboBox_SelectedIndexChanged(object sender, EventArgs e)  
         {  
             UpdateQueryResult();  
         }  
 
         private void DistanceUnitComboBox_SelectedIndexChanged(object sender, EventArgs e)  
         {  
             UpdateUnitSystem(DistanceUnitComboBox.SelectedIndex == 1 ? UnitSystem.NauticalMile : UnitSystem.Metric);  
         }  
 
         private void AreaTypeRadioButton_CheckedChanged(object sender, EventArgs e)  
         {  
             BufferPanel.Visible = false;  
             RoutePanel.Visible = false;  
 
             // Switch area create mode.  
             RadioButton radioButton = sender as RadioButton;  
             if (radioButton != null && radioButton.Checked)  
             {  
                 if (radioButton == RouteRadioButton)  
                 {  
                     createAreasMode = AreaCreateMode.Route;  
                     RouteRadioButton.Location = new Point(5, 12);  
                     BufferRadioButton.Location = new Point(5, 80);  
 
                     RoutePanel.Location = new Point(21, 42);  
                     RoutePanel.Visible = true;  
                 }  
                 else  
                 {  
                     createAreasMode = AreaCreateMode.Buffer;  
                     RouteRadioButton.Location = new Point(5, 12);  
                     BufferRadioButton.Location = new Point(5, 46);  
 
                     BufferPanel.Location = new Point(21, BufferRadioButton.Location.Y + BufferRadioButton.Height + 5);  
                     BufferPanel.Visible = true;  
                 }  
             }  
         }  
 
         private void ControlMapMode_CheckedChanged(object sender, EventArgs e)  
         {  
             mapModel.TrackMode = DrawPointRadioButton.Checked ? TrackMode.Point : TrackMode.None;  
 
             RadioButton radioButton = (RadioButton)sender;  
             radioButton.FlatAppearance.BorderColor = radioButton.Checked ? Color.FromArgb(136, 136, 136) : Color.White;  
         }  
 
         private void LeftSideBarPanel_PanelCollapseButtonClick(object sender, EventArgs e)  
         {  
             mapPicture.Width = Width - leftSideBarPanel.Width - 15;  
             mapPicture.Left = leftSideBarPanel.Width;  
             RefreshMap();  
         }  
 
         private void DistanceValueTextBox_KeyPress(object sender, KeyPressEventArgs e)  
         {  
             // Accept input number and dot only. Otherwise, handle it.  
             int kc = e.KeyChar;  
             if ((kc < 48 || kc > 57) && kc != 8)  
             {  
                 e.Handled = true;  
             }  
         }  
 
         private void DistanceValueTextBox_TextChanged(object sender, EventArgs e)  
         {  
             double value;  
             bool isValueDouble = double.TryParse(DistanceValueTextBox.Text, out value);  
 
             if (isValueDouble && value < 1)  
             {  
                 DistanceValueTextBox.Text = value.ToString(CultureInfo.InvariantCulture);  
             }  
         }  
 
         private void RouteTimeTextBox_KeyPress(object sender, KeyPressEventArgs e)  
         {  
             int kc = e.KeyChar;  
 
             // If input "DEL", and the new value is not a number, handle it.  
             if (kc == 46)  
             {  
                 if (DistanceValueTextBox.Text.Length <= 0)  
                 {  
                     e.Handled = true;  
                 }  
                 else  
                 {  
                     double value;  
                     double oldValue;  
                     bool isOldValueDouble = double.TryParse(DistanceValueTextBox.Text, out oldValue);  
                     bool isNewValueDouble = double.TryParse(DistanceValueTextBox.Text + e.KeyChar, out value);  
                     if (!isNewValueDouble)  
                     {  
                         e.Handled = isOldValueDouble;  
                     }  
                 }  
             }  
             else if ((kc < 48 || kc > 57) && kc != 8)  
             {  
                 e.Handled = true;  
             }  
         }  
 
         private void QueryResultItems_CellClick(object sender, DataGridViewCellEventArgs e)  
         {  
             if (e.ColumnIndex == 0)  
             {  
                 // Zoom to specific feature.  
                 DataGridViewCell cell = QueryResultItemsDataGridView.Rows[e.RowIndex].Cells["cluLocation"];  
                 if (cell.Value != null)  
                 {  
                     PointShape pointShape = new PointShape(cell.Value.ToString());  
                     mapModel.MapEngine.CurrentExtent = pointShape.Buffer(200, GeographyUnit.Meter, DistanceUnit.Meter).GetBoundingBox();  
                     RefreshMap();  
                 }  
             }  
         }  
 
         private void QueryResultItems_CellMouseEnter(object sender, DataGridViewCellEventArgs e)  
         {  
             // Highlight cell when mouse enter.  
             if (e.ColumnIndex == 0 && e.RowIndex >= 0)  
             {  
                 DataGridViewCell cell = QueryResultItemsDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex];  
                 if (cell.Value != null)  
                 {  
                     cell.Style.BackColor = Color.LightBlue;  
                 }  
             }  
         }  
 
         private void QueryResultItems_CellMouseLeave(object sender, DataGridViewCellEventArgs e)  
         {  
             // Restore the background when mouse leave the cell.  
             if (e.ColumnIndex == 0 && e.RowIndex >= 0)  
             {  
                 DataGridViewCell cell = QueryResultItemsDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex];  
                 if (cell.Value != null)  
                 {  
                     cell.Style.BackColor = Color.White;  
                 }  
             }  
         }  
 
         private void ApplyButton_Click(object sender, EventArgs e)  
         {  
             UpdateQueryResult();  
         }  
 
         private void ClearRadioButton_Click(object sender, EventArgs e)  
         {  
             rbtnClear.Checked = false;  
             PanRadioButton.Checked = true;  
             QueryResultItemsDataGridView.Visible = false;  
 
             mapModel.ServiceAreaLayer.InternalFeatures.Clear();  
             mapModel.TrackLayer.InternalFeatures.Clear();  
             mapModel.AddMarkersByFeatures(null);  
             RefreshMap();  
         }  
 
         private void ToggleLayerSwitcherPictureBox_Click(object sender, EventArgs e)  
         {  
             PictureBox tempPictureBox = (PictureBox)sender;  
             tempPictureBox.Cursor = Cursors.Hand;  
             if (switcher != null)  
             {  
                 if (switcher.Visible)  
                 {  
                     switcher.Visible = false;  
                     tempPictureBox.Image = Resources.switcher_maxmize;  
                 }  
                 else  
                 {  
                     switcher.Visible = true;  
                     tempPictureBox.Image = Resources.switcher_minimize;  
                 }  
             }  
         }  
 
         private void Map_MouseMove(object sender, MouseEventArgs e)  
         {  
             PointShape mouseLocation = ExtentHelper.ToWorldCoordinate(mapModel.CurrentExtent, new ScreenPointF(e.X, e.Y), mapPicture.Width, mapPicture.Height);  
             FooterLocationXLabel.Text = string.Format(CultureInfo.InvariantCulture, "X:{0:0.##}", mouseLocation.X);  
             FooterLocationYLabel.Text = string.Format(CultureInfo.InvariantCulture, "Y:{0:0.##}", mouseLocation.Y);  
         }  
 
         private static void LayerSwitcher_LayerChanging(object sender, LayerChangingLayerSwitcherEventArgs e)  
         {  
             BingMapsLayer bingMapsLayer = e.Layer as BingMapsLayer;  
             if (bingMapsLayer != null)  
             {  
                 string applicationId = MapSuiteSampleHelper.GetBingMapsApplicationId();  
                 if (!string.IsNullOrEmpty(applicationId)) bingMapsLayer.ApplicationId = applicationId;  
                 else e.Cancel = true;  
             }  
         }  
 
         private void LayerSwitcher_LayerChanged(object sender, LayerChangedLayerSwitcherEventArgs e)  
         {  
             RefreshMap();  
         }  
 
         private void MapControl_Click(object sender, MouseEventArgs e)  
         {  
             if (mapModel.TrackMode == TrackMode.Point)  
             {  
                 PointShape mouseLocation = ExtentHelper.ToWorldCoordinate(mapModel.MapEngine.CurrentExtent, new ScreenPointF(e.X, e.Y), mapPicture.Width, mapPicture.Height);  
                 mapModel.TrackLayer.InternalFeatures.Clear();  
                 mapModel.TrackLayer.InternalFeatures.Add(new Feature(mouseLocation));  
 
                 BaseShape tempRestrictionShape = mapModel.GetRestrictionShape();  
                 if (mapModel.QueryingFeatureLayer != null && tempRestrictionShape != null && mouseLocation.IsWithin(tempRestrictionShape))  
                 {  
                     mapModel.PlottedPoint = mouseLocation;  
                     UpdateQueryResult();  
                 }  
                 else  
                 {  
                     MessageBox.Show(Resources.SearchOutOfBoundaryMessage, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information);  
                 }  
 
                 RefreshMap();  
             }  
         }  
 
         private void ToolBar_ButtonClick(object sender, ToolBarButtonClickEventArgs e)  
         {  
             switch (e.Button.Tag.ToString())  
             {  
                 case "Zoom In":  
                     mapModel.CurrentExtent.ScaleDown(50);  
                     break;  
                 case "Zoom Out":  
                     mapModel.CurrentExtent.ScaleUp(50);  
                     break;  
                 case "Full Extent":  
                     mapModel.CurrentExtent = ExtentHelper.GetDrawingExtent(MapModel.DefaultExtent, bitmap.Width, bitmap.Height);  
                     break;  
                 case "Pan Left":  
                     mapModel.CurrentExtent = ExtentHelper.Pan(mapModel.CurrentExtent, PanDirection.Left, 20);  
                     break;  
                 case "Pan Right":  
                     mapModel.CurrentExtent = ExtentHelper.Pan(mapModel.CurrentExtent, PanDirection.Right, 20);  
                     break;  
                 case "Pan Up":  
                     mapModel.CurrentExtent = ExtentHelper.Pan(mapModel.CurrentExtent, PanDirection.Up, 20);  
                     break;  
                 case "Pan Down":  
                     mapModel.CurrentExtent = ExtentHelper.Pan(mapModel.CurrentExtent, PanDirection.Down, 20);  
                     break;  
             }  
 
             RefreshMap();  
         }  
 
         private void InitializeMapModel()  
         {  
             queryResult = new Collection<QueryResultItem>();  
             mapModel = new MapModel();  
             mapModel.MapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(new RectangleShape(-10782584.5066971, 3916291.54400321, -10769504.2529497, 3907774.56943023), mapPicture.Width, mapPicture.Height);  
             mapModel.TrackLayer.InternalFeatures.Add(new Feature(thinkGeoLocation));  
             mapModel.PlottedPoint = thinkGeoLocation;  
             mapModel.PlottedPointChanged += (s, e) => UpdateQueryResult(e.PlottedPoint);  
         }  
 
         private void InitializeLayerSwitcher()  
         {  
             switcher = new LayerSwitcher(mapModel);  
             switcher.Anchor = AnchorStyles.Right | AnchorStyles.Top;  
             switcher.Location = new Point(Width - 208, 85);  
             switcher.Size = new Size(185, 90);  
             switcher.LayerChanging += LayerSwitcher_LayerChanging;  
             switcher.LayerChanged += LayerSwitcher_LayerChanged;  
             Controls.Add(switcher);  
             switcher.BringToFront();  
 
             PictureBox overlaySwitcherButton = new PictureBox();  
             overlaySwitcherButton.Anchor = AnchorStyles.Right | AnchorStyles.Top;  
             overlaySwitcherButton.Image = Resources.switcher_minimize;  
             overlaySwitcherButton.SizeMode = PictureBoxSizeMode.AutoSize;  
             overlaySwitcherButton.Location = new Point(switcher.Location.X + switcher.Width - overlaySwitcherButton.Width - 8, switcher.Location.Y + 5);  
             overlaySwitcherButton.Click += ToggleLayerSwitcherPictureBox_Click;  
             Controls.Add(overlaySwitcherButton);  
             overlaySwitcherButton.BringToFront();  
             switcher.Refresh();  
         }  
 
         private void InitializeBackground()  
         {  
             BuildingTypePanel.RedrawBackground(g =>  
             {  
                 Rectangle rect = new Rectangle(0, 0, BuildingTypePanel.Width - 1, BuildingTypePanel.Height - 1);  
                 GraphicsPath path = MapSuiteSampleHelper.CreateRoundPath(rect, 10);  
                 g.DrawPath(new Pen(Color.FromArgb(255, 200, 200, 200), 1), path);  
             });  
 
             ControlModePanel.RedrawBackground(g =>  
             {  
                 Rectangle rect = new Rectangle(0, 0, ControlModePanel.Width - 1, ControlModePanel.Height - 1);  
                 GraphicsPath path = MapSuiteSampleHelper.CreateRoundPath(rect, 10);  
                 g.DrawPath(new Pen(Color.FromArgb(255, 200, 200, 200), 1), path);  
             });  
 
             AreaTypePanel.RedrawBackground(g =>  
             {  
                 Rectangle rect = new Rectangle(0, 0, AreaTypePanel.Width - 1, AreaTypePanel.Height - 1);  
                 GraphicsPath path = MapSuiteSampleHelper.CreateRoundPath(rect, 10);  
                 g.DrawPath(new Pen(Color.FromArgb(255, 200, 200, 200), 1), path);  
             });  
         }  
 
         private void UpdatePioTypeCandidates()  
         {  
             CandidatePoiTypesComboBox.Items.Clear();  
             CandidatePoiTypesComboBox.Items.Add(Resources.FindAllText);  
             foreach (var candidateColumnValue in mapModel.GetColumnValueCandidates())  
             {  
                 CandidatePoiTypesComboBox.Items.Add(candidateColumnValue);  
             }  
 
             CandidatePoiTypesComboBox.SelectedIndex = 0;  
         }  
 
         private void UpdateQueryResultDataGrid(IEnumerable<Feature> queryResults)  
         {  
             QueryResultItemsDataGridView.Visible = true;  
             QueryResultItemsDataGridView.Rows.Clear();  
             foreach (QueryResultItem item in queryResults.Select(f => new QueryResultItem(f)))  
             {  
                 DataGridViewRow newRow = new DataGridViewRow();  
                 newRow.Cells.Add(item.ImageButtonCell);  
                 newRow.Cells.Add(item.TextCell);  
                 newRow.Cells.Add(item.LocationCell);  
                 QueryResultItemsDataGridView.Rows.Add(newRow);  
             }  
         }  
 
         private void UpdateQueryResult(PointShape plottedPoint)  
         {  
             mapModel.PlottedPoint = plottedPoint;  
             UpdateQueryResult();  
         }  
 
         // Query service area by the PlottedPoint.  
         // Update the UIs by the queried result.  
         private void UpdateQueryResult()  
         {  
             if (mapModel.PlottedPoint == null || !isLoad) return;  
 
             mapModel.ServiceAreaLayer.Open();  
             mapModel.QueryingFeatureLayer.Open();  
 
             Dictionary<string, object> parameters = GetServiceAreaAnalysisParameters();  
             ServiceAreaAnalysis serviceAreaAnalysis = MapSuiteSampleHelper.GetAreaAnalysis(createAreasMode);  
             Feature serviceAreaResult = serviceAreaAnalysis.CreateServiceAreaFeature(mapModel.PlottedPoint, mapModel.MapUnit, parameters);  
 
             mapModel.ServiceAreaLayer.Clear();  
             mapModel.ServiceAreaLayer.InternalFeatures.Add(serviceAreaResult);  
 
             if (mapModel.ServiceAreaLayer.InternalFeatures.Count > 0)  
             {  
                 queryResult.Clear();  
                 Collection<Feature> queriedFeatures = GetQueryResultFeatures();  
                 UpdateQueryResultDataGrid(queriedFeatures);  
 
                 mapModel.AddMarkersByFeatures(queriedFeatures);  
                 mapModel.CurrentExtent = mapModel.ServiceAreaLayer.GetBoundingBox();  
                 RefreshMap();  
             }  
         }  
 
         private Collection<Feature> GetQueryResultFeatures()  
         {  
             Collection<Feature> queryResultFeatures = new Collection<Feature>();  
             if (mapModel.ServiceAreaLayer.InternalFeatures.Count == 0) return queryResultFeatures;  
 
             // Get the predefined service area.  
             BaseShape serviceAreaShape = mapModel.ServiceAreaLayer.InternalFeatures[0].GetShape();  
 
             // Query the features by the service area.  
             Collection<Feature> selectedFeatures = mapModel.QueryingFeatureLayer.QueryTools.GetFeaturesWithin(serviceAreaShape, ReturningColumnsType.AllColumns);  
 
             if (CandidatePoiTypesComboBox.SelectedItem.ToString().Equals(Resources.FindAllText, StringComparison.OrdinalIgnoreCase))  
             {  
                 foreach (Feature feature in selectedFeatures)  
                 {  
                     queryResultFeatures.Add(feature);  
                 }  
             }  
             else if (mapModel.QueryingFeatureLayer != mapModel.HotelsLayer)  
             {  
                 string columnName = MapSuiteSampleHelper.GetDefaultColumnNameByPoiType(mapModel.QueryingFeatureLayer.Name);  
                 foreach (Feature feature in selectedFeatures)  
                 {  
                     if (feature.ColumnValues[columnName] == CandidatePoiTypesComboBox.SelectedItem.ToString()  
                         || string.IsNullOrEmpty(feature.ColumnValues[columnName]))  
                     {  
                         queryResultFeatures.Add(feature);  
                     }  
                 }  
             }  
             else  
             {  
                 IEnumerable<Feature> filteredHotelItems = GetFiltedHotelFeatures(selectedFeatures);  
                 foreach (var feature in filteredHotelItems)  
                 {  
                     queryResultFeatures.Add(feature);  
                 }  
             }  
 
             return queryResultFeatures;  
         }  
 
         private IEnumerable<Feature> GetFiltedHotelFeatures(IEnumerable<Feature> hotelFeatures)  
         {  
             Collection<Feature> filteredHotelFeatures = new Collection<Feature>();  
             string property = ((string)CandidatePoiTypesComboBox.SelectedItem).Trim();  
             string[] values = property.Split('~');  
 
             double min;  
             double max;  
             double.TryParse(values[0], out min);  
             double.TryParse(values[1], out max);  
 
             foreach (Feature feature in hotelFeatures)  
             {  
                 double columnValue;  
                 if (double.TryParse(feature.ColumnValues["ROOMS"], out columnValue) && columnValue >= min && columnValue < max)  
                 {  
                     filteredHotelFeatures.Add(feature);  
                 }  
                 else if (string.IsNullOrEmpty(feature.ColumnValues["ROOMS"]))  
                 {  
                     filteredHotelFeatures.Add(feature);  
                 }  
             }  
 
             return filteredHotelFeatures;  
         }  
 
         private Dictionary<string, object> GetServiceAreaAnalysisParameters()  
         {  
             Dictionary<string, object> parameters = new Dictionary<string, object>();  
             switch (createAreasMode)  
             {  
                 case AreaCreateMode.Buffer:  
                     parameters[Resources.DistanceUnitKey] = DistanceUnitComboBox.SelectedIndex == 1 ? DistanceUnit.Mile : DistanceUnit.Kilometer;  
 
                     double distance;  
                     if (double.TryParse(DistanceValueTextBox.Text, out distance))  
                     {  
                         parameters[Resources.DistanceKey] = distance;  
                     }  
                     break;  
 
                 case AreaCreateMode.Route:  
                     parameters[Resources.StreetShapePathFilenameKey] =  
                         ConfigurationManager.AppSettings["StreetShapeFilePathName"];  
 
                     int driveTimeInMinutes;  
                     if (int.TryParse(txtRouteTime.Text, out driveTimeInMinutes))  
                     {  
                         parameters[Resources.DriveTimeInMinutesKey] = driveTimeInMinutes;  
                     }  
                     break;  
             }  
             return parameters;  
         }  
 
         private void RefreshMap()  
         {  
             if (mapModel.MapEngine.StaticLayers.Count > 0 && mapPicture.Width > 0)  
             {  
                 mapModel.MapEngine.OpenAllLayers();  
 
                 bitmap = new Bitmap(mapPicture.Width, mapPicture.Height);  
                 mapPicture.CreateGraphics().CompositingMode = CompositingMode.SourceCopy;  
 
                 mapModel.MapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(mapModel.MapEngine.CurrentExtent, mapPicture.Width, mapPicture.Height);  
                 mapModel.MapEngine.DrawStaticLayers(bitmap, mapModel.MapUnit);  
                 mapModel.MapEngine.DrawDynamicLayers(bitmap, mapModel.MapUnit);  
                 mapModel.MapEngine.DrawAdornmentLayers(bitmap, mapModel.MapUnit);  
                 mapModel.MapEngine.CloseAllLayers();  
 
                 UpdateImageSource();  
                 mapPicture.Refresh();  
             }  
         }  
 
         private void UpdateImageSource()  
         {  
             Image oldImage = mapPicture.Image;  
             mapPicture.Image = bitmap;  
             if (oldImage != null) oldImage.Dispose();  
         }  
 
         private void UpdateUnitSystem(UnitSystem unitSystem)  
         {  
             ScaleBarAdornmentLayer adornmentLayer = mapModel.MapEngine.AdornmentLayers[Resources.ScaleBarLayerKey] as ScaleBarAdornmentLayer;  
             if (adornmentLayer != null)  
             {  
                 adornmentLayer.UnitFamily = unitSystem;  
                 RefreshMap();  
             }  
         }  
     }  
 }  
 

ServiceAreaAnalysis.cs

 using System.Collections.Generic;  
 using System.Collections.ObjectModel;  
 using ThinkGeo.MapSuite.Core;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     public abstract class ServiceAreaAnalysis  
     {  
         protected ServiceAreaAnalysis()  
         { }  
 
         public Feature CreateServiceAreaFeature(PointShape pointShape, GeographyUnit geographyUnit, IDictionary<string, object> parameters)  
         {  
             AreaBaseShape areaShape = CreateServiceArea(pointShape, geographyUnit, parameters);  
             return new Feature(areaShape);  
         }  
 
         public abstract AreaBaseShape CreateServiceArea(PointShape pointShape, GeographyUnit geographyUnit, IDictionary<string, object> parameters);  
     }  
 }  
 

RouteAccessibleAreaAnalysis.cs

 using System;  
 using System.Collections.Generic;  
 using System.IO;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.Routing;  
 using ThinkGeo.MapSuite.SiteSelection.Properties;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     public class RouteAccessibleAreaAnalysis : ServiceAreaAnalysis  
     {  
         public RouteAccessibleAreaAnalysis()  
         { }  
 
         public override AreaBaseShape CreateServiceArea(PointShape pointShape, GeographyUnit geographyUnit, IDictionary<string, object> parameters)  
         {  
             int drivingTimeInMinutes = 6;  
             string streetShapePathFilename = (string)parameters[Resources.StreetShapePathFilenameKey];  
             if (parameters.ContainsKey(Resources.DriveTimeInMinutesKey)) drivingTimeInMinutes = (int)parameters[Resources.DriveTimeInMinutesKey];  
 
             string rtgFilePathName = Path.ChangeExtension(streetShapePathFilename, ".rtg");  
             RtgRoutingSource routingSource = new RtgRoutingSource(rtgFilePathName);  
             FeatureSource featureSource = new ShapeFileFeatureSource(streetShapePathFilename);  
             RoutingEngine routingEngine = new RoutingEngine(routingSource, featureSource);  
 
             featureSource.Open();  
             ManagedProj4Projection projection = new ManagedProj4Projection();  
             projection.InternalProjectionParametersString = ManagedProj4Projection.GetBingMapParametersString();  
             projection.ExternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(4326);  
 
             projection.Open();  
             pointShape = projection.ConvertToExternalProjection(pointShape) as PointShape;  
             Feature feature = featureSource.GetFeaturesNearestTo(pointShape, geographyUnit, 1, ReturningColumnsType.NoColumns)[0];  
             PolygonShape polygonShape = routingEngine.GenerateServiceArea(feature.Id, new TimeSpan(0, drivingTimeInMinutes, 0), 100, GeographyUnit.Feet);  
             polygonShape = (PolygonShape)projection.ConvertToInternalProjection(polygonShape);  
             projection.Close();  
 
             return polygonShape;  
         }  
     }  
 }  
 

BufferServiceAreaAnalysis.cs

 using System.Collections.Generic;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.SiteSelection.Properties;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     public class BufferServiceAreaAnalysis : ServiceAreaAnalysis  
     {  
         public BufferServiceAreaAnalysis()  
         { }  
 
         public override AreaBaseShape CreateServiceArea(PointShape pointShape, GeographyUnit geographyUnit, IDictionary<string, object> parameters)  
         {  
             double distance = 2;  
             DistanceUnit distanceUnit = DistanceUnit.Mile;  
 
             if (parameters.ContainsKey(Resources.DistanceUnitKey)) distanceUnit = (DistanceUnit)parameters[Resources.DistanceUnitKey];  
             if (parameters.ContainsKey(Resources.DistanceKey)) distance = (double)parameters[Resources.DistanceKey];  
             return pointShape.Buffer(distance, 40, geographyUnit, distanceUnit);  
         }  
     }  
 }  
 

AreaCreateMode.cs

 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     public enum AreaCreateMode  
     {  
         Buffer,  
         Route  
     }  
 }  
 
 

MapModel.cs

 using System;  
 using System.Collections.Generic;  
 using System.Collections.ObjectModel;  
 using System.Configuration;  
 using System.IO;  
 using System.Linq;  
 using System.Windows.Forms;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.SiteSelection.Properties;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     public class MapModel  
     {  
         public static RectangleShape DefaultExtent = new RectangleShape(-10782584.5066971, 3916291.54400321, -10769504.2529497, 3907774.56943023);  
 
         private TrackMode trackMode;  
         private GeographyUnit mapUnit;  
         private MapEngine mapEngine;  
         private PointShape plottedPoint;  
         private BaseShape restrictionShape;  
         private ShapeFileFeatureLayer currentQueryLayer;  
         private ObservableCollection<ShapeFileFeatureLayer> poiFeatureLayers;  
         private Collection<Layer> baseLayers;  
 
         public event EventHandler<PlottedPointChangedMapModelEventArgs> PlottedPointChanged;  
 
         public MapModel()  
         {  
             mapUnit = GeographyUnit.Meter;  
             trackMode = TrackMode.None;  
             baseLayers = new Collection<Layer>();  
             mapEngine = new MapEngine();  
             mapEngine.ShowLogo = false;  
             mapEngine.CurrentExtent = DefaultExtent;  
             InitializeLayers();  
         }  
 
         public TrackMode TrackMode  
         {  
             get { return trackMode; }  
             set { trackMode = value; }  
         }  
 
         public GeographyUnit MapUnit  
         {  
             get { return mapUnit; }  
             set { mapUnit = value; }  
         }  
 
         public MapEngine MapEngine  
         {  
             get { return mapEngine; }  
             set { mapEngine = value; }  
         }  
 
         public Collection<Layer> BaseLayers  
         {  
             get { return baseLayers; }  
         }  
 
         public PointShape PlottedPoint  
         {  
             get { return plottedPoint; }  
             set { plottedPoint = value; }  
         }  
 
         public RectangleShape CurrentExtent  
         {  
             get { return mapEngine.CurrentExtent; }  
             set { mapEngine.CurrentExtent = value; }  
         }  
 
         public ShapeFileFeatureLayer QueryingFeatureLayer  
         {  
             get { return currentQueryLayer; }  
             set { currentQueryLayer = value; }  
         }  
 
         public GeoCollection<Layer> StaticLayers  
         {  
             get { return mapEngine.StaticLayers; }  
         }  
 
         public ShapeFileFeatureLayer HotelsLayer  
         {  
             get { return (ShapeFileFeatureLayer)mapEngine.DynamicLayers[Resources.HotelsLayerKey]; }  
         }  
 
         public ShapeFileFeatureLayer MedicalFacilitesLayer  
         {  
             get { return (ShapeFileFeatureLayer)mapEngine.DynamicLayers[Resources.MedicalFacilitesLayerKey]; }  
         }  
 
         public ShapeFileFeatureLayer PublicFacilitesLayer  
         {  
             get { return (ShapeFileFeatureLayer)mapEngine.DynamicLayers[Resources.PublicFacilitesLayerKey]; }  
         }  
 
         public ShapeFileFeatureLayer RestaurantsLayer  
         {  
             get { return (ShapeFileFeatureLayer)mapEngine.DynamicLayers[Resources.RestaurantsLayerKey]; }  
         }  
 
         public ShapeFileFeatureLayer SchoolsLayer  
         {  
             get { return (ShapeFileFeatureLayer)mapEngine.DynamicLayers[Resources.SchoolsLayerKey]; }  
         }  
 
         public InMemoryFeatureLayer ServiceAreaLayer  
         {  
             get { return (InMemoryFeatureLayer)mapEngine.DynamicLayers[Resources.ServiceAreaLayerKey]; }  
         }  
 
         public InMemoryFeatureLayer TrackLayer  
         {  
             get { return (InMemoryFeatureLayer)mapEngine.DynamicLayers[Resources.TrackLayer]; }  
         }  
 
         public void AddMarkersByFeatures(IEnumerable<Feature> features)  
         {  
             InMemoryFeatureLayer markerLayer = (InMemoryFeatureLayer)mapEngine.DynamicLayers[Resources.MakerOverlayKey];  
             InMemoryFeatureLayer centerPointLayer = (InMemoryFeatureLayer)mapEngine.DynamicLayers[Resources.TrackLayer];  
 
             Style markerStyle = markerLayer.ZoomLevelSet.ZoomLevel01.CustomStyles[0];  
             markerLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear();  
             markerLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(markerStyle);  
             markerLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(QueryingFeatureLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle);  
 
             markerLayer.Open();  
             centerPointLayer.Open();  
 
             markerLayer.Clear();  
             centerPointLayer.Clear();  
 
             if (plottedPoint != null)  
             {  
                 centerPointLayer.InternalFeatures.Add(new Feature(plottedPoint));  
             }  
 
             if (features != null)  
             {  
                 foreach (Feature feature in features)  
                 {  
                     markerLayer.InternalFeatures.Add(feature);  
                 }  
             }  
         }  
 
         public ShapeFileFeatureLayer GetPoiFeatureLayerByName(string layerName)  
         {  
             return poiFeatureLayers.FirstOrDefault(l => l.Name.Equals(layerName, StringComparison.OrdinalIgnoreCase));  
         }  
 
         public ObservableCollection<ShapeFileFeatureLayer> GetCandidatePoiLayers()  
         {  
             return poiFeatureLayers ?? (poiFeatureLayers = new ObservableCollection<ShapeFileFeatureLayer>  
             {  
                 HotelsLayer,  
                 MedicalFacilitesLayer,  
                 RestaurantsLayer,  
                 SchoolsLayer  
             });  
         }  
 
         public Collection<string> GetColumnValueCandidates()  
         {  
             string columnName = MapSuiteSampleHelper.GetDefaultColumnNameByPoiType(QueryingFeatureLayer.Name);  
 
             Collection<string> columnValues = new Collection<string>();  
             if (columnName.Equals("Hotels", StringComparison.OrdinalIgnoreCase))  
             {  
                 columnValues.Add("1 ~ 50");  
                 columnValues.Add("50 ~ 100");  
                 columnValues.Add("100 ~ 150");  
                 columnValues.Add("150 ~ 200");  
                 columnValues.Add("200 ~ 300");  
                 columnValues.Add("300 ~ 400");  
                 columnValues.Add("400 ~ 500");  
                 columnValues.Add(">= 500");  
             }  
             else  
             {  
                 QueryingFeatureLayer.Open();  
                 IEnumerable<string> distinctColumnValues = QueryingFeatureLayer.FeatureSource.GetDistinctColumnValues(columnName).Select(v => v.ColumnValue);  
                 foreach (var distinctColumnValue in distinctColumnValues)  
                 {  
                     columnValues.Add(distinctColumnValue);  
                 }  
             }  
 
             return columnValues;  
         }  
 
         protected void OnPlottedPointChanged(PlottedPointChangedMapModelEventArgs e)  
         {  
             EventHandler<PlottedPointChangedMapModelEventArgs> handler = PlottedPointChanged;  
             if (handler != null)  
             {  
                 handler(this, e);  
             }  
         }  
 
         private void InitializeLayers()  
         {  
             // Initialize base layers.  
             string cacheFolder = Path.Combine(Path.GetTempPath(), "TileCache");  
             WorldMapKitLayer worldMapKitLayer = new WorldMapKitLayer();  
             worldMapKitLayer.Name = Resources.WorldMapKitOverlayName;  
             worldMapKitLayer.Projection = WorldMapKitProjection.SphericalMercator;  
             baseLayers.Add(worldMapKitLayer);  
             worldMapKitLayer.IsVisible = true;  
             worldMapKitLayer.TileCache = new FileBitmapTileCache(cacheFolder, Resources.WorldMapKitOverlayName);  
             mapEngine.StaticLayers.Add(Resources.WorldMapKitOverlayName, worldMapKitLayer);  
 
             OpenStreetMapLayer openStreetMapLayer = new OpenStreetMapLayer();  
             openStreetMapLayer.Name = Resources.OSMOverlayName;  
             baseLayers.Add(openStreetMapLayer);  
             openStreetMapLayer.IsVisible = false;  
             openStreetMapLayer.TileCache = new FileBitmapTileCache(cacheFolder, Resources.OSMOverlayName);  
 
             BingMapsLayer bingMapsAerialLayer = new BingMapsLayer();  
             bingMapsAerialLayer.Name = Resources.BingMapsAerialOverlayName;  
             bingMapsAerialLayer.MapType = BingMapsMapType.Aerial;  
             baseLayers.Add(bingMapsAerialLayer);  
             bingMapsAerialLayer.IsVisible = false;  
             bingMapsAerialLayer.TileCache = new FileBitmapTileCache(cacheFolder, Resources.BingMapsAerialOverlayName);  
 
             BingMapsLayer bingMapsRoadLayer = new BingMapsLayer();  
             bingMapsRoadLayer.Name = Resources.BingMapsRoadOverlayName;  
             bingMapsRoadLayer.MapType = BingMapsMapType.Road;  
             baseLayers.Add(bingMapsRoadLayer);  
             bingMapsRoadLayer.IsVisible = false;  
             bingMapsRoadLayer.TileCache = new FileBitmapTileCache(cacheFolder, Resources.BingMapsRoadOverlayName);  
 
             // Initialize feature layers  
             Proj4Projection proj4 = new Proj4Projection();  
             proj4.InternalProjectionParametersString = Proj4Projection.GetDecimalDegreesParametersString();  
             proj4.ExternalProjectionParametersString = Proj4Projection.GetSphericalMercatorParametersString();  
             proj4.Open();  
 
             ShapeFileFeatureLayer restrictedLayer = new ShapeFileFeatureLayer(ConfigurationManager.AppSettings["RestrictedShapeFilePathName"]);  
             AreaStyle extentStyle = new AreaStyle();  
             extentStyle.CustomAreaStyles.Add(new AreaStyle(new GeoSolidBrush(GeoColor.SimpleColors.Transparent)) { OutlinePen = new GeoPen(GeoColor.SimpleColors.White, 5.5f) });  
             extentStyle.CustomAreaStyles.Add(new AreaStyle(new GeoSolidBrush(GeoColor.SimpleColors.Transparent)) { OutlinePen = new GeoPen(GeoColor.SimpleColors.Red, 1.5f) { DashStyle = LineDashStyle.Dash } });  
             restrictedLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = extentStyle;  
             restrictedLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             restrictedLayer.FeatureSource.Projection = proj4;  
             mapEngine.DynamicLayers.Add(Resources.RestrictedLayerKey, restrictedLayer);  
 
             InMemoryFeatureLayer serviceAreaLayer = new InMemoryFeatureLayer();  
             serviceAreaLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(new GeoColor(120, GeoColor.FromHtml("#1749c9")), GeoColor.FromHtml("#fefec1"), 3, LineDashStyle.Solid);  
             serviceAreaLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.DynamicLayers.Add(Resources.ServiceAreaLayerKey, serviceAreaLayer);  
 
             InMemoryFeatureLayer trackFeatureLayer = new InMemoryFeatureLayer();  
             trackFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = new PointStyle(new GeoImage(@"..\..\Image\drawPoint.png"));  
             trackFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.DynamicLayers.Add(Resources.TrackLayer, trackFeatureLayer);  
 
             ShapeFileFeatureLayer hotelsLayer = new ShapeFileFeatureLayer(ConfigurationManager.AppSettings["HotelsShapeFilePathName"]);  
             hotelsLayer.Name = Resources.HotelsLayerKey;  
             hotelsLayer.Transparency = 100f;  
             hotelsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle = new PointStyle(new GeoImage(@"..\..\Image\Hotel.png"));  
             hotelsLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             hotelsLayer.FeatureSource.Projection = proj4;  
             mapEngine.DynamicLayers.Add(Resources.HotelsLayerKey, hotelsLayer);  
 
             ShapeFileFeatureLayer medicalFacilitesLayer = new ShapeFileFeatureLayer(ConfigurationManager.AppSettings["MedicalFacilitiesShapeFilePathName"]);  
             medicalFacilitesLayer.Name = Resources.MedicalFacilitesLayerKey;  
             medicalFacilitesLayer.Transparency = 100f;  
             medicalFacilitesLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle = new PointStyle(new GeoImage(@"..\..\Image\DrugStore.png"));  
             medicalFacilitesLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             medicalFacilitesLayer.FeatureSource.Projection = proj4;  
             mapEngine.DynamicLayers.Add(Resources.MedicalFacilitesLayerKey, medicalFacilitesLayer);  
 
             ShapeFileFeatureLayer publicFacilitesLayer = new ShapeFileFeatureLayer(ConfigurationManager.AppSettings["PublicFacilitiesShapeFilePathName"]);  
             publicFacilitesLayer.Name = Resources.PublicFacilitesLayerKey;  
             publicFacilitesLayer.Transparency = 100f;  
             publicFacilitesLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle = new PointStyle(new GeoImage(@"..\..\Image\public_facility.png"));  
             publicFacilitesLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             publicFacilitesLayer.FeatureSource.Projection = proj4;  
             mapEngine.DynamicLayers.Add(Resources.PublicFacilitesLayerKey, publicFacilitesLayer);  
 
             ShapeFileFeatureLayer restaurantsLayer = new ShapeFileFeatureLayer(ConfigurationManager.AppSettings["RestaurantsShapeFilePathName"]);  
             restaurantsLayer.Name = Resources.RestaurantsLayerKey;  
             restaurantsLayer.Transparency = 100f;  
             restaurantsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle = new PointStyle(new GeoImage(@"..\..\Image\restaurant.png"));  
             restaurantsLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             restaurantsLayer.FeatureSource.Projection = proj4;  
             mapEngine.DynamicLayers.Add(Resources.RestaurantsLayerKey, restaurantsLayer);  
 
             ShapeFileFeatureLayer schoolsLayer = new ShapeFileFeatureLayer(ConfigurationManager.AppSettings["SchoolsShapeFilePathName"]);  
             schoolsLayer.Name = Resources.SchoolsLayerKey;  
             schoolsLayer.Transparency = 100f;  
             schoolsLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle = new PointStyle(new GeoImage(@"..\..\Image\school.png"));  
             schoolsLayer.ZoomLevelSet.ZoomLevel10.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             schoolsLayer.FeatureSource.Projection = proj4;  
             mapEngine.DynamicLayers.Add(Resources.SchoolsLayerKey, schoolsLayer);  
 
             // Initialize marker layer.  
             InMemoryFeatureLayer markerLayer = new InMemoryFeatureLayer();  
             markerLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(new PointStyle(new GeoImage(@"..\..\Image\selectedHalo.png")));  
             markerLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.DynamicLayers.Add(Resources.MakerOverlayKey, markerLayer);  
 
             // Initialize adornments.  
             LegendAdornmentLayer legendlayer = new LegendAdornmentLayer();  
             legendlayer.Height = 135;  
             legendlayer.Location = AdornmentLocation.LowerRight;  
             mapEngine.AdornmentLayers.Add(legendlayer);  
 
             AddLegendItem(HotelsLayer, legendlayer);  
             AddLegendItem(MedicalFacilitesLayer, legendlayer);  
             AddLegendItem(PublicFacilitesLayer, legendlayer);  
             AddLegendItem(RestaurantsLayer, legendlayer);  
             AddLegendItem(SchoolsLayer, legendlayer);  
 
             ScaleBarAdornmentLayer scaleBar = new ScaleBarAdornmentLayer();  
             scaleBar.Location = AdornmentLocation.LowerLeft;  
             mapEngine.AdornmentLayers.Add(Resources.ScaleBarLayerKey, scaleBar);  
         }  
 
         public BaseShape GetRestrictionShape()  
         {  
             if (restrictionShape == null)  
             {  
                 ShapeFileFeatureLayer restictionLayer = (ShapeFileFeatureLayer)mapEngine.DynamicLayers[Resources.RestrictedLayerKey];  
 
                 restictionLayer.Open();  
                 Feature firstFeature = restictionLayer.QueryTools.GetFeatureById("1", ReturningColumnsType.NoColumns);  
                 restrictionShape = firstFeature.GetShape();  
             }  
 
             return restrictionShape;  
         }  
 
         private static void AddLegendItem(FeatureLayer featureLayer, LegendAdornmentLayer legendLayer)  
         {  
             LegendItem layerItem = new LegendItem();  
             layerItem.ImageStyle = featureLayer.ZoomLevelSet.ZoomLevel10.DefaultPointStyle;  
             layerItem.TextStyle = TextStyles.NoData1(featureLayer.Name);  
             legendLayer.LegendItems.Add(featureLayer.Name, layerItem);  
         }  
     }  
 }  
 

PlottedPointChangedMapModelEventArgs.cs

 using System;  
 using ThinkGeo.MapSuite.Core;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     [Serializable]  
     public class PlottedPointChangedMapModelEventArgs : EventArgs  
     {  
         private PointShape plottedPoint;  
 
         public PlottedPointChangedMapModelEventArgs()  
             : this(null)  
         { }  
 
         public PlottedPointChangedMapModelEventArgs(PointShape plottedPoint)  
         {  
             this.plottedPoint = plottedPoint;  
         }  
 
         public PointShape PlottedPoint  
         {  
             get { return plottedPoint; }  
         }  
     }  
 }  
 

QueryResultItem.cs

 using System;  
 using System.Drawing;  
 using System.Linq;  
 using System.Windows.Forms;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.SiteSelection.Properties;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     public class QueryResultItem  
     {  
         private string name;  
         private string location;  
         private Feature feature;  
         private DataGridViewTextBoxCell textCell;  
         private DataGridViewTextBoxCell locationCell;  
         private DataGridViewImageCell imageButtonCell;  
 
         public QueryResultItem()  
             : this(null)  
         { }  
 
         public QueryResultItem(Feature feature)  
             : base()  
         {  
             this.feature = feature;  
             this.name = feature.ColumnValues.FirstOrDefault(item => item.Key.Equals("NAME", StringComparison.InvariantCultureIgnoreCase)).Value;  
             this.location = feature.GetWellKnownText();  
         }  
 
         public Feature Feature  
         {  
             get { return feature; }  
         }  
 
         public DataGridViewImageCell ImageButtonCell  
         {  
             get  
             {  
                 if (imageButtonCell == null)  
                 {  
                     imageButtonCell = new DataGridViewImageCell();  
                     imageButtonCell.Style.SelectionBackColor = Color.Transparent;  
                     imageButtonCell.Value = Icon.FromHandle(Resources.find.GetHicon());  
                 }  
                 return imageButtonCell;  
             }  
         }  
 
         public DataGridViewTextBoxCell TextCell  
         {  
             get { return textCell ?? (textCell = new DataGridViewTextBoxCell { Value = name }); }  
         }  
 
         public DataGridViewTextBoxCell LocationCell  
         {  
             get { return locationCell ?? (locationCell = new DataGridViewTextBoxCell { Value = location }); }  
         }  
     }  
 }  
 
 

MapSuiteSampleHelper.cs

 using System;  
 using System.Configuration;  
 using System.Drawing;  
 using System.Drawing.Drawing2D;  
 using System.Globalization;  
 using System.IO;  
 using System.Net;  
 using System.Windows.Forms;  
 using System.Xml;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.SiteSelection.Properties;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     public static class MapSuiteSampleHelper  
     {  
         private static readonly string bingLoginServiceTemplate = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/{0}?&incl=ImageryProviders&o=xml&key={1}";  
 
         public static GraphicsPath CreateRoundPath(Rectangle rect, int arcRadius)  
         {  
             GraphicsPath path = new GraphicsPath();  
 
             if (rect.Width == 0 || rect.Height == 0)  
             {  
                 return path;  
             }  
 
             if (arcRadius > 0)  
             {  
                 path.AddArc(rect.Left, rect.Top, arcRadius, arcRadius, 180, 90);  
                 path.AddArc(rect.Right - arcRadius, rect.Top, arcRadius, arcRadius, -90, 90);  
                 path.AddArc(rect.Right - arcRadius, rect.Bottom - arcRadius, arcRadius, arcRadius, 0, 90);  
                 path.AddArc(rect.Left, rect.Bottom - arcRadius, arcRadius, arcRadius, 90, 90);  
             }  
 
             path.CloseFigure();  
             return path;  
         }  
 
         public static ServiceAreaAnalysis GetAreaAnalysis(AreaCreateMode createAreaMode)  
         {  
             ServiceAreaAnalysis serviceAreaAnalysis = null;  
             switch (createAreaMode)  
             {  
                 case AreaCreateMode.Route:  
                     serviceAreaAnalysis = new RouteAccessibleAreaAnalysis();  
                     break;  
 
                 default:  
                     serviceAreaAnalysis = new BufferServiceAreaAnalysis();  
                     break;  
             }  
 
             return serviceAreaAnalysis;  
         }  
 
         public static string GetBingMapsApplicationId()  
         {  
             string exePath = Application.ExecutablePath;  
             Configuration config = ConfigurationManager.OpenExeConfiguration(exePath);  
             KeyValueConfigurationElement appMapKeySetting = config.AppSettings.Settings["BingMapKey"];  
             string bingMapsKey = appMapKeySetting != null ? appMapKeySetting.Value : string.Empty;  
             if (string.IsNullOrEmpty(bingMapsKey))  
             {  
                 BingMapsApplicationIdPromptForm inputBingMapKeyWindow = new BingMapsApplicationIdPromptForm();  
                 inputBingMapKeyWindow.StartPosition = FormStartPosition.CenterParent;  
                 if (inputBingMapKeyWindow.ShowDialog() == DialogResult.OK  
                     && IsBingMapsKeyValid(inputBingMapKeyWindow.ApplicationId))  
                 {  
                     bingMapsKey = inputBingMapKeyWindow.ApplicationId;  
                     config.AppSettings.Settings.Add("BingMapKey", bingMapsKey);  
                     config.Save();  
                     ConfigurationManager.RefreshSection("appSettings");  
                 }  
             }  
             return bingMapsKey;  
         }  
 
         public static string GetDefaultColumnNameByPoiType(string poiType)  
         {  
             string result = string.Empty;  
             if (poiType.Equals(Resources.RestaurantsLayerKey, StringComparison.OrdinalIgnoreCase))  
             {  
                 result = "FoodType";  
             }  
             else if (poiType.Equals(Resources.MedicalFacilitesLayerKey, StringComparison.OrdinalIgnoreCase)  
                 || poiType.Equals(Resources.SchoolsLayerKey, StringComparison.OrdinalIgnoreCase))  
             {  
                 result = "TYPE";  
             }  
             else if (poiType.Equals(Resources.PublicFacilitesLayerKey, StringComparison.OrdinalIgnoreCase))  
             {  
                 result = "AGENCY";  
             }  
             else if (poiType.Equals(Resources.HotelsLayerKey, StringComparison.OrdinalIgnoreCase))  
             {  
                 result = "Hotels";  
             }  
             return result;  
         }  
 
         public static void RedrawBackground(this Control control, Action<Graphics> drawAction, SmoothingMode smoothingMode = SmoothingMode.HighQuality)  
         {  
             Bitmap newBackground = new Bitmap(control.Width, control.Height);  
             using (Graphics g = Graphics.FromImage(newBackground))  
             {  
                 g.SmoothingMode = smoothingMode;  
                 if (drawAction != null) drawAction(g);  
             }  
 
             if (control.BackgroundImage != null) control.BackgroundImage.Dispose();  
             control.BackgroundImage = newBackground;  
         }  
 
         private static bool IsBingMapsKeyValid(string bingMapsKey)  
         {  
             bool isValid = false;  
 
             try  
             {  
                 string loginServiceUri = String.Format(CultureInfo.InvariantCulture  
                               , bingLoginServiceTemplate, BingMapsMapType.Road, bingMapsKey);  
 
                 WebRequest request = WebRequest.Create(loginServiceUri);  
                 WebResponse response = request.GetResponse();  
                 Stream stream = response.GetResponseStream();  
                 XmlDocument xDoc = new XmlDocument();  
                 xDoc.Load(stream);  
                 XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(xDoc.NameTable);  
                 xmlNamespaceManager.AddNamespace("bing", "http://schemas.microsoft.com/search/local/ws/rest/v1");  
 
                 XmlNode root = xDoc.SelectSingleNode("bing:Response", xmlNamespaceManager);  
                 XmlNode imageUrlElement = root.SelectSingleNode("bing:ResourceSets/bing:ResourceSet/bing:Resources/bing:ImageryMetadata/bing:ImageUrl", xmlNamespaceManager);  
                 XmlNodeList subdomainsElement  
                     = root.SelectNodes("bing:ResourceSets/bing:ResourceSet/bing:Resources/bing:ImageryMetadata/bing:ImageUrlSubdomains/bing:string", xmlNamespaceManager);  
 
                 if (imageUrlElement != null && subdomainsElement != null)  
                 {  
                     isValid = true;  
                 }  
             }  
             catch (Exception ex)  
             {  
                 MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);  
             }  
 
             return isValid;  
         }  
     }  
 }  
 

TrackMode.cs

 using System;  
 
 namespace ThinkGeo.MapSuite.SiteSelection  
 {  
     [Serializable]  
     public enum TrackMode  
     {  
         None = 0,  
         Point = 1  
     }  
 }  
 
source_code_serviceedition_projecttemplates_siteselection_cs.zip.txt · Last modified: 2015/09/09 03:34 by admin