private void ConvertCoordinates() { Proj4Projection proj4 = new Proj4Projection(); proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326); proj4.ExternalProjectionParametersString = GisEditor.ActiveMap.DisplayProjectionParameters; double x = 0; double y = 0; switch (SelectedCoordinateFormat) { case CoordinateType.DegreesMinutes: case CoordinateType.DegreesMinutesSeconds: if (String.IsNullOrEmpty(LatitudeSeconds)) { LatitudeSeconds = "0"; } if (String.IsNullOrEmpty(LongitudeSeconds)) { LongitudeSeconds = "0"; } double yDegrees, yMinutes, xDegrees, xMinutes, ySeconds, xSeconds; if (double.TryParse(LatitudeDegrees, out yDegrees) && double.TryParse(LatitudeMinutes, out yMinutes) && double.TryParse(LatitudeSeconds, out ySeconds) && double.TryParse(LongitudeDegrees, out xDegrees) && double.TryParse(LongitudeMinutes, out xMinutes) && double.TryParse(LongitudeSeconds, out xSeconds) ) { double actualXMinutes = xMinutes + (xDegrees - (int)xDegrees) * 60; double actualXSeconds = xSeconds + (actualXMinutes - (int)actualXMinutes) * 60; double actualYMinutes = yMinutes + (yDegrees - (int)yDegrees) * 60; double actualYSeconds = ySeconds + (actualYMinutes - (int)actualYMinutes) * 60; x = DecimalDegreesHelper.GetDecimalDegreeFromDegreesMinutesSeconds((int)xDegrees, (int)actualXMinutes, actualXSeconds); y = DecimalDegreesHelper.GetDecimalDegreeFromDegreesMinutesSeconds((int)yDegrees, (int)actualYMinutes, actualYSeconds); x = LongitudeType == "E" ? x : -x; y = LatitudeType == "N" ? y : -y; } else { throw new Exception(errorMessage); } break; case CoordinateType.XY: case CoordinateType.DecimalDegrees: default: if (!(double.TryParse(Longitude, out x) && double.TryParse(Latitude, out y))) { throw new Exception(errorMessage); } break; } proj4.Open(); ResultVertex = SelectedCoordinateFormat == CoordinateType.XY ? new Vertex(x, y) : proj4.ConvertToExternalProjection(x, y); proj4.Close(); }