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