Esempio n. 1
0
        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();
        }