United Airlines UA470 (UAL470) DEN to PSP, MCO to SFO, SFO to LAX (2024)

19. Apr 2024

Landed
The flight has landed. It arrived 6 hours ago (33min early).

MCO

Orlando
TERMINAL: B
GATE: 46

->

5h 28m
3,933km / 2,428mi

SFO

San Francisco
TERMINAL: 3
GATE: E8

19 Apr 06:36EDT
19 Apr 06:30
10:36 UTC
6min late

19 Apr 09:04 PDT
19 Apr 09:38
16:04 UTC
33min early
" : ""}United Airlines UA470 (UAL470) DEN to PSP, MCO to SFO, SFO to LAX (4)`; if (activeHex in marker) { liveMap.removeLayer(marker[activeHex]); } const m = L.marker(activeMarker.getLatLng(), { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: activeHex, opacity: lp[7] != '' ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[activeHex] = m; document.getElementById(`mi-${activeHex}`).style.transform = `rotate(${lp[2]}deg)`; activeMarker = null; } activeHex = null; liveTrack = null; liveMarker = null; estTrack = null; document.getElementById('liveMapContainer').style.display = 'none';} /** * Recalculates the new position of a marker based on the time elapsed and its previous state. * @param {Object} liveMap */async function updateCalc(liveMap) { if (recalcInProg || liveMap.getZoom() < 6) { return; } recalcInProg = true; for (const [key, prevPos] of Object.entries(lastPos)) { if (key in marker && prevPos[3] >= 50 && !prevPos[6]) { const speed = prevPos[3] || 0; const interval = Date.now() - prevPos[4]; const dist = speed * interval / 1000 / 3600 * 1852; if (dist < 20) { continue; } // calculate next position const lat1 = toRad(prevPos[0]); const lon1 = toRad(prevPos[1]); const brng = toRad(prevPos[2]); const lat2 = Math.asin(sin(lat1) * cos(dist / r_earth) + cos(lat1) * sin(dist / r_earth) * cos(brng)); const lon2 = lon1 + Math.atan2(sin(brng) * sin(dist / r_earth) * cos(lat1), cos(dist / r_earth) - sin(lat1) * sin(lat2)); const lat2d = toDeg(lat2); const lon2d = toDeg(lon2); lastPos[key] = [lat2d, lon2d, prevPos[2], prevPos[3], Date.now(), prevPos[5], prevPos[6], prevPos[7]]; marker[key].setLatLng([lat2d, lon2d]); if (liveTrack && activeMarker == key) { const l = liveTrack.getLatLngs(); l.push(L.latLng(lat2d, lon2d, prevPos[5])); try { liveTrack.setLatLngs(l); } catch (e) { /* Catch error silently. */ } if (activeDest) { const tn = L.latLng(lat2d, lon2d); liveMap.removeLayer(estTrack); const arcOptions = { color: "lightgray", noClip: true, vertices: 100 }; estTrack = t.lng < tn.lng ? L.Polyline.Arc(activeDest, tn, arcOptions) : L.Polyline.Arc(tn, activeDest, arcOptions); estTrack.addTo(liveMap); tracks.push(estTrack); } } } } recalcInProg = false;}/** * Fetches data from a specific URL, handles errors and returns the JSON response. * @param {string} url */async function getData(url) { const response = await fetch(url, { headers: { Authorization: auth_token } }); if (!response.ok) { handleFetchErrors(response); return null; } if (sf === "") { document.getElementById("liveUpdErr").style.display = 'none'; document.getElementById("liveUpdNotFound").style.display = 'none'; } return response.json();}/** * Handles errors during fetch call * @param {Object} response */function handleFetchErrors(response) { if (sf !== "") return; const liveUpdErr = document.getElementById("liveUpdErr"); const liveUpdNotFound = document.getElementById("liveUpdNotFound"); const liveMapContainer = document.getElementById("liveMapContainer"); if (response.status !== 404) { refreshsActive = false; liveUpdNotFound.style.display = 'none'; liveUpdErr.style.display = 'block'; liveMapContainer.style.display = 'none'; document.getElementById("liveUpdErrCode").innerText = response.status; } else { liveUpdErr.style.display = 'none'; liveMapContainer.style.display = 'none'; liveUpdNotFound.style.display = 'block'; }}async function updateMap(liveMap, fromZoom, clickHex) { if (documentIsHidden()) return; const bounds = liveMap.getBounds(); const url = constructURL(bounds, liveMap.getZoom(), clickHex); if (updateInProgressOrTooSoon(fromZoom)) return; recalcInProg = true; lastUpdate = Date.now(); updateInProg = true; const ld = await getData(url); if (!ld) { updateInProg = false; return; } processMapData(liveMap, ld, fromZoom, clickHex);}function documentIsHidden() { return typeof document.hidden !== "undefined" && document.hidden;}function constructURL(bounds, zoom, clickHex) { const widthText = screenWidth > 1000 ? "large" : "small"; const hexIncl = clickHex ? `?incl=${clickHex}&` : "?"; return `/en/live/map/${Math.floor(bounds['_northEast'].lat * 1e5)}/${Math.floor(bounds['_southWest'].lat * 1e5)}/` + `${Math.floor(bounds['_southWest'].lng * 1e5)}/${Math.floor(bounds['_northEast'].lng * 1e5)}/${zoom}/${widthText}` + hexIncl + `${Math.floor(Date.now() / 5000)}`;}function updateInProgressOrTooSoon(fromZoom) { if (updateInProg) { return true; } const freq = fromZoom ? minZoomFreq : minRefreshFreq; return Date.now() - lastUpdate < freq;}function processMapData(liveMap, ld, fromZoom, clickHex) { newMarker = {}; arcs = []; curArc = []; arcCol = ""; prevCoord = []; document.getElementById("nr_flights_disp").innerText = ld["f"]; document.getElementById("nr_flights_tot").innerText = ld["t"]; const st = screenWidth / ld["f"] > 5; const redraw = st !== hadTitles; for (const entr in ld["m"]) { const e = ld["m"][entr]; handleMarker(liveMap, e, redraw, st); } hadTitles = st; removeUnusedMarkers(liveMap); updateInProg = false; recalcInProg = false; firstUpd = false; if (clickHex) { marker[clickHex].fire('click'); }}function handleMarker(liveMap, e, redraw, st) { if (e[4] == null || e[5] == null) { return; } const currentPos = L.latLng(e[4], e[5]); if (redraw && e[0] in marker) { liveMap.removeLayer(marker[e[0]]); delete marker[e[0]]; } if (e[0] in marker) { updateExistingMarker(e, currentPos); } else { createNewMarker(liveMap, e, currentPos, st); }}function updateExistingMarker(e, currentPos) { const m = marker[e[0]]; m.setLatLng(currentPos); lastPos[e[0]] = [e[4], e[5], e[2], e[6], Date.now(), e[7], e[8], e[9]]; newMarker[e[0]] = true; document.getElementById("mi-" + e[0]).style.transform = "rotate(" + e[2] + "deg)";}function createNewMarker(liveMap, e, currentPos, st) { const htmlc = (st ? "

" + e[9] + "

" : "") + "United Airlines UA470 (UAL470) DEN to PSP, MCO to SFO, SFO to LAX (5)"; const m = L.marker(currentPos, { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: e[0], opacity: e[3] ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[e[0]] = m; newMarker[e[0]] = true; lastPos[e[0]] = [e[4], e[5], e[2], e[6], Date.now(), e[7], e[8], e[9]]; document.getElementById("mi-" + e[0]).style.transform = "rotate(" + e[2] + "deg)";}function removeUnusedMarkers(liveMap) { for (const m in marker) { if (!(m in newMarker) && m != activeHex) { liveMap.removeLayer(marker[m]); delete marker[m]; } }}function onPlaneClick(e) { if (sf != "") { return; } updateInProg = true; const liveMap = e.target._map; const hex = e.target.options.alt; if (hex == activeHex) { return; } updateTrack(liveMap, `/${lang}/live/track_hex/${hex}`, hex, e);}function onMoveend(e) { localStorage.setItem('livemapCenter', JSON.stringify(e.target.getCenter())); localStorage.setItem('livemapZoom', e.target.getZoom()); updateMap(e.sourceTarget, false); } function onZoomed(e) { updateMap(e.sourceTarget, true) }// Define a utility function for creating a markerfunction createMarker(latLng, iconClass, htmlContent, alt, opacity) { return L.marker(latLng, { icon: L.divIcon({ className: iconClass, html: htmlContent }), alt: alt, opacity: opacity, }).on('click', onPlaneClick);}function updateTrack(liveMap, url, hex, e) { let prevCoord = null; let prevCoordFull = null; getData(url).then(function (ld) { if (!ld) { return; } const hadNoHex = hex === ""; if (hex === "" && url.includes("hex")) { hex = ld[0]; } else if (hex === "") { hex = ld[1]; } if (activeMarker && hex !== activeHex) { // Reset old marker const lp = lastPos[activeHex]; const htmlc = (hadTitles ? "

" + lp[7] + "

" : "") + "United Airlines UA470 (UAL470) DEN to PSP, MCO to SFO, SFO to LAX (6)"; liveMap.removeLayer(marker[activeHex]); const m = L.marker(activeMarker.getLatLng(), { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: activeHex, opacity: lp[7] != '' ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[activeHex] = m; document.getElementById("mi-" + activeHex).style.transform = "rotate(" + lp[2] + "deg)"; activeMarker = m; } // Set new marker if (hex !== activeHex && e) { const lp = lastPos[hex]; const htmlc = (hadTitles ? "

" + lp[7] + "

" : "") + "United Airlines UA470 (UAL470) DEN to PSP, MCO to SFO, SFO to LAX (7)"; const m = L.marker(e.target.getLatLng(), { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: hex, opacity: ld[3] ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[hex] = m; liveMap.removeLayer(e.target); activeMarker = m; } refreshsActive = true; recalcInProg = true; arcs = []; curArc = []; arcCol = ""; prevCoord = []; track = ld[23]; if (sf === "") { if (ld[0] !== "") { domElements.get("liveFlnr").href = `/${lang}/live/flight_details/${ld[10]}`; domElements.get("liveFlnr").innerText = ld[0]; } else { domElements.get("liveFlnr").innerText = ""; domElements.get("liveFlnr").href = ""; } if (ld[21]) { domElements.get("liveAirline").innerText = ld[21]; } else { domElements.get("liveAirline").innerText = ""; } domElements.get("liveHex").innerText = ld[1]; if (ld[2] !== "" && ld[2] !== ld[0]) { domElements.get("liveCallsign").innerText = ld[2]; } else { domElements.get("liveCallsign").innerText = ""; } if (ld[3] !== "") { domElements.get("liveReg").href = `/${lang}/planes/${ld[3]}`; domElements.get("liveRegBlock").style.display = "block"; domElements.get("liveReg").innerText = ld[3]; } else { domElements.get("liveReg").innerText = "NA"; domElements.get("liveRegBlock").style.display = "none"; domElements.get("liveReg").href = ""; } if (ld[4] !== "NA") { if (domElements.get("liveRouteContainer")) { domElements.get("liveRouteContainer").style.display = "block"; } domElements.get("liveDep").innerText = ld[5]; domElements.get("liveDepFlag").src = "/staticfiles/" + ld[6].toLowerCase() + ".svg"; domElements.get("liveDep").href = `/${lang}/airport/${ld[5]}/${ld[4]}`; domElements.get("liveDepTime").innerText = ld[11]; if (ld[19] && ld[19] !== "+0") { domElements.get("liveDepDelay").innerText = ld[19]; } else { domElements.get("liveDepDelay").innerText = ""; } } else { domElements.get("liveDep").innerText = "NA"; domElements.get("liveDepTime").innerText = ""; domElements.get("liveDepDelay").innerText = ""; domElements.get("liveRouteContainer").style.display = "none"; } if (ld[7] !== "NA") { if (domElements.get("liveRouteContainer")) { domElements.get("liveRouteContainer").style.display = "block"; } domElements.get("liveArr").innerText = ld[8]; domElements.get("liveArrFlag").src = "/staticfiles/" + ld[9].toLowerCase() + ".svg"; domElements.get("liveArr").href = `/${lang}/airport/${ld[8]}/${ld[7]}`; domElements.get("liveArrTime").innerText = ld[12]; if (ld[20] && ld[20] !== "+0") { domElements.get("liveArrDelay").innerText = ld[20]; } else { domElements.get("liveArrDelay").innerText = ""; } } else { domElements.get("liveArr").innerText = "NA"; domElements.get("liveArrTime").innerText = ""; domElements.get("liveArrDelay").innerText = ""; domElements.get("liveRouteContainer").style.display = "none"; } if (ld[10] !== null) { domElements.get("liveLink").href = `/${lang}/live/flight_details/${ld[10]}`; domElements.get("liveLink").style.display = "block"; } else { domElements.get("liveLink").style.display = "none"; } const lt = track[track.length - 1]; domElements.get("liveAlt").innerText = lt[3] + " ft"; domElements.get("liveSpeed").innerText = lt[5] + " kts"; domElements.get("liveTrack").innerText = lt[4] + "°"; if (ld[18] !== "") { domElements.get("planePic").src = ld[18]; domElements.get("planePic").style.display = "block"; } else { domElements.get("planePic").style.display = "none"; } if (ld[22]) { domElements.get("liveType").innerText = ld[22]; domElements.get("liveTypeBlock").style.display = "block"; } else { domElements.get("liveTypeBlock").style.display = "none"; domElements.get("liveType").innerText = "NA"; } } // update upper items if relevant const liveStatusInd = domElements.get("liveStatusInd"); const liveStatusText = domElements.get("liveStatusText"); if (liveStatusInd && true) { if (!domElements.has("liveTrackHB")) { domElements.set("liveAltHB", document.getElementById("liveAltHB")); domElements.set("liveSpeedHB", document.getElementById("liveSpeedHB")); domElements.set("liveTrackHB", document.getElementById("liveTrackHB")); domElements.set("liveDataHB", document.getElementById("liveDataHB")); } liveStatusInd.innerText = ld[17] ? "Live" : "Landed"; const lt = ld[23][ld[23].length - 1]; if (domElements.get("depTimeLiveHB")) { domElements.get("depTimeLiveHB").innerText = ld[11]; domElements.get("arrTimeLiveHB").innerText = ld[12]; domElements.get("depDelHB").innerText = ld[19]; domElements.get("arrDelHB").innerText = ld[20]; domElements.get("liveAltHB").innerText = lt[3]; domElements.get("liveSpeedHB").innerText = lt[5]; domElements.get("liveTrackHB").innerText = lt[4]; } if (!ld[17]) { domElements.get("liveDataHB").style.display = "none"; } } if (liveStatusText && ld[17]) { liveStatusText.innerText = ""; } if (ld[13] !== null && ld[14] !== null && track.length > 0 && Math.abs(ld[13] - track[0][1] / 1e5) > 1 && Math.abs(ld[14] - track[0][2] / 1e5) > 1) { arcs.push([[[ld[13], ld[14]], [track[0][1] / 1e5, track[0][2] / 1e5]], "lightgray", true]); } prevCoord = null; prevCoordFull = null; lp = null; for (const entr in track) { const p = track[entr]; if (p[1] === null || p[2] === null || p.length == 0) { continue; } let col = "green"; if (prevCoord && (Math.abs(prevCoord[0] - p[1] / 1e5) > 1 || Math.abs(prevCoord[1] - p[2] / 1e5) > 1)) { arcs.push([curArc, arcCol, false]); arcCol = ""; arcs.push([[[prevCoord[0], prevCoord[1]], L.latLng(p[1] / 1e5, p[2] / 1e5, p[3])], "lightgray", true]); curArc = [L.latLng(p[1] / 1e5, p[2] / 1e5, p[3])]; } else if (arcCol !== col) { if (curArc.length > 0) { arcs.push([curArc, arcCol, false]); } if (prevCoord) { curArc = [prevCoord]; } else { curArc = []; } arcCol = col; } prevCoordFull = [p[1] / 1e5, p[2] / 1e5, p[4], p[5], Date.now(), p[3], false, ld[0]]; prevCoord = L.latLng(p[1] / 1e5, p[2] / 1e5, p[3]); curArc.push(prevCoord); if (p[4] !== 0) { lastTrack = p[4]; } } if (curArc.length > 0) { arcs.push([curArc, arcCol]); } if (ld[15] !== null && ld[16] !== null && prevCoord && (Math.abs(prevCoord.lat - ld[15]) > 0.1 || Math.abs(prevCoord.lng - ld[16]) > 0.1)) { arcs.push([[prevCoord, [ld[15], ld[16]]], "lightgray", true]); activeDest = L.latLng(ld[15], ld[16]); } for (const idx in tracks) { tracks[idx].remove(); } tracks = []; for (const idx in arcs) { const a = arcs[idx]; if (a[2]) { if (a[0][0][1] > a[0][1][1]) { const temp = a[0][0]; a[0][0] = a[0][1]; a[0][1] = temp; } p = L.Polyline.Arc(a[0][0], a[0][1], { color: a[1], noClip: true, vertices: 100 }); estTrack = p; } else { p = L.hotline(a[0], { palette: { 0: 'lightgray', 0.1: 'green', 0.5: 'yellow', 0.7: 'orange', 1: 'red' }, min: 0, max: 36000, outlineWidth: 0, weight: 4, noClip: true }); liveTrack = p; } p.addTo(liveMap); tracks.push(p); } if (prevCoordFull) { lastPos[hex] = prevCoordFull; } if (prevCoord) { if (e) { const i = e.sourceTarget; i.setLatLng(prevCoord); activeMarker = i; if (lastTrack) { document.getElementById("mi-" + hex).style.transform = "rotate(" + lastTrack + "deg)"; } if (!refreshs && !viewSet) { liveMap.setView(prevCoord, 8); } } else { if (!activeMarker) { activeMarker = L.marker(prevCoord, { icon: L.icon({ iconUrl: "/img/plane-icon_active.svg?20221124", iconSize: liveMap._zoom > 7 ? sizes[0] : sizes[1] }), rotationAngle: prevCoordFull[2], rotationOrigin: "center center", opacity: 0.8, title: hex }).addTo(liveMap); } else { activeMarker.setLatLng(prevCoord); } } if (e || hadNoHex) { // Only set refresh on first click or for live flight tracks (no hex given then) if (trackRefresh) { window.clearInterval(trackRefresh); } if (ld[17]) { trackRefresh = window.setInterval(function () { if (refreshsActive) { updateTrack(liveMap, url, hex, null); } }, 3000); } } } if (!refreshs && !viewSet) { liveMap.setView(prevCoord, 8); } if (sf === "") { domElements.get("liveMapContainer").style.display = 'block'; } activeHex = hex; updateInProg = false; recalcInProg = false; });} function buildLiveMap(liveMap,activeHex) { const osmUrl = 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'; const osmAttrib = '© OpenStreetMap'; const osm = new L.TileLayer(osmUrl, { attribution: osmAttrib }); liveMap.attributionControl.setPrefix(''); liveMap.addLayer(osm); updateMap(liveMap, false,activeHex); liveMap.on('zoomend', onZoomed); liveMap.on('moveend', onMoveend); } function buildTrackMap(liveMap, url) { const osmUrl = 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'; const osmAttrib = '© OpenStreetMap'; const osm = new L.TileLayer(osmUrl, { attribution: osmAttrib }); liveMap.attributionControl.setPrefix(''); liveMap.addLayer(osm); updateTrack(liveMap, url, "", null); } loadScript("/js/leaflet.js?20220413" ,function() { // set up the map map = new L.map('map-flight',{sleep:false,minZoom:0, gestureHandling: false}); map.whenReady(() => map.gestureHandling?._handleMouseOver?.()); // create the tile layer with correct attribution map.fitBounds([[28.42944,-122.375],[37.61889,-81.30889]]); viewSet = true; dep=[28.42944,-81.30889]; arr=[37.61889,-122.375]; sf = "161976342"; buildTrackMap(map,"/en/live/track/161976342"); L.marker(dep).addTo(map); L.marker(arr).addTo(map); });

Altitude

ft

Speed

kts

Track

°

Full Screen Map

AIRLINE

NAME
United Airlines

IATA / ICAO
UA / UAL

COUNTRY
United States
Airline Information

PLANE

MODEL
N77559 Boeing B737 MAX 9

ICAO IDENTIFIER
AA7EC3

SEAT CONFIGURATION
179 seats
20 Business159 Economy
Plane Information

GENERAL ROUTE INFO

FREQUENCY:

irregular/new
Sun, Mon, Tue, Wed, Thu, Sat

DIRECT DISTANCE
3,933km 2,444mi

ACTUAL DISTANCE
4,039km 2,510mi
+2%

FLIGHT TIME
6 hours 11 min

FLIGHTS / WEEK
21 Flights
PUNCTUALITY
9 Flights/week delayed
58% On-Time Performance
Delay Statistics

SEATS / WEEK
179 seats/Flight
16,114 seats/week
Route Info

CO2 EMISSIONS

Economy
624kg

Business
1,308kg
United Airlines UA470 (UAL470) DEN to PSP, MCO to SFO, SFO to LAX (2024)

References

Top Articles
Latest Posts
Article information

Author: Reed Wilderman

Last Updated:

Views: 6399

Rating: 4.1 / 5 (72 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Reed Wilderman

Birthday: 1992-06-14

Address: 998 Estell Village, Lake Oscarberg, SD 48713-6877

Phone: +21813267449721

Job: Technology Engineer

Hobby: Swimming, Do it yourself, Beekeeping, Lapidary, Cosplaying, Hiking, Graffiti

Introduction: My name is Reed Wilderman, I am a faithful, bright, lucky, adventurous, lively, rich, vast person who loves writing and wants to share my knowledge and understanding with you.