public static Geodetic <TLinear, TAngular> ChangeDatum <TLinear, TAngular>( IGeodetic oldGeodeticCoordinate, IEllipsoid newDatum) where TLinear : LinearUnit, new() where TAngular : AngularUnit, new() { ICartesian3D tempCoordinate = GeodeticToAverage <TLinear>(oldGeodeticCoordinate); return(AverageToGeodetic <TLinear, TAngular>(tempCoordinate, newDatum, oldGeodeticCoordinate.LongitudinalRange)); }
public static Cartesian3D <TLinear> GeodeticToAverage <TLinear>(IGeodetic geodetic) where TLinear : LinearUnit, new() { //check if not geodetic is Right Handed Cartesian3D <TLinear> cartesianFormOfGeodetic = geodetic.GetCartesianForm <TLinear>(); Matrix rotationMatrix = Transformation.CalculateEulerElementMatrix(geodetic.Datum.DatumMisalignment); return((Cartesian3D <TLinear>)cartesianFormOfGeodetic.Transform(rotationMatrix, geodetic.Datum.DatumTranslation.Negate())); }