package extract
import (
"bytes"
"html"
"io"
"os"
"text/template"
)
type BSQWriter struct {
filepath string
fio *os.File
w io.Writer
content *EnviHdr
}
var HDRTemplate = `ENVI
description = {
File Imported into ENVI.}
samples = {{.Samples}}
lines = {{.Lines}}
bands = {{.Bands}}
header offset = 0
file type = ENVI Standard
data type = 12
interleave = bsq
sensor type = Unknown
byte order = 0
wavelength units = Unknown`
// https://www.nv5geospatialsoftware.com/docs/ENVIHeaderFiles.html
type EnviHdr struct {
Samples int // samples (pixels) each line
Lines int
Bands int
}
func (h *EnviHdr) String() string {
var t *template.Template
t = template.New("template")
t, err := t.Parse(HDRTemplate)
if err != nil {
return ""
}
buf := new(bytes.Buffer)
t.Execute(buf, h)
buf = bytes.NewBufferString(html.UnescapeString(buf.String()))
return buf.String()
}
func NewBSQWriter(filepath string, content *EnviHdr) (*BSQWriter, error) {
fio, err := os.Create(filepath)
if err != nil {
return nil, err
}
w := fio
return &BSQWriter{filepath, fio, w, content}, nil
}
func (w *BSQWriter) Write(data []byte) (int, error) {
return w.w.Write(data)
}
func (w *BSQWriter) Close() error {
return w.fio.Close()
}