User Tools

Site Tools


source_code_desktopeditionsample_zoomlevelpartitioning_cs_091023.zip

Source Code DesktopEditionSample ZoomLevelPartitioning CS 091023.zip

Program.cs

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());
        }
    }
}

TestForm.cs

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();
        }
    }
}
source_code_desktopeditionsample_zoomlevelpartitioning_cs_091023.zip.txt · Last modified: 2015/09/09 03:33 by admin