public void Invoke(int y)
        {
            var span = _target.GetPixelRowSpan(y);

            // Calculate or retrieve the latitude calculation component of geostationary projection
            var latitudeCalculations = CalculateGeostationaryLatitude(y + _yOffset);

            // Convert image x,y to Mercator projection angle
            var targetWidth = _registration.Width * 2;
            var projectionY = ProjectionAngleConverter.FromY(y + _yOffset, _registration.Height);

            for (var x = 0; x < span.Length; x++)
            {
                var projectionX = ProjectionAngleConverter.FromX(x + _xOffset, targetWidth);

                // Convert latitude/longitude to geostationary scanning angle
                GeostationaryProjection.ToScanningAngle(latitudeCalculations, projectionX, _registration.Definition, out var scanningX, out var scanningY);

                // Map pixel from satellite image back to target image
                span[x] = GetTargetColour(scanningX, scanningY, projectionY, projectionX);
            }
        }
Example #2
0
 public void FromX()
 {
     Angle.FromRadians(ProjectionAngleConverter.FromX(0, 200)).Degrees.Should().BeApproximately(-180, Precision);
     Angle.FromRadians(ProjectionAngleConverter.FromX(200, 200)).Degrees.Should().BeApproximately(180, Precision);
     Angle.FromRadians(ProjectionAngleConverter.FromX(100, 200)).Degrees.Should().BeApproximately(0, Precision);
 }