func()

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
}