User Tools

Site Tools


source_code_serviceseditionsample_worldcoordinates_cs_091017.zip

Source Code ServicesEditionSample WorldCoordinates CS 091017.zip

DecimalDegrees.cs

 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Text;  
 
 namespace WorldCoordinates  
 {  
     static class DecimalDegrees  
     {  
         public enum Type { Longitude, Latitude };  
 
         //From Decimal-degrees to Degrees Decimal-minutes.  
         public static string d_To_Dm(double d, int precision,Type type)  
         {  
             string result;  
             string hemisphere = GetHemisphere(d, type);  
             d = Math.Abs(d);  
             double D = Math.Truncate(d);  
             double m = Math.Round(((d - D) * 60),precision);  
             string zeroHolder = "";  
             if (m < 10) { zeroHolder = "0"; }  
             result = D + "° " + zeroHolder + m + "' " + hemisphere;  
 
             return result;  
         }  
 
        //From Decimal-degrees to Degrees Minutes Decimal-seconds.  
        public static string d_To_DMs(double d, int precision, Type type)  
         {  
             string result ;  
             string hemisphere = GetHemisphere(d, type);  
             d = Math.Abs(d);  
             double D = Math.Truncate(d);  
             double M = Math.Truncate((d - D)* 60);  
             double s = Math.Round((d - D - (M / 60)) * 3600,precision);  
             string minuteZeroHolder = "";  
             string secondZeroHolder = "";  
             if (M < 10) { minuteZeroHolder = "0"; }  
             if (s < 10) { secondZeroHolder = "0"; }  
             result = D + "° " + minuteZeroHolder + M + "' " + secondZeroHolder + s + "// " + hemisphere;  
 
             return result;  
         }  
 
         //From Decimal-minutes to Decimal-degrees.  
         public static double Dm_To_d(double D, double m, int precision)  
         {  
             double d = Math.Abs(D) + (m / 60);  
             if (D < 0) { d = -d; }  
             d = Math.Round(d, precision);  
             return d;  
         }  
 
         //From Degrees Minutes Decimal-seconds to Decimal-degrees.  
         public static double DMs_To_d(double D, double M, double s, int precision)  
         {  
             double d = Math.Abs(D) + (Math.Abs(M) / 60) + (s / 3600);  
             if (D < 0) { d = -d; }  
             d = Math.Round(d, precision);  
             return d;  
         }  
 
         //Gets the Hemisphere according to the positive (North, East) or negative value (South, West).  
         private static string GetHemisphere(double d, Type type)  
         {  
             string result;  
             if (type == Type.Longitude)  
             {  
                 if (d > 0) { result = "E"; }  
                 else { result = "W"; }  
             }  
             else  
             {  
                 if (d > 0) { result = "N"; }  
                 else { result = "S"; }  
             }  
             return result;  
         }  
     }  
 
 
 }  
 

Program.cs

 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Windows.Forms;  
 
 namespace WorldCoordinates  
 {  
     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.Drawing;  
 using System.Windows.Forms;  
 using ThinkGeo.MapSuite.Core;  
 
 namespace WorldCoordinates  
 {  
     public partial class TestForm : Form  
     {  
         private MapEngine mapEngine = new MapEngine();  
         private Bitmap bitmap = null;  
         ShapeFileFeatureLayer worldLayer = null;  
         Proj4Projection proj4Projection = new Proj4Projection();  
 
         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(-16410000,11825813,19539000,-5980000), Map.Width, Map.Height);  
             mapEngine.BackgroundFillBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);  
 
             //Sets the internal and external projection for the projection.  
             //The projection will be used to go from Mercator to Geodetic at the mouse mouve event.  
             proj4Projection.InternalProjectionParametersString = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";//Mercator  
             proj4Projection.ExternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326); //Geodetic (Longitude/Latitude)  
 
             // Adds the static layer in the Mercator projection to the MapEngine.  
             worldLayer = new ShapeFileFeatureLayer(@"..\..\Data\WorldMercator.shp", ShapeFileReadWriteMode.ReadOnly);  
             worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County1;  
             worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.StaticLayers.Add("WorldLayer", worldLayer);  
 
             DrawImage();  
         }  
 
         private void Map_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 (Mercator in meters) from screen coordinates.  
             PointShape pointShape = ExtentHelper.ToWorldCoordinate(mapEngine.CurrentExtent, new ScreenPointF(e.X, e.Y), Map.Width, Map.Height);  
 
             //Displays world coordinates in meters from Mercator projection (native projection of the layer).  
             statusStrip1.Items["toolStripStatusLabelMeters"].Text = "(meters) X:" + Math.Round(pointShape.X,2) + " Y:" + Math.Round(pointShape.Y,2);  
 
             //Converts the point to Geodetic from the Mercator projection.  
             proj4Projection.Open();  
             Vertex geoVertex = proj4Projection.ConvertToExternalProjection(pointShape.X, pointShape.Y);  
             proj4Projection.Close();  
 
             //Displays world coordinates in Decimal Degrees.  
             statusStrip1.Items["toolStripStatusLabelDecimalDegrees"].Text = "Long:" + Math.Round(geoVertex.X,4)  
                                                                           + " Lat:" + Math.Round(geoVertex.Y,4);  
 
             //Displays world coordiantes in Degrees Minute Decimal-seconds format.  
             statusStrip1.Items["toolStripStatusLabelLongLat"].Text =  DecimalDegrees.d_To_DMs(geoVertex.X, 2, DecimalDegrees.Type.Longitude) + "  " +  
                                                    DecimalDegrees.d_To_DMs(geoVertex.Y, 2, DecimalDegrees.Type.Latitude);  
 
         }  
 
         private void DrawImage()  
         {  
             if (bitmap != null) { bitmap.Dispose(); }  
             bitmap = new Bitmap(Map.Width, Map.Height);  
             mapEngine.OpenAllLayers();  
             mapEngine.DrawStaticLayers(bitmap, GeographyUnit.Meter);  
             mapEngine.CloseAllLayers();  
 
             Map.Image = bitmap;  
         }  
 
         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();  
         }  
 
 
     }  
 }  
 
source_code_serviceseditionsample_worldcoordinates_cs_091017.zip.txt · Last modified: 2015/09/08 06:09 by admin