/// <summary> /// FY3A_MERSI_GBAL_L1_20120808_0000_1000M_MS.HDF-> /// FY3A_MERSI_GBAL_GLL_L1_20120808_0000_1000M_MS_D.ldf /// </summary> /// <param name="inArg"></param> /// <param name="dataIdentify"></param> /// <returns></returns> private string CreateMosaicFilename(InputArg inArg, RasterDatasetInfo dataIdentify, DateTime dateTime, string projectionIdentify, float resolution, string station, string dayOrNight) { PrjEnvelopeItem item = inArg.MosaicInputArg.Envelope; return(string.Format("{0}_{1}_{2}_{3}_{4}_{5}_{6}_{7}_{8}_{9}.ldf", dataIdentify.SatelliteID, dataIdentify.SensorID, item.Name, projectionIdentify, "L1", dateTime.ToString("yyyyMMdd"), string.IsNullOrWhiteSpace(inArg.OrbitIdentify) ? "0000" : inArg.OrbitIdentify, projectionIdentify == "GLL" ? PrjFileName.GLLResolutionIdentify(resolution) : PrjFileName.ResolutionIdentify(resolution), station, dayOrNight )); }
public void Do(InputArg inArg) { CheckAtg(inArg); string projectionIdentify = inArg.ProjectionIdentify; OutputArg outArg = new OutputArg(); try { using (AbstractWarpDataset inputRaster = WarpDataset.Open(inArg.InputFilename)) { RasterDatasetInfo dsInfo = mRasterSourceManager.GetInstance().GetRasterDatasetInfo(inArg.InputFilename); DateTime? dateTime = mRasterSourceManager.GetInstance().GetImageTime(inArg.InputFilename); DataIdentify dataIdentify = new DataIdentify(); outArg.OrbitFilename = Path.GetFileName(inArg.InputFilename); outArg.Satellite = dsInfo.SatelliteID; outArg.Sensor = dsInfo.SensorID; outArg.Level = "L1"; outArg.ProjectionIdentify = projectionIdentify; outArg.ObservationDate = dateTime.HasValue ? dateTime.Value.ToString("yyyyMMdd") : ""; outArg.ObservationTime = dateTime.HasValue ? dateTime.Value.ToString("HHmm") : ""; outArg.Station = ParseStation(Path.GetFileName(inArg.InputFilename)); outArg.DayOrNight = DayOrNight(inputRaster); if (dateTime.HasValue) { outArg.OrbitIdentify = CalcOrbitIdentify(dateTime.Value, inArg.PervObservationDate, inArg.PervObservationTime, inArg.OrbitIdentify); } outArg.Length = new FileInfo(inArg.InputFilename).Length; string validEnvelopeMsg = ""; #region 日夜检查 if (!string.IsNullOrWhiteSpace(inArg.DayNight)) { if (inArg.DayNight != "daynight" && outArg.DayOrNight == "X") { outArg.LogLevel = "info"; outArg.LogInfo = "未设定处理白天和晚上数据,白天晚上标记未知:X"; } else if (inArg.DayNight == "day" && outArg.DayOrNight != "D") { outArg.LogLevel = "info"; outArg.LogInfo = "设定为只处理白天数据,当前数据标记为晚上"; } else if (inArg.DayNight == "night" && outArg.DayOrNight != "N") { outArg.LogLevel = "info"; outArg.LogInfo = "设定为只处理晚上数据,当前数据标记为白天"; } else if (inArg.DayNight == "notnight" && outArg.DayOrNight == "N") { outArg.LogLevel = "info"; outArg.LogInfo = "设定为不处理晚上数据,当前数据标记为晚上"; } else if (inArg.DayNight == "notday" && outArg.DayOrNight == "D") { outArg.LogLevel = "info"; outArg.LogInfo = "设定为不处理白天数据,当前数据标记为白天"; } } #endregion 日夜检查 if (inArg.ValidEnvelopes == null || inArg.ValidEnvelopes.Length == 0) { outArg.LogLevel = "error"; outArg.LogInfo = "参数错误:未正确设置ValidEnvelopes"; } else if (!ValidEnvelope(inputRaster, inArg.ValidEnvelopes, out validEnvelopeMsg)) { outArg.LogLevel = "info"; outArg.LogInfo = validEnvelopeMsg; } else { PrjOutArg prjArg; if (inArg.Envelopes == null || inArg.Envelopes.Length == 0) { prjArg = new PrjOutArg(projectionIdentify, null, inArg.ResolutionX, inArg.ResolutionY, inArg.OutputDir); } else { prjArg = new PrjOutArg(projectionIdentify, inArg.Envelopes, inArg.ResolutionX, inArg.ResolutionY, inArg.OutputDir); } //prjArg.Args = new string[] { "SolarZenith"}; if (inArg.Bands != null && inArg.Bands.Length != 0) { prjArg.SelectedBands = inArg.Bands; Console.WriteLine("SelectedBands:" + string.Join(",", prjArg.SelectedBands)); } //扩展参数 List <string> extArgs = new List <string>(); extArgs.Add("IsClearPrjCache"); if (inArg.ExtArgs != null) { extArgs.AddRange(inArg.ExtArgs); } prjArg.Args = extArgs.ToArray(); ProjectionFactory prjFactory = new ProjectionFactory(); string retMessage = ""; string[] files = prjFactory.Project(inputRaster, prjArg, new Action <int, string>(OnProgress), out retMessage); prjFactory = null; //投影结束,执行拼接,如果有拼接节点 List <OutFileArg> fileArgs = new List <OutFileArg>(); for (int i = 0; i < files.Length; i++) { string file = files[i]; if (string.IsNullOrWhiteSpace(file) || !File.Exists(file)) { continue; } OutFileArg fileArg = new OutFileArg(); Envelope env = null; float resolutionX; float resolutionY; string overViewFilename = ""; using (AbstractWarpDataset outfileRaster = WarpDataset.Open(file)) { Console.WriteLine("生成缩略图开始"); overViewFilename = OverViewHelper.OverView(outfileRaster, _prjPngSize); Console.WriteLine("生成缩略图结束"); env = outfileRaster.GetEnvelope(); resolutionX = outfileRaster.ResolutionX; resolutionY = outfileRaster.ResolutionY; var dt = dateTime.HasValue ? dateTime.Value : DateTime.Now; TryMosaicFile(inArg, outfileRaster, dsInfo, dt, outArg.DayOrNight); } fileArg.OutputFilename = Path.GetFileName(file); fileArg.Thumbnail = (string.IsNullOrWhiteSpace(overViewFilename) && File.Exists(overViewFilename) ? "" : Path.GetFileName(overViewFilename)); string solarZenithFile = Path.Combine(Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file) + ".SolarZenith.ldf"); string solarZenithHdrFile = Path.Combine(Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file) + ".SolarZenith.hdr"); fileArg.ExtendFiles = Path.ChangeExtension(Path.GetFileName(file), "hdr") + (string.IsNullOrWhiteSpace(solarZenithFile) && File.Exists(solarZenithFile) ? "" : "," + Path.GetFileName(solarZenithFile)) + (string.IsNullOrWhiteSpace(solarZenithHdrFile) && File.Exists(solarZenithHdrFile) ? "" : "," + Path.GetFileName(solarZenithHdrFile)); fileArg.Envelope = new PrjEnvelopeItem("GBAL", env == null ? null : new RasterProject.PrjEnvelope(env.MinX, env.MaxX, env.MinY, env.MaxY, SpatialReferenceFactory.CreateSpatialReference(4326))); fileArg.ResolutionX = resolutionX.ToString(); fileArg.ResolutionY = resolutionY.ToString(); fileArg.Length = new FileInfo(file).Length; fileArgs.Add(fileArg); if (inArg.IsOnlySaveMosaicFile) { TryDeleteFile(file); } } outArg.OutputFiles = fileArgs.ToArray(); outArg.LogLevel = "info"; if (string.IsNullOrWhiteSpace(retMessage)) { outArg.LogInfo = "投影成功"; } else { outArg.LogInfo = retMessage; } if (string.IsNullOrWhiteSpace(validEnvelopeMsg)) { outArg.LogInfo = outArg.LogInfo + validEnvelopeMsg; } } } } catch (Exception ex) { outArg.LogLevel = "error"; Console.WriteLine(ex.StackTrace); outArg.LogInfo = ex.Message + ex.StackTrace; Console.WriteLine("PIE.Meteo.ProjectTool.Execute()", ex); } finally { //输出参数文件重新命名 string inputFileName = Path.GetFileName(inArg.InputFilename); System.Text.RegularExpressions.Regex rex = new System.Text.RegularExpressions.Regex(@"_\d{4}M"); if (rex.IsMatch(inputFileName)) { string oldResStr = rex.Match(inputFileName).Groups[0].Value; if (inArg.ProjectionIdentify == "GLL") { inputFileName = inputFileName.Replace(oldResStr, $"_{PrjFileName.GLLResolutionIdentify(inArg.ResolutionX)}"); } else { inputFileName = inputFileName.Replace(oldResStr, $"_{PrjFileName.ResolutionIdentify(inArg.ResolutionX)}"); } } string outXmlFilename = Path.Combine(inArg.OutputDir, inputFileName + ".xml"); OutputArg.WriteXml(outArg, outXmlFilename); } }