in location/linelocationreference.go [36:71]
func (llr LineLocationReference) Encode() ([]byte, error) {
bs := []byte{}
bs = append(bs, binary.Status2Bytes(3, 1)...)
firstPoint := llr.Points[0]
bs = append(bs, binary.Coords2Bytes(firstPoint.Lon, firstPoint.Lat)...)
bs = append(bs, binary.Attributes2Bytes(firstPoint.Fow, firstPoint.Frc, firstPoint.Bear, firstPoint.Lfrcnp, 0)...)
bs = append(bs, binary.Dnp2Bytes(firstPoint.Dnp)...)
prevPoint := firstPoint
for i := 1; i < len(llr.Points)-1; i++ {
point := llr.Points[i]
bs = append(bs, binary.RelativeCoords2Bytes(point.Lon, point.Lat, prevPoint.Lon, prevPoint.Lat)...)
bs = append(bs, binary.Attributes2Bytes(point.Fow, point.Frc, point.Bear, point.Lfrcnp, 0)...)
bs = append(bs, binary.Dnp2Bytes(point.Dnp)...)
prevPoint = point
}
lastPoint := llr.Points[len(llr.Points)-1]
bs = append(bs, binary.RelativeCoords2Bytes(lastPoint.Lon, lastPoint.Lat, prevPoint.Lon, prevPoint.Lat)...)
pOffsetFlag := 0
nOffsetFlag := 0
pOffsetBytes := []byte{}
nOffsetBytes := []byte{}
if llr.Poffs > 0 {
pOffsetFlag = 2
pOffsetBytes = binary.Offset2Bytes(llr.Poffs)
}
if llr.Noffs > 0 {
nOffsetFlag = 1
nOffsetBytes = binary.Offset2Bytes(llr.Noffs)
}
offsetFlags := nOffsetFlag + pOffsetFlag
bs = append(bs, binary.Attributes2Bytes(lastPoint.Fow, lastPoint.Frc, lastPoint.Bear, offsetFlags, 0)...)
bs = append(bs, pOffsetBytes...)
bs = append(bs, nOffsetBytes...)
return bs, nil
}