gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 20:22:23 24 4
gpt4 key购买 nike

CurrentCoordinates  []uint8 `json:"current_coordinates"`
type Points struct {
Lat float64 `json:"lat"`
Lng float64 `json:"lng"`
}

DB 列的数据为:
积分(6.887035 79.883757)

从数据库我把它放到 []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]

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

最佳答案

坐标存储在 slice 的末尾,两者都有 8 个字节,它们是 IEEE 754 double-precision 的小端编码字节。浮点数的表示。

您可以使用 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() 从您的 slice 中读取,并使用 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 float64
if 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 上试试这个.

关于go - 如何将数据库中的点坐标转换为点结构 GoLang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61403914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com