====== Source Code ServicesEditionSample TimeLine CS 091013.zip ====== ====DateBasedStyle.cs==== using System; using System.Collections.Generic; using System.Collections.ObjectModel; using ThinkGeo.MapSuite.Core; namespace TimeLine { // Mark the class Serializable so that it works in SQL Server state // and in every serialization context [Serializable] class DateBasedStyle : AreaStyle { private AreaStyle beforeAreaStyle; private AreaStyle afterAreaStyle; private string yearColumnName; private int referenceYear; private TextStyle textStyle = null ; public DateBasedStyle() : this(string.Empty, new AreaStyle(), new AreaStyle(), new TextStyle()) { } public DateBasedStyle(string yearColumnName, AreaStyle beforeAreaStyle, AreaStyle afterAreaStyle, TextStyle textStyle) { this.yearColumnName = yearColumnName; this.beforeAreaStyle = beforeAreaStyle; this.afterAreaStyle = afterAreaStyle; this.textStyle = textStyle; } public AreaStyle BeforeAreaStyle { get { return beforeAreaStyle; } set { beforeAreaStyle = value; } } public AreaStyle AfterAreaStyle { get { return afterAreaStyle; } set { afterAreaStyle = value; } } public TextStyle TextStyle { get { return textStyle; } set { textStyle = value; } } public string YearColumnName { get { return yearColumnName; } set { yearColumnName = value; } } public int ReferenceYear { get { return referenceYear; } set { referenceYear = value; } } protected override void DrawCore(IEnumerable features, GeoCanvas canvas, Collection labelsInThisLayer, Collection labelsInAllLayers) { foreach (Feature feature in features) { // Here we are going to do the calculation to see what // the current Year it is for each feature and draw the approperate style according to //to the reference year. int currentDate = Convert.ToInt32(feature.ColumnValues[yearColumnName]); if (currentDate <= referenceYear) { beforeAreaStyle.Draw(new Collection() { feature }, canvas, labelsInThisLayer, labelsInAllLayers); if (textStyle != null) { textStyle.Draw(new Collection() { feature }, canvas, labelsInThisLayer, labelsInAllLayers); } } else { afterAreaStyle.Draw(new Collection() { feature }, canvas, labelsInThisLayer, labelsInAllLayers); } } } protected override Collection GetRequiredColumnNamesCore() { Collection columns = new Collection(); if (!columns.Contains(yearColumnName)) { columns.Add(yearColumnName); } return columns; } } } ====Program.cs==== using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace TimeLine { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new TestForm()); } } } ====TestForm.cs==== using System; using System.Drawing; using System.Windows.Forms; using ThinkGeo.MapSuite.Core; namespace TimeLine { public partial class TestForm : Form { private MapEngine mapEngine = new MapEngine(); private MapEngine mapEngine2 = new MapEngine(); private MapEngine mapEngine3 = new MapEngine(); private Bitmap bitmap = null; private Bitmap bitmap2 = null; private Bitmap bitmap3 = null; ShapeFileFeatureLayer statesLayer = null; ShapeFileFeatureLayer countriesLayer = null; DateBasedStyle dateBasedStyle = null; public TestForm() { InitializeComponent(); } private void TestForm_Load(object sender, EventArgs e) { // Sets the full extent and the background color mapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(new RectangleShape(-148.10,55.75,-66,21), Map.Width, Map.Height); mapEngine.BackgroundFillBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean); mapEngine2.CurrentExtent = ExtentHelper.GetDrawingExtent(new RectangleShape(-169.14,72.69,-130.37,51.56), Map2.Width, Map2.Height); mapEngine2.BackgroundFillBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean); mapEngine3.CurrentExtent = ExtentHelper.GetDrawingExtent(new RectangleShape(-161.95,23.36,-152.71,17.49), Map3.Width, Map3.Height); mapEngine3.BackgroundFillBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean); // Adds the static layers to the MapEngines // Adds the country background layer. countriesLayer = new ShapeFileFeatureLayer(@"..\..\Data\countries02.shp", ShapeFileReadWriteMode.ReadOnly); countriesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1; countriesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; mapEngine.StaticLayers.Add("CountriesLayer", countriesLayer); mapEngine2.StaticLayers.Add("CountriesLayer", countriesLayer); mapEngine3.StaticLayers.Add("CountriesLayer", countriesLayer); //Adds the states layer with the DateBasedStyle. statesLayer = new ShapeFileFeatureLayer(@"..\..\Data\usastates.shp", ShapeFileReadWriteMode.ReadOnly); dateBasedStyle = new DateBasedStyle(); dateBasedStyle.YearColumnName = "Year"; dateBasedStyle.BeforeAreaStyle = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightGreen)); dateBasedStyle.AfterAreaStyle = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black), new GeoSolidBrush(GeoColor.StandardColors.LightGray)); dateBasedStyle.TextStyle = new TextStyle("Year", new GeoFont("Arial", 8), new GeoSolidBrush(GeoColor.StandardColors.DarkGreen)); dateBasedStyle.ReferenceYear = trackBar1.Value; statesLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear(); statesLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(dateBasedStyle); statesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; mapEngine.StaticLayers.Add("StateLayer", statesLayer); mapEngine2.StaticLayers.Add("StateLayer", statesLayer); mapEngine3.StaticLayers.Add("StateLayer", statesLayer); DrawImage(); lblYear.Text = Convert.ToString(trackBar1.Value); } private void trackBar1_ValueChanged(object sender, EventArgs e) { dateBasedStyle.ReferenceYear = trackBar1.Value; lblYear.Text = Convert.ToString(trackBar1.Value); DrawImage(); } private void DrawImage() { if (bitmap != null) { bitmap.Dispose(); } bitmap = new Bitmap(Map.Width, Map.Height); mapEngine.OpenAllLayers(); mapEngine.DrawStaticLayers(bitmap, GeographyUnit.DecimalDegree); mapEngine.CloseAllLayers(); Map.Image = bitmap; if (bitmap2 != null) { bitmap2.Dispose(); } bitmap2 = new Bitmap(Map2.Width, Map2.Height); mapEngine2.OpenAllLayers(); mapEngine2.DrawStaticLayers(bitmap2, GeographyUnit.DecimalDegree); mapEngine2.CloseAllLayers(); Map2.Image = bitmap2; if (bitmap3 != null) { bitmap3.Dispose(); } bitmap3 = new Bitmap(Map3.Width, Map3.Height); mapEngine3.OpenAllLayers(); mapEngine3.DrawStaticLayers(bitmap3, GeographyUnit.DecimalDegree); mapEngine3.CloseAllLayers(); Map3.Image = bitmap3; } private void ToolBar_ButtonClick(object sender, ToolBarButtonClickEventArgs e) { switch (e.Button.Tag.ToString()) { case "Zoom In": mapEngine.CurrentExtent.ScaleDown(50); break; case "Zoom Out": mapEngine.CurrentExtent.ScaleUp(50); break; case "Full Extent": mapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(new RectangleShape(-180.0, 83.0, 180.0, -90.0), Map.Width, Map.Height); break; case "Pan Left": mapEngine.CurrentExtent = ExtentHelper.Pan(mapEngine.CurrentExtent, PanDirection.Left, 20); break; case "Pan Right": mapEngine.CurrentExtent = ExtentHelper.Pan(mapEngine.CurrentExtent, PanDirection.Right, 20); break; case "Pan Up": mapEngine.CurrentExtent = ExtentHelper.Pan(mapEngine.CurrentExtent, PanDirection.Up, 20); break; case "Pan Down": mapEngine.CurrentExtent = ExtentHelper.Pan(mapEngine.CurrentExtent, PanDirection.Down, 20); break; default: break; } DrawImage(); } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } } }