120 lines
2.8 KiB
JavaScript
120 lines
2.8 KiB
JavaScript
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
function requestNavigationRoute(rModel) {
|
|
var xhr = new XMLHttpRequest;
|
|
xhr.open("GET", "fallbackroute.json");
|
|
xhr.onreadystatechange = function () {
|
|
if (xhr.readyState === XMLHttpRequest.DONE) {
|
|
var a = JSON.parse(xhr.responseText);
|
|
var steps = a.route.steps;
|
|
|
|
for (var step in steps) {
|
|
var direction = steps[step].direction;
|
|
var instructionText = steps[step].instructionText;
|
|
var distanceToNextInstruction = steps[step].distanceToNextInstruction;
|
|
|
|
rModel.append({
|
|
icon: formatIconInstruction(direction),
|
|
shortInfo: formatShortInstruction(direction),
|
|
instruction: instructionText,
|
|
distance: qsTr("in") + " " + formatDistance(distanceToNextInstruction)
|
|
});
|
|
}
|
|
}
|
|
}
|
|
xhr.send();
|
|
}
|
|
|
|
function formatIconInstruction(direction)
|
|
{
|
|
switch (direction){
|
|
case 0:
|
|
return "";
|
|
case 1:
|
|
return "forward";
|
|
case 2:
|
|
return "bearright";
|
|
case 3:
|
|
case 4:
|
|
return "right";
|
|
case 5:
|
|
return "lightright";
|
|
case 6:
|
|
return "uturnright";
|
|
case 7:
|
|
return "uturleft";
|
|
case 8:
|
|
case 9:
|
|
return "left";
|
|
case 10:
|
|
return "lightleft";
|
|
case 11:
|
|
return "bearleft";
|
|
}
|
|
}
|
|
|
|
function formatShortInstruction(direction)
|
|
{
|
|
switch (direction){
|
|
case 0:
|
|
return "";
|
|
case 1:
|
|
return "Move forward";
|
|
case 2:
|
|
return "Bear right";
|
|
case 3:
|
|
return "Turn right";
|
|
case 4:
|
|
return "Turn hard right";
|
|
case 5:
|
|
return "Turn slightly right";
|
|
case 6:
|
|
return "Uturn right";
|
|
case 7:
|
|
return "Uturn left";
|
|
case 8:
|
|
return "Turn hard left";
|
|
case 9:
|
|
return "Turn left";
|
|
case 10:
|
|
return "Turn slightly left";
|
|
case 11:
|
|
return "Bear left";
|
|
}
|
|
}
|
|
|
|
function formatTime(sec)
|
|
{
|
|
var value = sec
|
|
var seconds = value % 60
|
|
value /= 60
|
|
value = (value > 1) ? Math.round(value) : 0
|
|
var minutes = value % 60
|
|
value /= 60
|
|
value = (value > 1) ? Math.round(value) : 0
|
|
var hours = value
|
|
if (hours > 0) value = hours + "h:"+ minutes + "m"
|
|
else value = minutes + "min"
|
|
return value
|
|
}
|
|
|
|
function formatDistance(meters)
|
|
{
|
|
var dist = Math.round(meters)
|
|
if (dist > 1000 ){
|
|
if (dist > 100000){
|
|
dist = Math.round(dist / 1000)
|
|
}
|
|
else{
|
|
dist = Math.round(dist / 100)
|
|
dist = dist / 10
|
|
}
|
|
dist = dist + " km"
|
|
}
|
|
else{
|
|
dist = dist + " m"
|
|
}
|
|
return dist
|
|
}
|