aux
This commit is contained in:
@@ -142,6 +142,9 @@ func (e *Extractor) SeprateAuxAndImgData(dataFile string, segmentIndex int) erro
|
||||
var afh AuxFrameHead
|
||||
|
||||
msdata := make([][]byte, 4)
|
||||
var header []byte
|
||||
var ebAux []byte
|
||||
var platAux []byte
|
||||
|
||||
for i := 0; i < dataLen; {
|
||||
if i+4 > dataLen {
|
||||
@@ -182,11 +185,17 @@ func (e *Extractor) SeprateAuxAndImgData(dataFile string, segmentIndex int) erro
|
||||
break
|
||||
}
|
||||
|
||||
auxTime := binary.BigEndian.Uint32(data[i+32 : i+36])
|
||||
if math.Abs(float64(auxTime)-float64(afh.TimeSec)) < 30 {
|
||||
header = append(header, data[i:i+24]...)
|
||||
}
|
||||
// 存储辅助数据到临时文件
|
||||
dataIndex := i + 24
|
||||
lw.ws[EB_AUX].w.Write(data[dataIndex : dataIndex+8]) // 8字节焦面电箱辅助数据
|
||||
// lw.ws[EB_AUX].w.Write(data[dataIndex : dataIndex+8]) // 8字节焦面电箱辅助数据
|
||||
ebAux = append(ebAux, data[dataIndex:dataIndex+8]...)
|
||||
dataIndex += 8
|
||||
lw.ws[PLAT_AUX].w.Write(data[dataIndex : dataIndex+32]) // 32字节中心机辅助数据
|
||||
// lw.ws[PLAT_AUX].w.Write(data[dataIndex : dataIndex+32]) // 32字节中心机辅助数据
|
||||
platAux = append(platAux, data[dataIndex:dataIndex+32]...)
|
||||
dataIndex += 32
|
||||
|
||||
// 存储图像数据到临时文件 - 以 ENVI BSQ 格式存储,同时提供 HDR 描述文件
|
||||
@@ -221,15 +230,41 @@ func (e *Extractor) SeprateAuxAndImgData(dataFile string, segmentIndex int) erro
|
||||
i = dataIndex // 完成一行数据解析
|
||||
}
|
||||
|
||||
var bands = 0
|
||||
for i := 0; i < 4; i++ {
|
||||
if len(msdata[i]) > 0 {
|
||||
log.Println("write mss data of band B", i+1)
|
||||
_, err := write16bPixelLittleEndian(lw.ws[MSS_RAW].w, msdata[i])
|
||||
if err != nil {
|
||||
log.Error("write mss data error:", err.Error())
|
||||
}
|
||||
bands += 1
|
||||
// var bands = 0
|
||||
// for i := 0; i < 4; i++ {
|
||||
// if len(msdata[i]) > 0 {
|
||||
// log.Println("write mss data of band B", i+1)
|
||||
// _, err := write16bPixelLittleEndian(lw.ws[MSS_RAW].w, msdata[i])
|
||||
// if err != nil {
|
||||
// log.Error("write mss data error:", err.Error())
|
||||
// }
|
||||
// bands += 1
|
||||
// }
|
||||
// }
|
||||
|
||||
if len(msdata[0]) != len(msdata[1]) || len(msdata[2]) != len(msdata[3]) {
|
||||
log.Error("mss data of bands B1-B4 are not equal")
|
||||
return errors.New("mss data of bands B1-B4 are not equal")
|
||||
}
|
||||
|
||||
mssRowLen := 1192 * 4
|
||||
for i := 0; i < len(msdata[0]); i += mssRowLen {
|
||||
var err error
|
||||
_, err = write16bPixelLittleEndian(lw.ws[MSS_RAW].w, msdata[0][i:i+mssRowLen])
|
||||
if err != nil {
|
||||
log.Error("write mss 1 data error:", err.Error())
|
||||
}
|
||||
_, err = write16bPixelLittleEndian(lw.ws[MSS_RAW].w, msdata[1][i:i+mssRowLen])
|
||||
if err != nil {
|
||||
log.Error("write mss 2 data error:", err.Error())
|
||||
}
|
||||
_, err = write16bPixelLittleEndian(lw.ws[MSS_RAW].w, msdata[2][i:i+mssRowLen])
|
||||
if err != nil {
|
||||
log.Error("write mss 3 data error:", err.Error())
|
||||
}
|
||||
_, err = write16bPixelLittleEndian(lw.ws[MSS_RAW].w, msdata[3][i:i+mssRowLen])
|
||||
if err != nil {
|
||||
log.Error("write mss 4 data error:", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,16 +273,29 @@ func (e *Extractor) SeprateAuxAndImgData(dataFile string, segmentIndex int) erro
|
||||
lw.ws[PAN_HDR].w.Write([]byte(panEnviHdr.String()))
|
||||
|
||||
mssEnviHdr.Lines = mssEnviHdr.Lines / 4 // 多光谱波段分别在 4 行中传输
|
||||
mssEnviHdr.Samples = 2384
|
||||
mssEnviHdr.Bands = bands
|
||||
mssEnviHdr.Samples = 2384 * 4
|
||||
mssEnviHdr.Bands = 1
|
||||
lw.ws[MSS_HDR].w.Write([]byte(mssEnviHdr.String()))
|
||||
|
||||
// 帧头+辅助数据
|
||||
if len(header)/24 < len(ebAux)/128 || len(ebAux)/128 != len(platAux)/512 {
|
||||
fmt.Println("aux data length:", len(header)/24, len(ebAux)/128, len(platAux)/512)
|
||||
return errors.New("aux data length is not equal")
|
||||
}
|
||||
|
||||
auxRows := len(header) / 24
|
||||
for i := 0; i < auxRows; i++ {
|
||||
lw.ws[AUX].w.Write(header[i*24 : (i+1)*24])
|
||||
lw.ws[AUX].w.Write(ebAux[i*128 : (i+1)*128])
|
||||
lw.ws[AUX].w.Write(platAux[i*512 : (i+1)*512])
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *Extractor) quanlityAnalysis(data []byte) {
|
||||
// 数据质量分析
|
||||
fimg, _ := os.Create("demo/temp/" + e.params.DataId + "_aux_img.txt")
|
||||
fimg, _ := os.Create("demo/temp/" + e.params.DataId + "/aux.txt")
|
||||
defer fimg.Close()
|
||||
fimg.WriteString("字节数 帧头流水号 文件号 帧头时间 中心辅助数据前4字节(行33-36)\n")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user