/// <summary> /// Initializes a new instance of the <see cref="GeographicToTopocentricConversion" /> class. /// </summary> /// <param name="parameters">The parameters of the operation.</param> /// <param name="ellipsoid">The ellipsoid.</param> /// <exception cref="System.ArgumentNullException"> /// The ellipsoid is null. /// or /// The method requires parameters which are not specified. /// </exception> /// <exception cref="System.ArgumentException"> /// The parameters do not contain a required parameter value. /// or /// The parameter is not an angular value as required by the method. /// or /// The parameter is not a length value as required by the method. /// </exception> public GeographicToTopocentricConversion(IDictionary <CoordinateOperationParameter, Object> parameters, Ellipsoid ellipsoid) : base(CoordinateOperationMethods.GeographicToTopocentricConversion.Identifier, CoordinateOperationMethods.GeographicToTopocentricConversion.Name, CoordinateOperationMethods.GeographicToTopocentricConversion, parameters) { if (ellipsoid == null) { throw new ArgumentNullException("ellipsoid", "The ellipsoid is null."); } _ellipsoid = ellipsoid; _latitudeOfTopocentricOrigin = ((Angle)parameters[CoordinateOperationParameters.LatitudeOfTopocentricOrigin]).BaseValue; _longitudeOfTopocentricOrigin = ((Angle)parameters[CoordinateOperationParameters.LongitudeOfTopocentricOrigin]).BaseValue; _ellipsoidalHeightOfTopocentricOrigin = ((Length)parameters[CoordinateOperationParameters.EllipsoidalHeightOfTopocentricOrigin]).BaseValue; _originRadiousOfPrimeVerticalCurvature = _ellipsoid.RadiusOfPrimeVerticalCurvature(_latitudeOfTopocentricOrigin); _conversion = new GeographicToGeocentricConversion(_ellipsoid); _originGeocentricCoordinate = _conversion.Forward(new GeoCoordinate(_latitudeOfTopocentricOrigin, _longitudeOfTopocentricOrigin, _ellipsoidalHeightOfTopocentricOrigin)); _sinLamda0 = Math.Sin(_longitudeOfTopocentricOrigin); _cosLamda0 = Math.Cos(_longitudeOfTopocentricOrigin); _sinFi0 = Math.Sin(_latitudeOfTopocentricOrigin); _cosFi0 = Math.Cos(_latitudeOfTopocentricOrigin); }
/// <summary> /// Computes the reverse transformation. /// </summary> /// <param name="coordinate">The coordinate.</param> /// <returns>The transformed coordinate.</returns> protected override GeoCoordinate ComputeReverse(GeoCoordinate coordinate) { Coordinate geocentricCoordinate = _targetConversion.Forward(coordinate); geocentricCoordinate = _transformation.Reverse(geocentricCoordinate); GeoCoordinate result = _sourceConversion.Reverse(geocentricCoordinate); return(result); }
/// <summary> /// Computes the reverse transformation. /// </summary> /// <param name="coordinate">The coordinate.</param> /// <returns>The transformed coordinate.</returns> protected override GeoCoordinate ComputeReverse(GeoCoordinate coordinate) { coordinate = _3DTo2DConversion.Forward(coordinate); Coordinate geocentricCoordinate = _targetConversion.Forward(coordinate); geocentricCoordinate = _transformation.Reverse(geocentricCoordinate); coordinate = _sourceConversion.Reverse(geocentricCoordinate); coordinate = _3DTo2DConversion.Reverse(coordinate); return(coordinate); }