-
Notifications
You must be signed in to change notification settings - Fork 130
Expand file tree
/
Copy pathmxn.googlev3.directions.js
More file actions
104 lines (86 loc) · 3.01 KB
/
mxn.googlev3.directions.js
File metadata and controls
104 lines (86 loc) · 3.01 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
mxn.register('googlev3', {
Directions: {
init: function() {
this.routers[this.api] = new google.maps.DirectionsService();
},
getRouteFromQuery: function(origin, destination) {
var self = this;
var router = this.routers[this.api];
var request = {
origin: origin,
destination: destination,
travelMode: google.maps.TravelMode.DRIVING
}
router.route(request, function(response) {
if (!response) {
self.error_callback("Unknown error occurred");
} else if (response.status != "OK") {
self.error_callback(response.status);
} else if (response.routes.length < 1) {
self.error_callback("No routes returned");
} else {
self.getRoute_callback(response);
}
});
},
getRouteFromWayPoints: function(wayPoints) {
var self = this;
var router = this.routers[this.api];
var points = [];
for (var i = 1; i < wayPoints.length-1; i++) {
points.push({
location: wayPoints[i].toProprietary(this.api).toUrlValue(6),
stopover: false
});
}
var request = {
origin: wayPoints[0].toProprietary(this.api).toUrlValue(6),
destination: wayPoints[wayPoints.length-1].toProprietary(this.api).toUrlValue(6),
travelMode: google.maps.TravelMode.DRIVING,
waypoints: points
}
router.route(request, function(response) {
if (!response) {
self.error_callback("Unknown error occurred");
} else if (response.status != "OK") {
self.error_callback(response.status);
} else if (response.routes.length < 1) {
self.error_callback("No routes returned");
} else {
self.getRoute_callback(response.routes[0]);
}
});
},
getRoute_callback: function(route) {
// Polyline
var gPoints = route.overview_path;
var points = [];
for (var i = 0; i < gPoints.length; i++) {
var point = new mxn.LatLonPoint();
point.fromProprietary(this.api, gPoints[i]);
points.push(point);
}
var polyline = new mxn.Polyline(points);
// Other bits
var directions = [];
var distance = 0;
var duration = 0;
for (var i = 0; i < route.legs.length; i++) {
var leg = route.legs[i];
distance += leg.distance.value;
duration += leg.duration.value;
for (var j = 0; j < leg.steps.length; j++) {
var step = leg.steps[j];
directions[directions.length] = step.instructions;
}
}
var response = {
polyline: polyline,
directions: directions,
distance: distance,
duration: duration
};
this.callback(response);
}
}
});