VA9358 - ヴァージン・オーストラリア (VOZ9358) QVP から PER、OOD から PER (2023)

2023 年 5 月 25 日

着陸しました
飛行機が着陸しました。届きました1日前 (1分遅れ)
コオダイデリゴー
OOD / YKDD

2時間2分
1,094km / 675マイル

パース
PER / YPPH

ターミナル:2
ゲート:204

出発 16:498月
5分前

到着 18:518月
1分遅れ

航空会社

名前
ヴァージン・オーストラリア

IATA / ICAO
VA / 声

オーストラリア
航空会社情報
" : ""}VA9358 - ヴァージン・オーストラリア (VOZ9358) QVP から PER、OOD から PER (6)`; if (マーカー内の activeHex) { liveMap.removeLayer(マーカー[activeHex]); } const m = L.marker(activeMarker.getLatLng(), { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: activeHex, opacity: lp[3] ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick);マーカー[アクティブHex] = m; document.getElementById(`mi-${activeHex}`).style.transform = `rotate(${lp[2]}deg)`;アクティブマーカー = null;アクティブHex = null; liveTrack = null; liveMarker = null; estTrack = null; document.getElementById('liveMapContainer').style.display = 'none';} /** * 経過時間と以前の状態に基づいてマーカーの新しい位置を再計算します。 * @param {Object} liveMap */async function updateCalc(liveMap) { if (recalcInProg || liveMap.getZoom() < 6) { return; recalcInProg = true; for (const [key, prevPos] of Object.entries(lastPos)) { if (マーカーのキー && prevPos[3] >= 50 && !prevPos[6]) { const Speed = prevPos[3] || 0; const 間隔 = Date.now() - prevPos[4]; const dist = 速度 * 間隔 / 1000 / 3600 * 1852; if (dist < 50) { 続行; } // 次の位置を計算します 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]];マーカー[キー].setLatLng([lat2d, lon2d]); if (liveTrack && activeMarker == key) { const l = liveTrack.getLatLngs(); l.push(L.latLng(lat2d, lon2d, prevPos[5])); { liveTrack.setLatLngs(l); を試してください。 } catch (e) { /* エラーをサイレントにキャッチします。 */ } if (activeDest) { const tn = L.latLng(lat2d, lon2d); liveMap.removeLayer(estTrack); const arcOptions = { color: "lightgray"、noClip: true、頂点: 100 }; estTrack = t.lng < tn.lng ? L.Polyline.Arc(activeDest, tn, arcOptions) : L.Polyline.Arc(tn, activeDest, arcOptions); estTrack.addTo(liveMap);トラック.プッシュ(estTrack); } } } } recalcInProg = false;}/** * 特定の URL からデータを取得し、エラーを処理し、JSON 応答を返します。 * @param {string} url */async function getData(url) { url = `${url}?${Math.floor(Date.now() / 5000)}`; const response = await fetch(url, { headers: { Authorization: auth_token } }); if (!response.ok) { handleFetchErrors(response); null を返します。 if (sf === "") { document.getElementById("liveUpdErr").style.display = 'none'; document.getElementById("liveUpdNotFound").style.display = 'none'; } return response.json();}/** * フェッチ呼び出し中のエラーを処理します * @param {Object} 応答 */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 = 'なし'; liveUpdErr.style.display = 'ブロック'; liveMapContainer.style.display = 'なし'; document.getElementById("liveUpdErrCode").innerText = response.status; } else { liveUpdErr.style.display = 'none'; liveMapContainer.style.display = 'なし'; liveUpdNotFound.style.display = 'ブロック'; }}非同期関数 updateMap(liveMap, fromZoom, clickHex) { if (documentIsHidden()) return; const 境界 = liveMap.getBounds(); const url =constructURL(bounds, liveMap.getZoom()); if (updateInProgressOrTooSoon(fromZoom)) が戻る; recalcInProg = true; lastUpdate = Date.now(); updateInProg = true; const ld = await getData(url); if (!ld) { updateInProg = false;戻る; } processMapData(liveMap, ld, fromZoom, clickHex);}function documentIsHidden() { return typeof document.hidden !== "未定義" && document.hidden;}function constructionURL(bounds,zoom) { const widthText = screenWidth > 1000 ? "大きい" : "小さい"; 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}`;} function updateInProgressOrTooSoon(fromZoom) { if (updateInProg) { return true; const freq = fromZoom ? minZoomFreq : minRefreshFreq; return Date.now() - lastUpdate < freq;}関数 processMapData(liveMap, ld, fromZoom, clickHex) { newMarker = {};円弧 = []; curArc = []; arcCol = "";前の座標 = []; 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;削除UnusedMarkers(liveMap); updateInProg = false; recalcInProg = false; firstUpd = false; if (clickHex) { マーカー[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 (マーカーで && e[0] を再描画) { liveMap.removeLayer(マーカー[e[0]]);マーカー[e[0]]を削除します。 if (マーカー内の e[0]) { updateExistingMarker(e, currentPos); } else { createNewMarker(liveMap, e, currentPos, st); }}関数 updateExistingMarker(e, currentPos) { const m = マーカー[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] + "

" : "") + "VA9358 - ヴァージン・オーストラリア (VOZ9358) QVP から PER、OOD から PER (7)"; 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); マーカー[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 マーカー) { 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) }// マーカー関数を作成するためのユーティリティ関数を定義します 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 ) { prevCoord = null にします。 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) { // 古いマーカーをリセット const lp = lastPos[activeHex] ; const htmlc = (hadTitles ? "

" + lp[7] + "

" : "") + "VA9358 - ヴァージン・オーストラリア (VOZ9358) QVP から PER、OOD から PER (8)"; liveMap.removeLayer(marker[activeHex]); const m = L.marker(activeMarker.getLatLng(), { icon: L.divIcon({ className: 'flt-marker', html: htmlc }), alt: activeHex 、不透明度: lp[3] ? 0.9 : 0.6 }).addTo(liveMap).on('click', onPlaneClick); marker[activeHex] = m; document.getElementById("mi-" + activeHex).style.transform = "rotate(" + lp[2] + "deg)"; activeMarker = m; } // 新しいマーカーを設定 if (hex !== activeHex && e) { const lp = lastPos[hex]; const htmlc = (hadTitles ?」

" + lp[7] + "

" : "") + "VA9358 - ヴァージン・オーストラリア (VOZ9358) QVP から PER、OOD から PER (9)"; 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; } freshsActive = true; recalcInProg = true; アーク= []; 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 = "ブロック"; domElements.get("liveReg").innerText = ld[3]; } else { domElements.get("liveReg").innerText = "NA"; domElements.get("liveRegBlock").style.display = "なし"; domElements.get("liveReg").href = ""; if (ld[4] !== "NA") { 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 = ""; if (ld[7] !== "NA") { 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 = ""; if (ld[10] !== null) { domElements.get("liveLink").href = `/${lang}/live/flight_details/${ld[10]}`; domElements.get("liveLink").style.display = "ブロック"; } 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 = "ブロック"; } else { domElements.get("planePic").style.display = "none"; if (ld[22]) { domElements.get("liveType").innerText = ld[22]; domElements.get("liveTypeBlock").style.display = "ブロック"; } else { domElements.get("liveTypeBlock").style.display = "none"; domElements.get("liveType").innerText = "NA"; } } // 関連する場合は上位項目を更新します const liveStatusInd = domElements.get("liveStatusInd"); if (liveStatusInd) { 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] ? 「ライブ」 : 「着陸」; const lt = ld[23][ld[23].length - 1]; 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 (ld[13] !== null && ld[14] !== null && track.length > 0 && Math.abs(ld[13] - track[0][1] / 1e5) > 1 && Math.abs(ld[14] - トラック[0][2] / 1e5) > 1) { arcs.push([[[ld[13], ld[14]], [トラック[0][1] / 1e5, トラック[0][2] / 1e5]], "ライトグレー", true]); prevCoord = null; prevCoordFull = null; lp = null; for (const entr in track) { const p = track[entr]; if (p[1] === null || p[2] === null) { 続行; } 列 = "緑" にします。 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 = [];アークコル = コル; prevCoordFull = [p[1] / 1e5, p[2] / 1e5, p[4], p[5], Date.now(), p[3], false, p[9]]; 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) {トラック[idx].remove();トラック = []; 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] = 温度; } p = L.Polyline.Arc(a[0][0], a[0][1], { color: a[1], noClip: true, 頂点: 100 }); estTrack = p; } else { p = L.hotline(a[0], { パレット: { 0: 'ライトグレー', 0.1: '緑', 0.5: '黄色', 0.7: 'オレンジ', 1: '赤' }, min : 0、最大: 36000、アウトライン幅: 0、重み: 4、noClip: true });ライブトラック = p; p.addTo(liveMap);トラック.プッシュ(p); if (prevCoordFull) { lastPos[hex] = prevCoordFull; if (prevCoord) { if (e) { const i = e.sourceTarget; i.setLatLng(prevCoord);アクティブマーカー = 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 ? サイズ[0] : サイズ[1] })、rotationAngle: prevCoordFull[2]、rotationOrigin: "center center"、不透明度: 0.8、タイトル: hex }).addTo(liveMap); } else { activeMarker.setLatLng(prevCoord); } } if (e || hadNoHex) { // 最初のクリック時またはライブ フライト トラックに対してのみ更新を設定します (その場合は 16 進数が指定されていません) 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 = 'ブロック';アクティブHex = 16進数; 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, { 属性: 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, { 属性: osmAttrib }); liveMap.attributionControl.setPrefix(''); liveMap.addLayer(osm); updateTrack(liveMap, url, "", null); }loadScript("/js/leaflet.js?20220411" ,function() { // マップを設定します map = new L.map('map-flight',{twoFingerZoom: true,sleep:false,minZoom:0} ); // 正しい属性を持つタイル レイヤーを作成します。 ,115.9669]; var osmUrl='https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'; var osmAttrib='© OpenStreetMap'; var osm = 新しい L.TileLayer (osmUrl, {属性: osmAttrib});map.attributionControl.setPrefix('');map.addLayer(osm); if (dep[1]

飛行機

モデル
VH-IJW ボーイング B737-800

ICAO 識別子
7C29DA

シート構成
176席
8 ビジネス168 エコノミー

初飛行
2014 年 10 月
8年前
飛行機情報

一般的なルート情報

周波数:

不定期/新規
結婚した

距離
1,094km679マイル

飛行時間
1時間55分

週あたりのフライト数
9 フライト

時間厳守
1 週間あたり 1 便の遅延
83% のオンタイムパフォーマンス

席数/週
139席/便
5,153 席/週
ルート情報

CO2排出量

経済
170kg

仕事
348kg
Top Articles
Latest Posts
Article information

Author: Edwin Metz

Last Updated: 07/15/2023

Views: 5261

Rating: 4.8 / 5 (58 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Edwin Metz

Birthday: 1997-04-16

Address: 51593 Leanne Light, Kuphalmouth, DE 50012-5183

Phone: +639107620957

Job: Corporate Banking Technician

Hobby: Reading, scrapbook, role-playing games, Fishing, Fishing, Scuba diving, Beekeeping

Introduction: My name is Edwin Metz, I am a fair, energetic, helpful, brave, outstanding, nice, helpful person who loves writing and wants to share my knowledge and understanding with you.