Exemple #1
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 #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 = _3DTo2DConversion.Forward(coordinate);
            Coordinate geocentricCoordinate = _targetConversion.Forward(coordinate);

            geocentricCoordinate = _transformation.Reverse(geocentricCoordinate);
            coordinate           = _sourceConversion.Reverse(geocentricCoordinate);
            coordinate           = _3DTo2DConversion.Reverse(coordinate);
            return(coordinate);
        }
Exemple #3
0
        /// <summary>
        /// Computes the reverse transformation.
        /// </summary>
        /// <param name="coordinate">The coordinate.</param>
        /// <returns>The transformed coordinate.</returns>
        protected override GeoCoordinate ComputeReverse(Coordinate coordinate)
        {
            // source: EPSG Guidance Note number 7, part 2, page 94

            Double x = _originGeocentricCoordinate.X - coordinate.X * _sinLamda0 - coordinate.Y * _sinFi0 * _cosLamda0 + coordinate.Z * _cosFi0 * _cosLamda0;
            Double y = _originGeocentricCoordinate.Y + coordinate.X * _cosLamda0 - coordinate.Y * _sinFi0 * _sinLamda0 + coordinate.Z * _cosFi0 * _sinLamda0;
            Double z = _originGeocentricCoordinate.Z + coordinate.Y * _cosFi0 + coordinate.Z * _sinFi0;

            return(_conversion.Reverse(new Coordinate(x, y, z)));
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="GeocentricToTopocentricConversion" /> 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 a length value as required by the method.
        /// </exception>
        public GeocentricToTopocentricConversion(IDictionary <CoordinateOperationParameter, Object> parameters, Ellipsoid ellipsoid)
            : base(CoordinateOperationMethods.GeocentricToTopocentricConversion.Identifier, CoordinateOperationMethods.GeocentricToTopocentricConversion.Name, CoordinateOperationMethods.GeocentricToTopocentricConversion, parameters)
        {
            if (ellipsoid == null)
            {
                throw new ArgumentNullException("ellipsoid", "The ellipsoid is null.");
            }

            _geocentricXOfTopocentricOrigin = ((Length)parameters[CoordinateOperationParameters.GeocenticXOfTopocentricOrigin]).BaseValue;
            _geocentricYOfTopocentricOrigin = ((Length)parameters[CoordinateOperationParameters.GeocenticYOfTopocentricOrigin]).BaseValue;
            _geocentricZOfTopocentricOrigin = ((Length)parameters[CoordinateOperationParameters.GeocenticZOfTopocentricOrigin]).BaseValue;

            GeographicToGeocentricConversion _conversion = new GeographicToGeocentricConversion(ellipsoid);
            GeoCoordinate geographicCoordinate           = _conversion.Reverse(new Coordinate(_geocentricXOfTopocentricOrigin, _geocentricYOfTopocentricOrigin, _geocentricZOfTopocentricOrigin));

            _sinLamda0 = Math.Sin(geographicCoordinate.Longitude.BaseValue);
            _cosLamda0 = Math.Cos(geographicCoordinate.Longitude.BaseValue);

            _sinFi0 = Math.Sin(geographicCoordinate.Latitude.BaseValue);
            _cosFi0 = Math.Cos(geographicCoordinate.Latitude.BaseValue);
        }