Files
sjy01-preprocessing/cmd/extract.go
nuknal 2b8d4f933d .
2024-10-11 11:25:16 +08:00

118 lines
2.7 KiB
Go

package cmd
import (
"fmt"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"starwiz.cn/sjy01/preprocessing/extract"
)
var (
dataId string
batch bool
output string
paramsXML string
)
var extractCmd = &cobra.Command{
Use: "extract",
Short: "Extract data from raw data files",
Long: `Extract data from raw data files`,
Run: func(cmd *cobra.Command, args []string) {
if paramsXML != "" {
params, err := extract.LoadL0Params(paramsXML)
if err != nil {
panic(err)
}
log.Println("input data:", params.InputData)
log.Println("output path:", params.OutputPath)
log.Println("temp path:", params.TempPath)
log.Println("data id:", params.DataId)
log.Println("satellite:", params.Satellite)
e := extract.NewExtractor(params)
defer e.Cleanup()
aos, err := e.ExtractAosData()
if err != nil {
panic(err)
}
dats, err := e.ExtractOriginalImageData(aos)
if err != nil {
panic(err)
}
if len(dats) == 0 {
panic(fmt.Errorf("no segment data found"))
}
for i, d := range dats {
e.SeprateAuxAndImgData(d, i)
}
if err := e.Report(); err != nil {
panic(err)
}
return
}
if batch {
ps := params()
for _, p := range ps {
e := extract.NewExtractor(p)
aos, _ := e.ExtractAosData()
dats, _ := e.ExtractOriginalImageData(aos)
for i, d := range dats {
e.SeprateAuxAndImgData(d, i)
}
e.Cleanup()
}
} else {
p := &extract.Params{
InputData: fmt.Sprintf("demo/data/%s.dat", dataId),
OutputPath: fmt.Sprintf("%s/%s", output, dataId),
TempPath: fmt.Sprintf("demo/temp/%s", dataId),
DataId: dataId,
Satellite: "SJY01",
}
e := extract.NewExtractor(p)
aos, _ := e.ExtractAosData()
dats, _ := e.ExtractOriginalImageData(aos)
for i, d := range dats {
e.SeprateAuxAndImgData(d, i)
}
e.Cleanup()
}
},
}
func init() {
rootCmd.AddCommand(extractCmd)
extractCmd.Flags().StringVarP(&dataId, "data-id", "d", "051622", "051622")
extractCmd.Flags().BoolVarP(&batch, "batch", "b", false, "true | false")
extractCmd.Flags().StringVarP(&output, "out", "o", "demo/output", "demo/output")
extractCmd.Flags().StringVarP(&paramsXML, "params", "x", "", "parameters file path")
}
func params() []*extract.Params {
var params []*extract.Params
datas := []string{"051622", "051712", "051721",
"051814", "051821", "051823",
"051921", "051922", "052022"}
for _, d := range datas {
params = append(params, &extract.Params{
InputData: fmt.Sprintf("demo/data/%s.dat", d),
OutputPath: fmt.Sprintf("%s/%s", output, d),
TempPath: fmt.Sprintf("demo/temp/%s", d),
DataId: d,
Satellite: "SJY01",
})
}
return params
}