如何将数据库中的点坐标转换为点结构 GoLang

CurrentCoordinates  []uint8 `json:"current_coordinates"`

type Points struct {

    Lat     float64    `json:"lat"`

    Lng     float64    `json:"lng"`

}

DB 列的数据为: POINT(6.887035 79.883757)


从DB我把它输入[]uint8,然后结果是:[0 0 0 0 1 1 0 0 0 35 161 45 231 82 140 27 64 28 39 133 121 143 248 83 64]


有人知道如何将其转换为坐标吗?


largeQ
浏览 110回答 1
1回答

qq_笑_17

坐标存储在切片的末尾,两者都有 8 个字节,它们是浮点数的IEEE 754 双精度表示的小端编码字节。您可以使用该encoding/binary包来获取坐标的浮点数据作为uint64,并且您可以使用math.Float64frombits()该数据“转换”为float64类型。这是您可以解码它们的方法:data := []byte{0, 0, 0, 0, 1, 1, 0, 0, 0, 35, 161, 45, 231, 82, 140, 27, 64, 28, 39, 133, 121, 143, 248, 83, 64}d := binary.LittleEndian.Uint64(data[9:])x := math.Float64frombits(d)d = binary.LittleEndian.Uint64(data[17:])y := math.Float64frombits(d)fmt.Println(x, y)这将输出(在Go Playground上尝试):6.887035 79.883757您的数据的开头可能是 SRID(空间参考标识符)和/或某种搜索距离/精度,取决于您使用的数据库。io.Reader或者,您可以使用从切片创建读数bytes.NewReader(),并使用以下binary.Read()功能:data := []byte{0, 0, 0, 0, 1, 1, 0, 0, 0, 35, 161, 45, 231, 82, 140, 27, 64, 28, 39, 133, 121, 143, 248, 83, 64}r := bytes.NewReader(data[9:])var x, y float64if err := binary.Read(r, binary.LittleEndian, &x); err != nil {    panic(err)}if err := binary.Read(r, binary.LittleEndian, &y); err != nil {    panic(err)}fmt.Println(x, y)这将输出相同的内容。在Go Playground上试试这个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go