-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroute.go
78 lines (66 loc) · 2.06 KB
/
route.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package gpsgen
import (
"github.com/mmadfox/go-gpsgen/geo"
"github.com/mmadfox/go-gpsgen/navigator"
"github.com/mmadfox/go-gpsgen/random"
)
// Route level constants define different levels of route complexity.
const (
RouteLevelXS = 1
RouteLevelS = 10
RouteLevelM = 60
RouteLevelL = 120
RouteLevelXL = 300
RouteLevelXXL = 600
)
// RandomRoute generates a random route with specified parameters.
// The function generates tracks within the route, using a specified number of tracks and complexity level.
// The generated route is centered around the provided latitude and longitude.
// Returns a random route with tracks, or nil if an error occurs during track creation.
func RandomRoute(lon, lat float64, numTrack int, level int) *navigator.Route {
if numTrack < 0 {
numTrack = 1
}
if level < RouteLevelS {
level = RouteLevelS
}
if level > RouteLevelXXL {
level = RouteLevelXXL
}
route := navigator.NewRoute()
routeName := "Route-" + random.String(8)
route.ChangeName(routeName)
for i := 0; i < numTrack; i++ {
rawPoints := random.Polygon(16, float64(level))
points := geo.NormalizeCoordinates(lat, lon, rawPoints)
track, _ := navigator.NewTrack(points)
trackName := "Track-" + random.String(8)
track.ChangeName(trackName)
route.AddTrack(track)
}
return route
}
// RandomRouteForNewYork generates a random route for New York.
func RandomRouteForNewYork() *navigator.Route {
lon := -74.006
lat := 40.7128
numTracks := 3
level := RouteLevelL
return RandomRoute(lon, lat, numTracks, level)
}
// RandomRouteForMoscow generates a random route for Moscow.
func RandomRouteForMoscow() *navigator.Route {
lon := 37.621096697276414
lat := 55.753437064373315
numTracks := 3
level := RouteLevelL
return RandomRoute(lon, lat, numTracks, level)
}
// RandomRouteForParis generates a random route for Paris.
func RandomRouteForParis() *navigator.Route {
lon := 2.349892200521907
lat := 48.855323829674006
numTracks := 3 // Number of tracks in the route
level := RouteLevelL // Level of the route
return RandomRoute(lon, lat, numTracks, level)
}