/// <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); } }