ThinkGeo Cloud
ThinkGeo UI Controls
ThinkGeo Open Source
Help and Support
External Resources
ThinkGeo Cloud
ThinkGeo UI Controls
ThinkGeo Open Source
Help and Support
External Resources
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace ZoomLevelPartitioning { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new TestForm()); } } }
using System; using System.Windows.Forms; using System.Collections.ObjectModel; using ThinkGeo.MapSuite.Core; using ThinkGeo.MapSuite.DesktopEdition; namespace ZoomLevelPartitioning { public partial class TestForm : Form { public TestForm() { InitializeComponent(); } private void TestForm_Load(object sender, EventArgs e) { winformsMap1.MapUnit = GeographyUnit.DecimalDegree; winformsMap1.CurrentExtent = new RectangleShape(-125, 47, -67, 25); winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 198, 255, 255)); //Displays the World Map Kit as a background. ThinkGeo.MapSuite.DesktopEdition.WorldMapKitWmsDesktopOverlay worldMapKitDesktopOverlay = new ThinkGeo.MapSuite.DesktopEdition.WorldMapKitWmsDesktopOverlay(); winformsMap1.Overlays.Add(worldMapKitDesktopOverlay); ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"..\..\Data\volcanoes.shp"); worldLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleTriangleStyle(GeoColor.StandardColors.Orange, 8); worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level08; worldLayer.ZoomLevelSet.ZoomLevel09.DefaultPointStyle = PointStyles.CreateSimpleTriangleStyle(GeoColor.StandardColors.Orange, 20); worldLayer.ZoomLevelSet.ZoomLevel09.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; LayerOverlay staticOverlay = new LayerOverlay(); staticOverlay.Layers.Add("WorldLayer", worldLayer); winformsMap1.Overlays.Add(staticOverlay); // This is what you would call in the form load to set the // desktop edition to snap to these new and more granular zoom levels winformsMap1.ZoomLevelSet = PartitionZoomLevelSet(2, new ZoomLevelSet()); winformsMap1.Refresh(); } // This code will take the zoom level set you pass in and add // the number of intermediate levels you specify. public ZoomLevelSet PartitionZoomLevelSet(int stepsBetweenZoomLevels, ZoomLevelSet referenceZoomLevelSet) { ZoomLevelSet partitionedZoomLevelSet = new ZoomLevelSet(); Collection<ZoomLevel> zoomLevels = referenceZoomLevelSet.GetZoomLevels(); partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(zoomLevels[0].Scale)); foreach (ZoomLevel zoomLevel in zoomLevels) { double lowerScale = ZoomLevelSet.GetLowerZoomLevelScale(zoomLevel.Scale, referenceZoomLevelSet); if (lowerScale != zoomLevel.Scale) { for (int x = 1; x < stepsBetweenZoomLevels + 2; x++) { double steppedScale = zoomLevel.Scale - (((zoomLevel.Scale - lowerScale) / (stepsBetweenZoomLevels + 1)) * x); partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(steppedScale)); } } } return partitionedZoomLevelSet; } private void radioButtonWithout_CheckedChanged(object sender, EventArgs e) { winformsMap1.ZoomLevelSet = new ZoomLevelSet(); winformsMap1.Refresh(winformsMap1.Overlays[0]); } private void radioButtonWith_CheckedChanged(object sender, EventArgs e) { winformsMap1.ZoomLevelSet = PartitionZoomLevelSet(2, new ZoomLevelSet()); winformsMap1.Refresh(winformsMap1.Overlays[0]); } private void winformsMap1_MouseMove(object sender, MouseEventArgs e) { //Displays the X and Y in screen coordinates. statusStrip1.Items["toolStripStatusLabelScreen"].Text = "X:" + e.X + " Y:" + e.Y; //Gets the PointShape in world coordinates from screen coordinates. PointShape pointShape = ExtentHelper.ToWorldCoordinate(winformsMap1.CurrentExtent, new ScreenPointF(e.X, e.Y), winformsMap1.Width, winformsMap1.Height); //Displays world coordinates. statusStrip1.Items["toolStripStatusLabelWorld"].Text = "(world) X:" + Math.Round(pointShape.X, 4) + " Y:" + Math.Round(pointShape.Y, 4); } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } private void btnFullExtent_Click(object sender, EventArgs e) { winformsMap1.CurrentExtent = new RectangleShape(-125, 47, -67, 25); winformsMap1.Refresh(); } private void button2_Click(object sender, EventArgs e) { winformsMap1.Refresh(); } } }