示例#1
0
        public void RadianToDegreeTest_Succes()
        {
            //Arrange
            double expected = 34.3774677078;
            //Act
            double actual = LatLonSpherical.RadianToDegree(0.60);

            double tolerance = calculateTolerance(expected);

            //Assert
            Assert.That(actual, Is.EqualTo(expected).Within(tolerance));
        }
示例#2
0
        public void DegreeToRadianTest_Success()
        {
            // Arrange
            double expected = 0.78539816339;

            // Act
            double actual = LatLonSpherical.DegreeToRadian(45.0);

            double tolerance = calculateTolerance(expected);

            // Assert
            Assert.That(actual, Is.EqualTo(expected).Within(tolerance));
        }
示例#3
0
        public void CalculateDistanceBetweenLocations()
        {
            //Arrange
            double   expected      = 124.8;
            Location startLocation = new Location {
                latitude = 53.188333, longitude = 0.133333
            };
            Location endLocation = new Location {
                latitude = 53.320556, longitude = -1.729722
            };
            //Act
            double actual = LatLonSpherical.CalculateDistanceBetweenLocations(startLocation, endLocation);

            //Assert
            Assert.That(actual, Is.EqualTo(expected).Within(0.05));
        }
示例#4
0
        public void CalculateBearing()
        {
            //Arrange
            double   expected      = 284.00119698271232;
            Location startLocation = new Location {
                latitude = 59.571111, longitude = 4.133889
            };
            Location endLocation = new Location {
                latitude = 42.351111, longitude = -71.040833
            };
            //Act
            double actual = LatLonSpherical.CalculateBearing(startLocation, endLocation);

            //Assert
            Assert.That(actual, Is.EqualTo(expected));
        }
示例#5
0
        public void CalculateDestinationLocation()
        {
            //Arrange
            Location expected = new Location {
                latitude = 53.188333, longitude = 0.133333
            };
            Location point = new Location {
                latitude = 53.320556, longitude = -1.729722
            };
            double bearing  = 96.018254433006632;
            double distance = 124.8;
            //Act
            Location actual = LatLonSpherical.CalculateDestinationLocation(point, bearing, distance);

            //Assert
            Assert.That(actual, Has.Property("latitude").EqualTo(expected.latitude).Within(0.0005)
                        & Has.Property("longitude").EqualTo(expected.longitude).Within(0.0005));
        }
示例#6
0
        private async Task MoveTo(Location startPoint, Location endPoint, CancellationToken cancellationToken)
        {
            var startLocation         = startPoint;
            var endLocation           = endPoint;
            var distanceBetweenPoints = LatLonSpherical.CalculateDistanceBetweenLocations(startLocation, endLocation) * 1000; // multiply by 1000 to get in meters
            var timeRequired          = distanceBetweenPoints / _drone.Velocity;

            for (int i = 0; i < timeRequired; i++)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }

                var bearing              = LatLonSpherical.CalculateBearing(startLocation, endLocation);
                var distanceInKm         = _drone.Velocity / 1000;
                var intermediaryLocation = LatLonSpherical.CalculateDestinationLocation(startLocation, bearing, distanceInKm);

                var coordinates = new Coordinates {
                    latitude = intermediaryLocation.latitude, longitude = intermediaryLocation.longitude
                };
                var track = new Track {
                    location = coordinates, timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
                };
                var response = await this._utmService.Tracking.FlightTrack(_drone.Id,
                                                                           _drone.OperationId, track);

                if (response)
                {
                    _drone.Location = intermediaryLocation;
                    Console.WriteLine($"operation: {_drone.OperationId} drone: {_drone.Id} latitude: {track.location.latitude} longitude: {track.location.longitude}");
                }
                else
                {
                    Console.WriteLine("Error");
                }

                startLocation = intermediaryLocation;
            }
        }