Esempio n. 1
0
        private static ICoordinateTransformation GetCartesianTransform(ref ReferenceOriginWgs84Point referenceOrigin)
        {
            if (referenceOrigin == null)
            {
                throw new ArgumentException("reference origin point must have value");
            }

            var csFactory = new CoordinateSystemFactory();

            var projectionParameters = new List <ProjectionParameter>
            {
                new ProjectionParameter("latitude_of_origin", referenceOrigin.Lat),
                new ProjectionParameter("central_meridian", referenceOrigin.Lon),
                new ProjectionParameter("false_easting", 0),
                new ProjectionParameter("false_northing", 0)
            };
            var projection = csFactory.CreateProjection("Mercator_1SP", "Mercator", projectionParameters);
            IProjectedCoordinateSystem projectedCoordinateSystem = csFactory.CreateProjectedCoordinateSystem("My WGS84", GeographicCoordinateSystem.WGS84,
                                                                                                             projection, LinearUnit.Metre, new AxisInfo("E", AxisOrientationEnum.East),
                                                                                                             new AxisInfo("N", AxisOrientationEnum.North));

            referenceOrigin.ProjectedCoordinateSystem = projectedCoordinateSystem;
            var ctFactory        = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory();
            var transform        = ctFactory.CreateFromCoordinateSystems(GeographicCoordinateSystem.WGS84, projectedCoordinateSystem);
            var transformedPoint =
                transform.MathTransform.Transform(new[] { referenceOrigin.Lon, referenceOrigin.Lat });
            var shift = transformedPoint[1] * -1;

            referenceOrigin.ShiftedY = shift;

            return(transform);
        }
Esempio n. 2
0
        public static Wgs84Point TransformBackFromCartesian(CartesianPoint xyPoint, ref ReferenceOriginWgs84Point referenceOrigin)
        {
            var inverseTransform = GetInverseTransform(ref referenceOrigin);

            var rawXyPoint             = GetRawResult(xyPoint, referenceOrigin);
            var transformBackedRawData = inverseTransform.MathTransform.Transform(rawXyPoint);

            return(RawDataToWgs84Point(transformBackedRawData));
        }
Esempio n. 3
0
        private static ICoordinateTransformation GetInverseTransform(ref ReferenceOriginWgs84Point referenceOrigin)
        {
            if (referenceOrigin.ProjectedCoordinateSystem == null)
            {
                GetCartesianTransform(ref referenceOrigin);
            }

            var ctFactory = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory();

            return(ctFactory.CreateFromCoordinateSystems(referenceOrigin.ProjectedCoordinateSystem,
                                                         GeographicCoordinateSystem.WGS84));
        }
Esempio n. 4
0
        public static (double Longitude, double Latitude) TransformBackToTuple(CartesianPoint xyPoint, ref ReferenceOriginWgs84Point referenceOrigin)
        {
            var inverseTransform = GetInverseTransform(ref referenceOrigin);

            var rawXyPoint             = GetRawResult(xyPoint, referenceOrigin);
            var transformBackedRawData = inverseTransform.MathTransform.Transform(rawXyPoint);

            return(RawDataToWgs84Tuple(transformBackedRawData));
        }
Esempio n. 5
0
        public static CartesianPoint TransformToCartesianPoint(Wgs84Point wgs84Point, ref ReferenceOriginWgs84Point referenceOrigin)
        {
            var transform = GetCartesianTransform(ref referenceOrigin);
            var rawResult = transform.MathTransform.Transform(new[]
            {
                wgs84Point.Lon,
                wgs84Point.Lat
            });

            return(new CartesianPoint
            {
                X = rawResult[0],
                Y = rawResult[1] + referenceOrigin.ShiftedY
            });
        }
Esempio n. 6
0
        public static (double X, double Y) TransformToCartesianTuple(Wgs84Point wgs84Point, ref ReferenceOriginWgs84Point referenceOrigin)
        {
            var transform = GetCartesianTransform(ref referenceOrigin);
            var rawResult = transform.MathTransform.Transform(new[]
            {
                wgs84Point.Lon,
                wgs84Point.Lat
            });

            return(X : rawResult[0], Y : rawResult[1] + referenceOrigin.ShiftedY);
        }
Esempio n. 7
0
 public Wgs84Transform(ReferenceOriginWgs84Point referenceOrigin)
 {
     _referenceOrigin = referenceOrigin;
 }
Esempio n. 8
0
 private static double[] GetRawResult(CartesianPoint point, ReferenceOriginWgs84Point referenceOrigin)
 {
     return(new[] { point.X, point.Y - referenceOrigin.ShiftedY });
 }