1 回答

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上试试这个。
- 1 回答
- 0 关注
- 109 浏览
添加回答
举报