コード例 #1
0
        public override string[] Process(IGeographicPoint leftUpper, IGeographicPoint rigthLower, string dataFolder,
                                         string resultFolder)
        {
            var folderDescription = new LandsatDataDescription(dataFolder);

            var                  path             = folderDescription;
            LandsatMetadata      metadataFile     = JsonHelper.Deserialize <LandsatMetadata>(folderDescription.MetadataMtlJson);
            TirsThermalConstants thermalConstants = metadataFile.L1MetadataFile.TirsThermalConstants;
            var                  cuttedImageInfo  =
                ClipImageHelper.GetCuttedImageInfoByPolygon(folderDescription.Channel10.Raw,
                                                            new GeographicPolygon
            {
                UpperLeft  = leftUpper,
                LowerRight = rigthLower
            });

            using (var ds = Gdal.Open(folderDescription.Channel10.Raw, Access.GA_ReadOnly))
            {
                CalculateTemperature(ds.GetRasterBand(1),
                                     metadataFile.L1MetadataFile.RadiometricRescaling.RadianceMultBand11,
                                     metadataFile.L1MetadataFile.RadiometricRescaling.RadianceAddBand11,
                                     thermalConstants.K1ConstantBand11,
                                     thermalConstants.K2ConstantBand11,
                                     resultFolder,
                                     cuttedImageInfo
                                     );
            }

            return(new[] { resultFolder + "\\temperature.png" });
        }
コード例 #2
0
        private async Task ProcessRequest(IDataNormalizationRequest request)
        {
            Logger.Info($"Получен запрос (RequestId = {request.RequestId}) на нормализацию данных в папке {request.Folder}");
            if (request.SatelliteType != SatelliteType.Landsat8)
            {
                throw new ArgumentException("Неверно задан тип спутника");
            }

            var folderDescription = new LandsatDataDescription(request.Folder);

            LandsatMetadata metadataFile                       = JsonHelper.Deserialize <LandsatMetadata>(folderDescription.MetadataMtlJson);
            LandsatNormalizationProcessor processor            = new LandsatNormalizationProcessor(Logger);
            RadiometricRescaling          radiometricRescaling = metadataFile.L1MetadataFile.RadiometricRescaling;
            ImageAttributes   imageAttributes                  = metadataFile.L1MetadataFile.ImageAttributes;
            MinMaxRadiance    minMaxRadiance                   = metadataFile.L1MetadataFile.MinMaxRadiance;
            MinMaxReflectance minMaxReflectance                = metadataFile.L1MetadataFile.MinMaxReflectance;

            #region Channel normalization

            var normalizationDataFolder = $@"{request.Folder}{FilenamesConstants.PathToNormalizedDataFolder}";

            if (!Directory.Exists(normalizationDataFolder))
            {
                Directory.CreateDirectory(normalizationDataFolder);
            }

            processor.Normalization(folderDescription.Channel1.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand1, radiometricRescaling.RadianceAddBand1,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand1, minMaxReflectance.ReflectanceMaximumBand1);

            processor.Normalization(folderDescription.Channel2.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand2, radiometricRescaling.RadianceAddBand2,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand2, minMaxReflectance.ReflectanceMaximumBand2);

            processor.Normalization(folderDescription.Channel3.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand3, radiometricRescaling.RadianceAddBand3,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand3, minMaxReflectance.ReflectanceMaximumBand3);

            processor.Normalization(folderDescription.Channel4.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand4, radiometricRescaling.RadianceAddBand4,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand4, minMaxReflectance.ReflectanceMaximumBand4);

            processor.Normalization(folderDescription.Channel5.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand5, radiometricRescaling.RadianceAddBand5,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand5, minMaxReflectance.ReflectanceMaximumBand5);

            processor.Normalization(folderDescription.Channel6.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand6, radiometricRescaling.RadianceAddBand6,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand6, minMaxReflectance.ReflectanceMaximumBand6);

            processor.Normalization(folderDescription.Channel7.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand7, radiometricRescaling.RadianceAddBand7,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand7, minMaxReflectance.ReflectanceMaximumBand7);

            processor.Normalization(folderDescription.Channel8.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand8, radiometricRescaling.RadianceAddBand8,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand8, minMaxReflectance.ReflectanceMaximumBand8);

            processor.Normalization(folderDescription.Channel9.Raw, normalizationDataFolder,
                                    radiometricRescaling.RadianceMultBand9, radiometricRescaling.RadianceAddBand9,
                                    imageAttributes.SunElevation, imageAttributes.EarthSunDistance,
                                    minMaxRadiance.RadianceMaximumBand9, minMaxReflectance.ReflectanceMaximumBand9);


            #endregion

            await _busManager.Send <IDataNormalizationResponse>(BusQueueConstants.DataNormalizationResponsesQueueName, new
            {
                RequestId = request.RequestId
            });

            Logger.Info($"Запрос обработан (RequestId = {request.RequestId})");
        }