支持xml入参

This commit is contained in:
nuknal
2024-05-31 08:48:30 +08:00
parent 8f2b297a02
commit 4b005f324d
18 changed files with 147 additions and 17 deletions

View File

@@ -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(&paramsXML, "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
}

View File

@@ -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(&paramsXML, "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
}

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"math"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"image"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"gonum.org/v1/gonum/mat"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"image"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"bytes"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"testing"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"fmt"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"fmt"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"encoding/xml"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"bufio"

View File

@@ -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
}

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"image"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import "fmt"

View File

@@ -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

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"fmt"

View File

@@ -1,4 +1,4 @@
package imageproc
package producer
import (
"os"