diff --git a/cmd/fus.go b/cmd/fus.go index 7828a7a..f06e662 100644 --- a/cmd/fus.go +++ b/cmd/fus.go @@ -19,6 +19,8 @@ var fusCmd = &cobra.Command{ Use: "fus", Short: "use GDAL_Pansharpen to merge PAN and MSS images", Run: func(cmd *cobra.Command, args []string) { + initFUSParams() + fusedTiff := filepath.Base(mssImage) fusedTiff = strings.Replace(fusedTiff, "MSS", "FUS", -1) err := producer.GDALPansharpen(panImage, mssImage, filepath.Join(outputDir, fusedTiff)) @@ -36,3 +38,18 @@ func init() { fusCmd.Flags().StringVarP(&outputDir, "output", "o", "", "path to the output directory") fusCmd.Flags().StringVarP(¶msXML, "params", "x", "", "path to the XML file containing parameters for GDAL_Pansharpen") } + +func initFUSParams() { + if paramsXML == "" { + return + } + + task, err := producer.ParseXMLFUSTask(paramsXML) + if err != nil { + logrus.Fatal(err) + } + + panImage = task.InputFileList.PanTiff + mssImage = task.InputFileList.MssTiff + outputDir = task.Params.OutputPath +} diff --git a/cmd/proc.go b/cmd/proc.go index 260f36e..0c5394d 100644 --- a/cmd/proc.go +++ b/cmd/proc.go @@ -25,6 +25,8 @@ var procCmd = &cobra.Command{ config.GViper = config.InitViper(configFile) logrus.SetLevel(config.GCONFIG.LogLevel) + initParams() + reg := producer.NewRegistrator(producer.DownSampled) reg.Params = params reg.Params.MssTiffFile = filepath.Join(params.OutputDir, strings.TrimSuffix(filepath.Base(params.MssRawFile), filepath.Ext(params.MssRawFile))+".tiff") @@ -92,3 +94,29 @@ func init() { 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 + taskParams.MssTiffFile = filepath.Join(params.OutputDir, strings.TrimSuffix(filepath.Base(params.MssRawFile), + filepath.Ext(params.MssRawFile))+".tiff") + taskParams.PanTiffFile = filepath.Join(params.OutputDir, + strings.TrimSuffix(filepath.Base(params.PanRawFile), + filepath.Ext(params.PanRawFile))+".tiff") + taskParams.FusTIffFile = strings.Replace(taskParams.MssTiffFile, ".tiff", "_FUS.tiff", 1) + + if paramsXML == "" { + return taskParams + } + + 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 + return taskParams +} diff --git a/pkg/producer/aux.go b/pkg/producer/aux.go index 8b422d1..d448fd9 100644 --- a/pkg/producer/aux.go +++ b/pkg/producer/aux.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "math" diff --git a/pkg/producer/filter.go b/pkg/producer/filter.go index 28b2c5b..c370d0f 100644 --- a/pkg/producer/filter.go +++ b/pkg/producer/filter.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "image" diff --git a/pkg/producer/fit.go b/pkg/producer/fit.go index 8533249..c9908fe 100644 --- a/pkg/producer/fit.go +++ b/pkg/producer/fit.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "gonum.org/v1/gonum/mat" diff --git a/pkg/producer/gdal_pansharpen.go b/pkg/producer/gdal_pansharpen.go index aa6bba9..b5d6a03 100644 --- a/pkg/producer/gdal_pansharpen.go +++ b/pkg/producer/gdal_pansharpen.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "image" diff --git a/pkg/producer/hdr.go b/pkg/producer/hdr.go index c2b1ddc..a604535 100644 --- a/pkg/producer/hdr.go +++ b/pkg/producer/hdr.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "bytes" diff --git a/pkg/producer/image_proc_test.go b/pkg/producer/image_proc_test.go index 5efbe62..e34fc21 100644 --- a/pkg/producer/image_proc_test.go +++ b/pkg/producer/image_proc_test.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "testing" diff --git a/pkg/producer/image_registration.go b/pkg/producer/image_registration.go index db8cfbb..5be19b3 100644 --- a/pkg/producer/image_registration.go +++ b/pkg/producer/image_registration.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "fmt" diff --git a/pkg/producer/jpg.go b/pkg/producer/jpg.go index 0106086..1b1f08b 100644 --- a/pkg/producer/jpg.go +++ b/pkg/producer/jpg.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "fmt" diff --git a/pkg/producer/meta.go b/pkg/producer/meta.go index 4435453..bf61b7b 100644 --- a/pkg/producer/meta.go +++ b/pkg/producer/meta.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "encoding/xml" diff --git a/pkg/producer/output.go b/pkg/producer/output.go index 1b733e4..d92f2a9 100644 --- a/pkg/producer/output.go +++ b/pkg/producer/output.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "bufio" diff --git a/pkg/producer/params.go b/pkg/producer/params.go index 2417d58..30315d0 100644 --- a/pkg/producer/params.go +++ b/pkg/producer/params.go @@ -1,4 +1,9 @@ -package imageproc +package producer + +import ( + "encoding/xml" + "os" +) type Params struct { PanRawFile string @@ -12,3 +17,83 @@ type Params struct { FusTIffFile string SubScenes bool } + +type XMLImageTask struct { + XMLName xml.Name `xml:"task"` + Name string `xml:"name,attr"` + ID string `xml:"id,attr"` + Script string `xml:"script"` + InputFileList XMLInputFileList `xml:"inputfilelist"` + Params XMLParams `xml:"params"` +} + +type XMLInputFileList struct { + PanData string `xml:"panData"` + MssData string `xml:"mssData"` + AuxData string `xml:"auxData"` +} + +type XMLParams struct { + Satellite string `xml:"satellite"` + Sensor string `xml:"sensor"` + ProductLevel string `xml:"productLevel"` + ProductID string `xml:"productId"` + TempPath string `xml:"tempPath"` + OutputPath string `xml:"outputPath"` + DeleteTempFlag int `xml:"deleteTempFlag"` + ReportFile string `xml:"reportFile"` + DataID string `xml:"dataId"` + DoPansharpen bool `xml:"doPansharpen"` +} + +func ParseXMLImageTask(xmlFile string) (*XMLImageTask, error) { + var task XMLImageTask + data, err := os.ReadFile(xmlFile) + if err != nil { + return nil, err + } + err = xml.Unmarshal(data, &task) + if err != nil { + return nil, err + } + return &task, nil +} + +type XMLFUSTask struct { + XMLName xml.Name `xml:"task"` + Name string `xml:"name,attr"` + ID string `xml:"id,attr"` + Script string `xml:"script"` + InputFileList XMLFUSInputFileList `xml:"inputfilelist"` + Params XMLFUSParams `xml:"params"` +} + +type XMLFUSInputFileList struct { + PanTiff string `xml:"panTiff"` + MssTiff string `xml:"mssTiff"` +} + +type XMLFUSParams struct { + Satellite string `xml:"satellite"` + Sensor string `xml:"sensor"` + ProductLevel string `xml:"productLevel"` + ProductID string `xml:"productId"` + TempPath string `xml:"tempPath"` + OutputPath string `xml:"outputPath"` + DeleteTempFlag int `xml:"deleteTempFlag"` + ReportFile string `xml:"reportFile"` + DataID string `xml:"dataId"` +} + +func ParseXMLFUSTask(xmlFile string) (*XMLFUSTask, error) { + var task XMLFUSTask + data, err := os.ReadFile(xmlFile) + if err != nil { + return nil, err + } + err = xml.Unmarshal(data, &task) + if err != nil { + return nil, err + } + return &task, nil +} diff --git a/pkg/producer/phase_correlation.go b/pkg/producer/phase_correlation.go index 797fd44..d43e317 100644 --- a/pkg/producer/phase_correlation.go +++ b/pkg/producer/phase_correlation.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "image" diff --git a/pkg/producer/proj.go b/pkg/producer/proj.go index ff3104f..9d42538 100644 --- a/pkg/producer/proj.go +++ b/pkg/producer/proj.go @@ -1,4 +1,4 @@ -package imageproc +package producer import "fmt" diff --git a/pkg/producer/report.go b/pkg/producer/report.go index 5151488..4cbf4d4 100644 --- a/pkg/producer/report.go +++ b/pkg/producer/report.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "encoding/xml" @@ -11,7 +11,7 @@ type Report struct { Satellite string `xml:"satellite,attr"` Sensor string `xml:"sensor,attr"` ProductLevel string `xml:"productLevel,attr"` - Scenes []ReportScene `xml:"scene"` + Scenes []ReportScene `xml:"scenes>scene"` } // Scene represents each scene in the report diff --git a/pkg/producer/scenes.go b/pkg/producer/scenes.go index 0414483..03f8474 100644 --- a/pkg/producer/scenes.go +++ b/pkg/producer/scenes.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "fmt" diff --git a/pkg/producer/util.go b/pkg/producer/util.go index f5e25bc..4516965 100644 --- a/pkg/producer/util.go +++ b/pkg/producer/util.go @@ -1,4 +1,4 @@ -package imageproc +package producer import ( "os"