-
Notifications
You must be signed in to change notification settings - Fork 1
/
convert.go
38 lines (30 loc) · 910 Bytes
/
convert.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package osmpbfparser
import (
"bytes"
"encoding/binary"
"github.com/thomersch/gosmparse"
"math"
"strconv"
)
// nodeToBytes convert node struct to bytes.
func nodeToBytes(n gosmparse.Node) (string, []byte) {
var buf bytes.Buffer
var latBytes = make([]byte, 8)
binary.BigEndian.PutUint64(latBytes, math.Float64bits(n.Lat))
buf.Write(latBytes)
var lngBytes = make([]byte, 8)
binary.BigEndian.PutUint64(lngBytes, math.Float64bits(n.Lon))
buf.Write(lngBytes)
return strconv.FormatInt(n.ID, 10), buf.Bytes()
}
// bytesToNode convert bytes to node struct.
func bytesToNode(b []byte) gosmparse.Node {
node := gosmparse.Node{}
var latBytes = append([]byte{}, b[0:8]...)
var lat = math.Float64frombits(binary.BigEndian.Uint64(latBytes))
node.Lat = lat
var lngBytes = append([]byte{}, b[8:16]...)
var lng = math.Float64frombits(binary.BigEndian.Uint64(lngBytes))
node.Lon = lng
return node
}