ŠTART map2.js
init()
resizeCanvas()
devicePixelRatio
canvas.width / canvas.height
loadCityIndex()
↓
POIs.json
POIs.json načítané?
NIE
cityIndex = []
chyba načítania
VYHĽADÁVANIE MESTA / OBCE
citySearch input
↓
normalizeText()
↓
searchCities()
Nájde sa mesto?
NIE
„Mesto alebo obec
sa nenašla.“
ÁNO
showCitySuggestions()
selectCity()
↓
cityFile()
NAČÍTANIE MESTA
loadCity(file)
↓
fetch(street JSON)
cityData = await response.json()
extractStreets()
streets[]
Má mesto ulice?
NIE
„Mesto nemá
žiadne ulice“
getStreetBounds()
minLat / maxLat
minLon / maxLon
fitMapToCity()
centerLat
centerLon
zoom
VYTVORENIE GRAFU ULÍC
buildGraph()
graph.clear()
pre každý street
↓
getStreetNodes()
nodeToGeo()
↓
geoKey(lat, lon)
Existuje node v grafe?
NIE
graph.set()
vytvor node
ÁNO
použi existujúci
node
distanceGeo()
výpočet vzdialenosti
medzi node-mi
graph.edges.push()
obojsmerné spojenie
GRAPH
node
→
edge
→
node
HLAVNÉ VYKRESĽOVANIE
drawMap()
drawStreets()
geoToScreen()
LAT/LON
→
SCREEN X/Y
streetColor()
highway
→
farba
streetWidth()
highway
→
šírka
Canvas stroke()
drawStreetLabels()
drawRoute()
drawMarkers()
drawGPSPosition()
GPS SYSTÉM
toggleGPS()
startGPS()
↓
requestWakeLock()
navigator.geolocation
watchPosition()
GPS position
lat
·
lon
·
accuracy
·
speed
·
heading
accuracy > 100 m?
calculateHeading()
alebo
heading zo zariadenia
smoothHeading()
plynulé otáčanie šípky
gpsFollowMode?
updateGPSDisplay()
drawMap()
GPS FOLLOW / RUČNÝ POSUN
Používateľ začne
posúvať mapu?
ÁNO
gpsFollowMode = false
showGPSDragMessage()
pointermove
offsetX += ΔX
offsetY += ΔY
drawMap()
NAVIGÁCIA / TRASA
startRouteMode()
routeMode?
NIE
klik na mapu
nerobí trasu
1. klik
routeStart = A
2. klik
routeTarget = B
calculateRoute()
nearestGraphNode(A)
↓
najbližší graph node
nearestGraphNode(B)
↓
najbližší graph node
DIJKSTRA
dijkstra(
startKey,
targetKey
)
distance[]
previous[]
queue[]
startDistance = 0
Queue je prázdna?
current == target?
newDistance < distance?
ÁNO
distance.set()
previous.set()
queue.push()
Rekonštrukcia cesty
target
←
previous
←
previous
←
start
routePath[]
výpočet celkovej vzdialenosti
distanceGeo()
formatDistance()
m / km
drawRoute()
modrá trasa
drawMap()
WAKE LOCK
requestWakeLock()
navigator.wakeLock.request("screen")
visibilityState == visible?
releaseWakeLock()
pri stopGPS()
HLAVNÁ SLUČKA PROGRAMU
USER / GPS / SEARCH / ZOOM / PAN
zmena stavu
drawMap()
Canvas sa prekreslí
Ďalšia udalosť?
ZEM 11 NAVIGÁCIA BEŽÍ