/// <summary>
        /// Converts from source to target datum
        /// </summary>
        /// <param name="pt">the point containing the input and output values</param>
        private void DatumTransform(Coordinate pt)
        {
            /* -------------------------------------------------------------------- */
            /*      Short cut if the datums are identical.                          */
            /* -------------------------------------------------------------------- */
            if (_sourceCRS.Datum.Equals(_targetCRS.Datum))
            {
                return;
            }

            /* -------------------------------------------------------------------- */
            /*      Apply grid shift if required                                    */
            /* -------------------------------------------------------------------- */
            if (_sourceCRS.Datum.TransformType == Datum.Datum.DatumTransformType.GridShift)
            {
                _sourceCRS.Datum.ApplyGridShift(pt, false);
            }

            /* ==================================================================== */
            /*      Do we need to go through geocentric coordinates?                */
            /* ==================================================================== */
            if (_transformViaGeocentric)
            {
                /* -------------------------------------------------------------------- */
                /*      Convert to geocentric coordinates.                              */
                /* -------------------------------------------------------------------- */
                _sourceGeoConv.ConvertGeodeticToGeocentric(pt);

                /* -------------------------------------------------------------------- */
                /*      Convert between datums.                                         */
                /* -------------------------------------------------------------------- */
                if (_sourceCRS.Datum.HasTransformToWGS84)
                {
                    _sourceCRS.Datum.TransformFromGeocentricToWgs84(pt);
                }
                if (_targetCRS.Datum.HasTransformToWGS84)
                {
                    _targetCRS.Datum.TransformToGeocentricFromWgs84(pt);
                }

                /* -------------------------------------------------------------------- */
                /*      Convert back to geodetic coordinates.                           */
                /* -------------------------------------------------------------------- */
                _targetGeoConv.ConvertGeocentricToGeodetic(pt);
            }

            /* -------------------------------------------------------------------- */
            /*      Apply grid shift if required                                    */
            /* -------------------------------------------------------------------- */
            if (_sourceCRS.Datum.TransformType == Datum.Datum.DatumTransformType.GridShift)
            {
                _sourceCRS.Datum.ApplyGridShift(pt, true);
            }
        }