为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
largeQ 2022-06-01 11:29:18
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]有人知道如何将其转换为坐标吗?
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

坐标存储在切片的末尾,两者都有 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 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上试试这个。


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号