Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
        }