Exemplo n.º 1
0
        public void TestTransformToXyTuple()
        {
            //Arrange
            var referenceOrigin = new ReferenceOriginWgs84Point(new Wgs84Point {
                Lat = 25.0783615, Lon = 121.5750212
            });
            var targetWgs84Point = new Wgs84Point
            {
                Lat = 25.0806617,
                Lon = 121.5749139
            };
            var       desiredTargetCartesian = (X : -10.8250645005394, Y : 254.80489950534);
            const int precision = 7;

            //Act
            var transformTool     = new Wgs84Transform(referenceOrigin);
            var transformedOrigin = transformTool.TransformToCartesianTuple(referenceOrigin);
            var transformedTarget = transformTool.TransformToCartesianTuple(targetWgs84Point);

            //Assert
            Assert.Equal(0.0, transformedOrigin.X, precision);
            Assert.Equal(0.0, transformedOrigin.Y, 6);

            Assert.Equal(desiredTargetCartesian.X, transformedTarget.X, precision);
            Assert.Equal(desiredTargetCartesian.Y, transformedTarget.Y, precision);
        }
Exemplo n.º 2
0
        public void TestTransformToCartesianPointStaticMethod()
        {
            //Arrange
            var referenceOrigin = new ReferenceOriginWgs84Point(new Wgs84Point {
                Lat = 25.0783615, Lon = 121.5750212
            });
            var targetWgs84Point = new Wgs84Point
            {
                Lat = 25.0806617,
                Lon = 121.5749139
            };
            var desiredTargetCartesian = new CartesianPoint {
                X = -10.8250645005394, Y = 254.80489950534
            };
            const int precision = 7;

            //Act
            var transformedOrigin = Wgs84Transform.TransformToCartesianPoint(referenceOrigin, ref referenceOrigin);
            var transformedTarget = Wgs84Transform.TransformToCartesianPoint(targetWgs84Point, ref referenceOrigin);

            //Assert
            Assert.Equal(0.0, transformedOrigin.X, precision);
            Assert.Equal(0.0, transformedOrigin.Y, 6);

            Assert.Equal(desiredTargetCartesian.X, transformedTarget.X, precision);
            Assert.Equal(desiredTargetCartesian.Y, transformedTarget.Y, precision);
        }
Exemplo n.º 3
0
        public void TestTransformBackToWgs84PointStaticMethod()
        {
            //Arrange
            var referenceOrigin = new ReferenceOriginWgs84Point(new Wgs84Point {
                Lat = 25.0783615, Lon = 121.5750212
            });
            var referenceOriginCartesianPoint = new CartesianPoint {
                X = 0.0, Y = 0.0
            };
            var transformedTarget = new CartesianPoint {
                X = -10.8250645005394, Y = 254.80489950534
            };
            var desiredWgs84Point = new Wgs84Point {
                Lat = 25.0806617, Lon = 121.5749139
            };
            const int precision = 7;

            //Act
            var transBackedOrigin =
                Wgs84Transform.TransformBackFromCartesian(referenceOriginCartesianPoint, ref referenceOrigin);
            var transBackedWgs84Point = Wgs84Transform.TransformBackFromCartesian(transformedTarget, ref referenceOrigin);

            //Assert
            Assert.Equal(referenceOrigin.Lon, transBackedOrigin.Lon, precision);
            Assert.Equal(referenceOrigin.Lat, transBackedOrigin.Lat, precision);

            Assert.Equal(desiredWgs84Point.Lon, transBackedWgs84Point.Lon, precision);
            Assert.Equal(desiredWgs84Point.Lat, transBackedWgs84Point.Lat, precision);
        }
    public Distance DistanceTo(Wgs84Point that)
    {
        if (that == null)
        {
            throw new ArgumentNullException("that");
        }
        if (this == that)
        {
            return(Distance.Zero);
        }
        var dLat = DegreesToRadians(Latitude - that.Latitude);
        var dLon = DegreesToRadians(Longitude - that.Longitude);
        var a    = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
                   Math.Cos(DegreesToRadians(Latitude)) *
                   Math.Cos(DegreesToRadians(that.Latitude)) *
                   Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
        var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        var d = Distance.RadiusOfEarth.ToDouble() * c;

        return(new Distance(d));
    }