package main import ( "os" "path/filepath" "strings" "github.com/airbusgeo/godal" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "starwiz.cn/sjy01/image-proc/pkg/config" producer "starwiz.cn/sjy01/image-proc/pkg/producer" ) var ( params producer.Params saveStrip bool ) var procCmd = &cobra.Command{ Use: "proc", Short: "process images", Long: `process images`, Run: func(cmd *cobra.Command, args []string) { config.GViper = config.InitViper(configFile) logrus.SetLevel(config.GCONFIG.LogLevel) reg := producer.NewRegistrator(producer.DownSampled) reg.Params = initParams() if err := reg.LoadAuxData(); err != nil { logrus.Fatal(err) } reg.AuxPrint() if err := reg.LoadMssRaw(); err != nil { logrus.Fatal(err) } if err := reg.LoadPanRaw(); err != nil { logrus.Fatal(err) } godal.RegisterAll() os.MkdirAll(params.OutputDir, 0755) reg.DoRRC() if err := reg.DoPhaseCorrelation(); err != nil { logrus.Fatal(err) } reg.DoCoRegistration() if params.SaveRegisteredMssRaw { registerdMSSRAW := filepath.Join( params.OutputDir, strings.TrimSuffix(filepath.Base(params.MssRawFile), filepath.Ext(params.MssRawFile))+"_registered.RAW", ) reg.SaveRegisteredMssToRaw(registerdMSSRAW) } panScenes, mssScenes, err := reg.SubScenes() if err != nil { logrus.Error(err) } reg.SaveScenesToTiff(panScenes, mssScenes) if saveStrip { reg.SaveOriginalPanToGDALGTiff(reg.Params.PanTiffFile) reg.SaveRegisteredMssToGDALGTiff(reg.Params.MssTiffFile) } if reg.Params.DoPansharpen { reg.DoScenePansharpen(panScenes, mssScenes) } reg.Report() reg.Clean() }, } func init() { rootCmd.AddCommand(procCmd) procCmd.Flags().StringVarP(¶ms.PanRawFile, "pan", "p", "", "PAN image raw file path") procCmd.Flags().StringVarP(¶ms.MssRawFile, "mss", "m", "", "MSS image raw file path") procCmd.Flags().StringVarP(¶ms.AuxRawFile, "aux", "a", "", "AUX image raw file path") procCmd.Flags().BoolVarP(¶ms.SaveRegisteredMssRaw, "srmss", "s", false, "save registered MSS image raw file") procCmd.Flags().BoolVarP(¶ms.DoPansharpen, "fus", "", false, "pansharpen using IHS") procCmd.Flags().StringVarP(¶ms.OutputDir, "output-dir", "o", "data", "output directory") procCmd.Flags().BoolVarP(¶ms.SubScenes, "sub-scenes", "", false, "process sub-scenes") procCmd.Flags().BoolVarP(&saveStrip, "save-strip", "", false, "save original and registered images as GDAL GTiff") procCmd.Flags().StringVarP(¶msXML, "params", "x", "", "params xml file path") } func initParams() producer.Params { taskParams := params if paramsXML != "" { task, err := producer.ParseXMLImageTask(paramsXML) if err != nil { logrus.Fatal(err) } taskParams.PanRawFile = task.InputFileList.PanData taskParams.MssRawFile = task.InputFileList.MssData taskParams.AuxRawFile = task.InputFileList.AuxData taskParams.DoPansharpen = task.Params.DoPansharpen taskParams.OutputDir = task.Params.OutputPath taskParams.ReportFile = task.Params.ReportFile taskParams.DataId = task.Params.DataID } taskParams.MssTiffFile = filepath.Join(taskParams.OutputDir, strings.TrimSuffix(filepath.Base(taskParams.MssRawFile), filepath.Ext(taskParams.MssRawFile))+".tiff") taskParams.PanTiffFile = filepath.Join(taskParams.OutputDir, strings.TrimSuffix(filepath.Base(taskParams.PanRawFile), filepath.Ext(taskParams.PanRawFile))+".tiff") if taskParams.ReportFile == "" { id := strings.TrimSuffix(filepath.Base(taskParams.PanRawFile), filepath.Ext(taskParams.PanRawFile)) id = strings.Replace(id, "PAN", "PMS", 1) taskParams.ReportFile = filepath.Join(taskParams.OutputDir, id+"_report.xml") } return taskParams }