Wo ist die ISS

Hier kann man sehen, wo die ISS gerade ist .

Der hier verwendete Code

<!DOCTYPE html> <!-- saved from url=(0039)https://isstracker.spaceflight.esa.int/ --> <html lang="en" data-lt-installed="true" style="font-size: 9.39px;"><head> <meta charset="UTF-8"> <title>ISS Tracker</title><!-- <base href="https://isstracker.spaceflight.esa.int"> --> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <script> var isst_xmlhttp = null; var isst_ld_steps = 0; var isst_ld_progress = 0; var isst_ready = false; var lastUpdate = 0; var nextUpdateStep = 60000.0 * 1440.0; // min var isst_tle = { sat : "", L1 : "", L2 : "" } var SGP4 = { CanPropagate : false, kUnits : 1.0, EpochTLE : 0, // in days EpochNow : 0, IFLAG : 0, // COMMON/E1/ XMO : 0, XNODEO : 0, OMEGAO : 0, EO : 0, XINCL : 0, XNO : 0, XNDT2O : 0, XNDD6O : 0, BSTAR : 0, // COMMON/C1/ DE2RA : Math.PI / 180.0, PIO2 : Math.PI / 2.0, X3PIO2 : Math.PI * 1.5, TWOPI : Math.PI * 2.0, E6A : 1.0E-6, TOTHRD : 2.0 / 3.0, XJ3 : -0.253881e-5, XKMPER : 6378.135, XMNPDA : 1440.0, AE : 1.0, CK2 : 5.413080E-4, CK4 : 0.62098875E-6, S : 1.0122292801892716, QOMS2T : 1.8802791590152709e-9, XKE : 0.074366916133173408, TIMCON : 3600 * 24 * 1000, SECDAY : 86400.0, OMEGAE : 1.00273790934, // VARS X : 0, Y : 0, Z : 0, XDOT : 0, YDOT : 0, ZDOT : 0, Latitude : 0, Longitude : 0, Altitude : 0, Speed : 0, LatitudeLabel : "", LongitudeLabel : "", AltitudeLabel : "", SpeedLabel : "", TimeLabel : "", A1 : 0, COSIO : 0, THETA2 : 0, X3THM1 : 0, EOSQ : 0, BETAO2 : 0, BETAO : 0, DEL1 : 0, AO : 0, DELO : 0, XNODP : 0, AODP : 0, ISIMP : 0, S4 : 0, QOMS24 : 0, PERIGE : 0, PINVSQ : 0, TSI : 0, ETA : 0, EETA : 0, ETASQ : 0, COEF : 0, COEF1 : 0, PSISQ : 0, C1 : 0, C2 : 0, C3 : 0, SINIO : 0, A3OVK2 : 0, C4 : 0, C5 : 0, X1MTH2 : 0, THETA4 : 0, TEMP1 : 0, TEMP2 : 0, TEMP3 : 0, XMDOT : 0, X1M5TH : 0, OMGDOT : 0, XHDOT1 : 0, OMGCOF : 0, XMCOF : 0, XNODOT : 0, XNODCF : 0, T2COF : 0, XLCOF : 0, AYCOF : 0, DELMO : 0, SINMO : 0, X7THM1 : 0, C1SQ : 0, D2 : 0, TEMP : 0, D3 : 0, D4 : 0, T3COF : 0, T4COF : 0, T5COF : 0, init : function (tle1, tle2) { var _year; var _days; var rval; var checksum_problem = 0; var L1 = tle1.split(" "); var L2 = tle2.split(" "); var tmp; var expsign = ""; var f; L1 = this.trim_vector(L1); L2 = this.trim_vector(L2); this.XMO = this.DE2RA * (L2[6] * 1.0); this.XNODEO = this.DE2RA * (L2[3] * 1.0); this.OMEGAO = this.DE2RA * (L2[5] * 1.0); this.XINCL = this.DE2RA * (L2[2] * 1.0); this.EO = ("0." + L2[4]) * 1.0; tmp = L2[7] * 1.0; this.XNO = tmp * this.TWOPI / 1440.0; this.XNDT2O = (L1[4] * 1.0) * this.TWOPI / (1440.0 * 1440.0); this.XNDD6O = this.tleExp2Num(L1[5]) * this.TWOPI / (1440.0 * 1440.0 * 1440.0); this.BSTAR = this.tleExp2Num(L1[6]); _year = L1[3].substr(0, 2) * 1.0; _days = L1[3].substr(2) * 1.0; var TLEDate = new Date(Date.UTC(2000 + _year, 0, 1, 0, 0, 0, 0)); this.EpochTLE = (_days - 1.0) + TLEDate.getTime() / this.TIMCON; this.IFLAG = 1; this.CanPropagate = true; this.propagate(); }, propagate : function() { if (!this.CanPropagate) return; var Now = new Date(); this.EpochNow = Now.getTime() / this.TIMCON; this._propagate(this.EpochNow); }, _propagate : function (Epoch) { var TSINCE = (Epoch - this.EpochTLE) * 1440.0; var XMDF; var OMGADF; var XNODDF; var OMEGA; var XMP; var XNODE; var TSQ; var TEMPA; var TEMPE; var TEMPL; var DELOMG; var DELM; var TCUBE; var TFOUR; var A; var E; var XL; var XLT; var BETA; var XN; var AXN; var AYN; var XLL; var AYNL; var CAPU; var _jump; var I; var SINEPW; var COSEPW; var TEMP4; var TEMP5; var TEMP6; var EPW; var ECOSE; var ESINE; var ELSQ; var PL; var R; var RDOT; var RFDOT; var BETAL; var COSU; var SINU; var U; var SIN2U; var COS2U; var RK; var UK; var XNODEK; var XINCK; var RDOTK; var SINUK; var COSUK; var SINIK; var COSIK; var SINNOK; var COSNOK; var XMX; var XMY; var UX; var UY; var UZ; var VX; var VY; var VZ; var RFDOTK; var modulo; if (this.IFLAG != 0) { this.A1 = Math.pow((this.XKE/this.XNO), this.TOTHRD); this.COSIO = Math.cos(this.XINCL); this.THETA2 = this.COSIO * this.COSIO; this.X3THM1 = 3.0 * this.THETA2 - 1; this.EOSQ = this.EO * this.EO; this.BETAO2 = 1.0 - this.EOSQ; this.BETAO = Math.sqrt(this.BETAO2); this.DEL1 = 1.5 * this.CK2 * this.X3THM1 / (this.A1 * this.A1 * this.BETAO * this.BETAO2); this.AO = this.A1 * (1.0 - this.DEL1 * (0.5 * this.TOTHRD + this.DEL1 * (1.0 + 134.0 / 81.0 * this.DEL1))); this.DELO = 1.5 * this.CK2 * this.X3THM1 / (this.AO * this.AO * this.BETAO * this.BETAO2); this.XNODP = this.XNO / (1.0 + this.DELO); this.AODP = this.AO / (1.0 - this.DELO); this.ISIMP = 0; if ((this.AODP * (1.0 - this.EO) / this.AE) < (220.0 / this.XKMPER + this.AE)) this.ISIMP = 1; this.S4 = this.S; this.QOMS24 = this.QOMS2T; this.PERIGE = (this.AODP * (1.0 - this.EO) - this.AE) * this.XKMPER; if (this.PERIGE < 156.0) { S4 = this.PERIGE - 78.0; if (this.PERIGE <= 98.0) S4 = 20.0; QOMS24 = Math.pow(((120.0 - S4) * AE / XKMPER), 4); S4 = S4 / XKMPER + AE; } this.PINVSQ = 1.0 / (this.AODP * this.AODP * this.BETAO2 * this.BETAO2); this.TSI = 1.0 / (this.AODP - this.S4); this.ETA = this.AODP * this.EO * this.TSI; this.ETASQ = this.ETA * this.ETA; this.EETA = this.EO * this.ETA; this.PSISQ = Math.abs(1.0 - this.ETASQ); this.COEF = this.QOMS24 * Math.pow(this.TSI, 4); this.COEF1 = this.COEF / Math.pow(this.PSISQ, 3.5); this.C2 = this.COEF1 * this.XNODP * (this.AODP * (1.0 + 1.5 * this.ETASQ + this.EETA * (4.0 + this.ETASQ)) + 0.75 * this.CK2 * this.TSI / this.PSISQ * this.X3THM1 * (8.0 + 3.0 * this.ETASQ * (8.0 + this.ETASQ))); this.C1 = this.BSTAR * this.C2; this.SINIO = Math.sin(this.XINCL); this.A3OVK2 = -this.XJ3 / this.CK2 * Math.pow(this.AE, 3); this.C3 = this.COEF * this.TSI * this.A3OVK2 * this.XNODP * this.AE * this.SINIO / this.EO; this.X1MTH2 = 1.0 - this.THETA2; this.C4 = 2.0 * this.XNODP * this.COEF1 * this.AODP * this.BETAO2 * (this.ETA * (2.0 + 0.5 * this.ETASQ) + this.EO * (0.5 + 2.0 * this.ETASQ) - 2.0 * this.CK2 * this.TSI / (this.AODP * this.PSISQ) * (-3.0 * this.X3THM1 * (1.0 - 2.0 * this.EETA + this.ETASQ * (1.5 - 0.5 * this.EETA)) + 0.75 * this.X1MTH2 * (2.0 * this.ETASQ - this.EETA * (1.0 + this.ETASQ)) * Math.cos(2.0 * this.OMEGAO))); this.C5 = 2.0 * this.COEF1 * this.AODP * this.BETAO2 * (1.0 + 2.75 * (this.ETASQ + this.EETA) + this.EETA * this.ETASQ); this.THETA4 = this.THETA2 * this.THETA2; this.TEMP1 = 3.0 * this.CK2 * this.PINVSQ * this.XNODP; this.TEMP2 = this.TEMP1 * this.CK2 * this.PINVSQ; this.TEMP3 = 1.25 * this.CK4 * this.PINVSQ * this.PINVSQ * this.XNODP; this.XMDOT = this.XNODP + 0.5 * this.TEMP1 * this.BETAO * this.X3THM1 + 0.0625 * this.TEMP2 * this.BETAO * (13.0 - 78.0 * this.THETA2 + 137.0 * this.THETA4); this.X1M5TH = 1.0 - 5.0 * this.THETA2; this.OMGDOT = -0.5 * this.TEMP1 * this.X1M5TH + 0.0625 * this.TEMP2 * (7.0 - 114.0 * this.THETA2 + 395.0 * this.THETA4) + this.TEMP3 * (3.0 - 36.0 * this.THETA2 + 49.0 * this.THETA4); this.XHDOT1 = -this.TEMP1 * this.COSIO; this.XNODOT = this.XHDOT1 + (0.5 * this.TEMP2 * (4.0 - 19.0 * this.THETA2) + 2.0 * this.TEMP3 * (3.0 - 7.0 * this.THETA2)) * this.COSIO; this.OMGCOF = this.BSTAR * this.C3 * Math.cos(this.OMEGAO); this.XMCOF = -this.TOTHRD * this.COEF * this.BSTAR * this.AE / this.EETA; this.XNODCF = 3.5 * this.BETAO2 * this.XHDOT1 * this.C1; this.T2COF = 1.5 * this.C1; this.XLCOF = 0.125 * this.A3OVK2 * this.SINIO * (3.0 + 5.0 * this.COSIO) / (1.0 + this.COSIO); this.AYCOF = 0.25 * this.A3OVK2 * this.SINIO; this.DELMO = Math.pow(1.0 + this.ETA * Math.cos(this.XMO), 3); this.SINMO = Math.sin(this.XMO); this.X7THM1 = 7.0 * this.THETA2 - 1.0; if (this.ISIMP != 1) { this.C1SQ = this.C1 * this.C1; this.D2 = 4.0 * this.AODP * this.TSI * this.C1SQ; this.TEMP = this.D2 * this.TSI * this.C1 / 3.0; this.D3 = (17.0 * this.AODP + this.S4) * this.TEMP; this.D4 = 0.5 * this.TEMP * this.AODP * this.TSI * (221.0 * this.AODP + 31.0 * this.S4) * this.C1; this.T3COF = this.D2 + 2.0 * this.C1SQ; this.T4COF = 0.25 * (3.0 * this.D3 + this.C1 * (12.0 * this.D2 + 10.0 * this.C1SQ)); this.T5COF = 0.2 * (3.0 * this.D4 + 12.0 * this.C1 * this.D3 + 6.0 * this.D2 * this.D2 + 15.0 * this.C1SQ * (2.0 * this.D2 + this.C1SQ)); } this.IFLAG = 0; } XMDF = this.XMO + this.XMDOT * TSINCE; OMGADF = this.OMEGAO + this.OMGDOT * TSINCE; XNODDF = this.XNODEO + this.XNODOT * TSINCE; OMEGA = OMGADF; XMP = XMDF; TSQ = TSINCE * TSINCE; XNODE = XNODDF + this.XNODCF * TSQ; TEMPA = 1.0 - this.C1 * TSINCE; TEMPE = this.BSTAR * this.C4 * TSINCE; TEMPL = this.T2COF * TSQ; if (this.ISIMP != 1) { DELOMG = this.OMGCOF * TSINCE; DELM = this.XMCOF * (Math.pow((1.0 + this.ETA * Math.sin(XMDF)), 3) - this.DELMO); this.TEMP = DELOMG + DELM; XMP = XMDF + this.TEMP; OMEGA = OMGADF - this.TEMP; TCUBE = TSQ * TSINCE; TFOUR = TSINCE * TCUBE; TEMPA = TEMPA - this.D2 * TSQ - this.D3 * TCUBE - this.D4 * TFOUR; TEMPE = TEMPE + this.BSTAR * this.C5 * (Math.sin(XMP) - this.SINMO); TEMPL = TEMPL + this.T3COF * TCUBE + TFOUR * (this.T4COF + TSINCE * this.T5COF); } A = this.AODP * Math.pow(TEMPA, 2); E = this.EO - TEMPE; XL = XMP + OMEGA + XNODE + this.XNODP * TEMPL; BETA = Math.sqrt(1.0 - E * E); XN = this.XKE / Math.pow(A, 1.5); AXN = E * Math.cos(OMEGA); this.TEMP = 1.0 / (A * BETA * BETA); XLL = this.TEMP * this.XLCOF * AXN; AYNL = this.TEMP * this.AYCOF; XLT = XL + XLL; AYN = E * Math.sin(OMEGA) + AYNL; CAPU = this.FMOD2P(XLT - XNODE); this.TEMP2 = CAPU; for (I = 1; I <= 10; I++) { SINEPW = Math.sin(this.TEMP2); COSEPW = Math.cos(this.TEMP2); this.TEMP3 = AXN * SINEPW; TEMP4 = AYN * COSEPW; TEMP5 = AXN * COSEPW; TEMP6 = AYN * SINEPW; EPW = (CAPU - TEMP4 + this.TEMP3 - this.TEMP2) / (1.0 - TEMP5 - TEMP6) + this.TEMP2; if (Math.abs(EPW - this.TEMP2) <= this.E6A) break; this.TEMP2 = EPW; } ECOSE = TEMP5 + TEMP6; ESINE = this.TEMP3 - TEMP4; ELSQ = AXN * AXN + AYN * AYN; this.TEMP = 1.0 - ELSQ; PL = A * this.TEMP; R = A * (1.0 - ECOSE); this.TEMP1 = 1.0 / R; RDOT = this.XKE * Math.sqrt(A) * ESINE * this.TEMP1; RFDOT = this.XKE * Math.sqrt(PL) * this.TEMP1; this.TEMP2 = A * this.TEMP1; BETAL = Math.sqrt(this.TEMP); this.TEMP3 = 1.0 / (1.0 + BETAL); COSU = this.TEMP2 * (COSEPW - AXN + AYN * ESINE * this.TEMP3); SINU = this.TEMP2 * (SINEPW - AYN - AXN * ESINE * this.TEMP3); U = this.AcTan(SINU, COSU); // IACOPO ATTENZIONE !!!! era ATAN SIN2U = 2.0 * SINU * COSU; COS2U = 2.0 * COSU * COSU - 1.0; this.TEMP = 1.0 / PL; this.TEMP1 = this.CK2 * this.TEMP; this.TEMP2 = this.TEMP1 * this.TEMP; RK = R * (1.0 - 1.5 * this.TEMP2 * BETAL * this.X3THM1) + 0.5 * this.TEMP1 * this.X1MTH2 * COS2U; UK = U - 0.25 * this.TEMP2 * this.X7THM1 * SIN2U; XNODEK = XNODE + 1.5 * this.TEMP2 * this.COSIO * SIN2U; XINCK = this.XINCL + 1.5 * this.TEMP2 * this.COSIO * this.SINIO * COS2U; RDOTK = RDOT - XN * this.TEMP1 * this.X1MTH2 * SIN2U; RFDOTK = RFDOT + XN * this.TEMP1 * (this.X1MTH2 * COS2U + 1.5 * this.X3THM1); SINUK = Math.sin(UK); COSUK = Math.cos(UK); SINIK = Math.sin(XINCK); COSIK = Math.cos(XINCK); SINNOK = Math.sin(XNODEK); COSNOK = Math.cos(XNODEK); XMX = -SINNOK*COSIK; XMY = COSNOK*COSIK; UX = XMX * SINUK + COSNOK * COSUK; UY = XMY * SINUK + SINNOK * COSUK; UZ = SINIK * SINUK; VX = XMX * COSUK - COSNOK * SINUK; VY = XMY * COSUK - SINNOK * SINUK; VZ = SINIK * COSUK; this.X = RK * UX * this.XKMPER; this.Y = RK * UY * this.XKMPER; this.Z = RK * UZ * this.XKMPER; this.XDOT = (RDOTK * UX + RFDOTK * VX) * this.XKMPER * 60; this.YDOT = (RDOTK * UY + RFDOTK * VY) * this.XKMPER * 60; this.ZDOT = (RDOTK * UZ + RFDOTK * VZ) * this.XKMPER * 60; this.Speed = Math.sqrt(this.XDOT * this.XDOT + this.YDOT * this.YDOT + this.ZDOT * this.ZDOT); modulo = Math.sqrt(this.X * this.X + this.Y * this.Y + this.Z * this.Z); var _f = 3.35281066474748E-3; var g_theta = Math.atan2(this.Y, this.X); //AcTan(Y,X); // radians var g_lon = this.FMOD2P(g_theta - this.ThetaG_JD(this.GetCurrentJulianDate(Epoch))); var _r = Math.sqrt(this.X * this.X + this.Y * this.Y); var _e2 = _f * (2 - _f); var g_lat = Math.atan2(this.Z, _r); // radians var _c; while (true) { _c = 1 / Math.sqrt(1 - _e2 * Math.pow(Math.sin(g_lat), 2)); g_lat = Math.atan2(this.Z + this.XKMPER * _c * _e2 * Math.sin(g_lat), _r); break; if (Math.abs(g_lat - g_lat) < 1E-10) break; } var g_alt = _r / Math.cos(g_lat) - this.XKMPER * _c; // kilometers if (g_lat > this.PIO2) g_lat -= this.TWOPI; if (g_lon > Math.PI) g_lon -= this.TWOPI; else if (g_lon < -Math.PI) g_lon += this.TWOPI; this.Latitude = g_lat * 180 / Math.PI; this.Longitude = g_lon * 180 / Math.PI; this.Altitude = g_alt; var pp; var mm; var dd; pp = Math.abs(this.Latitude); mm = Math.floor(pp); dd = Math.floor((pp - mm) * 10) + ""; this.LatitudeLabel = Math.abs(mm) + "," + dd + " " + ((this.Latitude >= 0) ? "N" : "S"); pp = Math.abs(this.Longitude); mm = Math.floor(pp); dd = Math.floor((pp - mm)*10) + ""; this.LongitudeLabel = Math.abs(mm) + "," + dd + " " + ((this.Longitude >= 0) ? "E" : "W"); this.AltitudeLabel = Math.round(this.Altitude * this.kUnits) + ((this.kUnits == 1.0) ? " km" : " mi"); mm = Math.floor(this.Speed * this.kUnits / 1000); dd = Math.floor(this.Speed * this.kUnits - mm * 1000) + ""; this.SpeedLabel = mm + dd + ((this.kUnits == 1.0) ? " km/h" : " mph"); this.TimeLabel = this.EpochToDate(Epoch); }, trim_vector : function(L) { var Lo = []; for (i in L) if (L[i] != "") Lo.push(L[i]); return Lo; }, tleExp2Num : function(ele) { var _status = 0; var mantissa = ""; var exponent = ""; var negative = false; for (var i = 0; i < ele.length; i++) { var ch = ele.charAt(i); switch (_status) { case 0: if (ch == "-") negative = true; else if (ch == "+") negative = false; else mantissa = mantissa + ch; _status = 1; break; case 1: if ((ch == "-") || (ch == "+")) { exponent = ch; _status = 2; } else { mantissa = mantissa + ch; } break; case 2: exponent = exponent + ch; break; } } return ("0." + mantissa + "e" + exponent) * ((negative) ? -1.0 : 1.0); }, FMOD2P : function(n) { var v = Math.floor(n / this.TWOPI); return (n - v * this.TWOPI); }, AcTan : function(sinx, cosx) { if (cosx == 0.0) { if (sinx > 0.0) return (this.PIO2); else return (this.X3PIO2); } else { if (cosx > 0.0) { if (sinx > 0.0) return (Math.atan(sinx / cosx)); else return (this.TWOPI + Math.atan(sinx / cosx)); } else return (Math.PI + Math.atan(sinx / cosx)); } }, ThetaG_JD : function(jd) { var UT = this.Frac(jd+0.5); jd = jd - UT; var TU = (jd - 2451545.0) / 36525; var GMST = 24110.54841 + TU * (8640184.812866 + TU * (0.093104 - TU * 6.2E-6)); GMST = this.Modulus(GMST + this.SECDAY * this.OMEGAE * UT, this.SECDAY); return (this.TWOPI * GMST / this.SECDAY); }, GetCurrentJulianDate : function(Epoch) { var date = new Date(); date.setTime(Epoch * this.TIMCON); var dy = date.getUTCFullYear() * 1.0; var dm = date.getUTCMonth() * 1.0 + 1; var dd = date.getUTCDate() * 1.0; var dh = date.getUTCHours() * 1.0; var dmn = date.getUTCMinutes() * 1.0; var ds = date.getUTCSeconds() * 1.0; var jy; var jm; var ja; if (dm > 2) { jy = dy; jm = dm + 1; } else { jy = dy - 1; jm = dm + 13; } var intgr = Math.floor(Math.floor(365.25*jy) + Math.floor(30.6001*jm) + dd + 1720995 ); var gregcal = 15 + 31 * (10 + 12 * 1582); if ((dd + 31 * (dm + 12 * dy)) >= gregcal) { ja = Math.floor(0.01 * jy); intgr += 2 - ja + Math.floor(0.25 * ja); } var dayfrac = dh / 24.0 - 0.5; if (dayfrac < 0.0) { dayfrac += 1.0; --intgr; } var frac = dayfrac + (dmn + ds / 60.0) / 60.0 / 24.0; var jd0 = (intgr + frac) * 100000; var jd = Math.floor(jd0); if ((jd0 - jd) > 0.5) ++jd; return (jd / 100000); }, Frac : function(arg) { return (arg - Math.floor(arg)); }, Modulus : function(arg1, arg2) { var ret_val = arg1; var i = Math.floor(arg1 / arg2); ret_val -= Math.floor(i * arg2); if (ret_val < 0.0) ret_val += arg2; return ret_val; }, EpochToDate : function(epoch) { var nn = new Date(); nn.setTime(epoch * this.TIMCON); var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; return this.twodig(nn.getUTCDate()) + " " + months[nn.getUTCMonth()] + " " + nn.getUTCFullYear() + ", " + this.twodig(nn.getUTCHours()) + ":" + this.twodig(nn.getUTCMinutes()) + ":" + this.twodig(nn.getUTCSeconds()); }, twodig : function(n) { var ss = ""; if (n < 10) ss = ss + "0"; ss = ss + n; return ss; }, setMetric : function() { this.kUnits = 1.0; }, setImperial : function() { this.kUnits = 0.621371192; } }; var isst_nimgs = 0; var isst_limgs = 0; var isst_errimgs = 0; var isst_imgURLs = { intro : "", earthDay : "/image/mapday.jpg", earthNight : "/image/mapnight.jpg", iss : "/image/iss.png", sun : "/image/sun.png", esaLogo : "/image/esalogo.png", orbitFwd : "/image/orbitfwd.png", orbitBwd : "/image/orbitbwd.png" } var isst_imgs = { intro : null, earthDay : null, earthNight : null, iss : null, sun : null, esaLogo : null, esaLabel : null, orbitFwd : null, orbitBwd : null } var ctx = null; function loadImages(callbackOk, callbackError) { if (!callbackOk || !callbackError) return; isst_nimgs = isst_limgs = isst_errimgs = 0; for (var img in isst_imgURLs) if (isst_imgURLs[img] != "") isst_nimgs++; isst_ld_steps = isst_nimgs; isst_ld_steps++; // the tle... for (var img in isst_imgURLs) { if (isst_imgURLs[img] == "") continue; isst_imgs[img] = new Image; isst_imgs[img].onload = function() { loadingStep(); if (++isst_limgs >= isst_nimgs) if (isst_errimgs == 0) callbackOk(); else callbackError(); }; isst_imgs[img].onerror = function() { isst_errimgs++; if (++isst_limgs >= isst_nimgs) if (isst_errimgs == 0) callbackOk(); else callbackError(); }; isst_imgs[img].src = isst_imgURLs[img]; } } function imagesReady() { loadTle(tleReady, tleError); } function imagesError () { var ref = document.getElementById('errmsg'); ref.innerHTML = "ERROR: Cannot load images."; ref.style.display = "block"; } function loadTle(callbackOk, callbackError) { // for localhost var tle = "ISS (ZARYA)\n1 25544U 98067A 18197.23268516 .00001143 00000-0 24639-4 0 9996\n2 25544 51.6395 233.9354 0003899 320.6076 211.2954 15.53978402123030"; loadingStep(); callbackOk(tle); isst_xmlhttp = new XMLHttpRequest(); isst_xmlhttp.onreadystatechange = function() { if (isst_xmlhttp.readyState == 4) switch (isst_xmlhttp.status) { case 0: break; case 200: loadingStep(); callbackOk(isst_xmlhttp.responseText); break; default: callbackError(); break; } }; if (location.protocol != 'https:') isst_xmlhttp.open('GET', 'http://wsn.spaceflight.esa.int/iss/tledata.txt');//https://isstracker.spaceflight.esa.int/tledata.txt else isst_xmlhttp.open('GET', '/daten_webseite/tledata.php');//'https://isstracker.spaceflight.esa.int/tledata.txt');///daten_webseite/tledata.txt');// isst_xmlhttp.send(); } function tleReady(tleData) { var tle_eles = tleData.split('\n'); isst_tle.sat = tle_eles[0]; isst_tle.L1 = tle_eles[1]; isst_tle.L2 = tle_eles[2]; isst_ready = true; SGP4.init(isst_tle.L1, isst_tle.L2); lastUpdate = (new Date()).getTime(); tc = setTimeout(startTracker, 5000); } function startTracker() { clearTimeout(tc); document.getElementById('isst').style.display = "block"; document.getElementById('cover').style.display = "none"; issTrackerResize(); tc = setTimeout(redrawTrackerTimed, 10); } function printData() { var sep = "&nbsp;&nbsp;&nbsp;"; document.getElementById('isst_lat').innerHTML = SGP4.LatitudeLabel; document.getElementById('isst_lon').innerHTML = SGP4.LongitudeLabel; document.getElementById('isst_alt').innerHTML = SGP4.AltitudeLabel; document.getElementById('isst_spd').innerHTML = SGP4.SpeedLabel; document.getElementById('isst_tim').innerHTML = SGP4.TimeLabel; var b = isDocumentInFullScreenMode(); document.getElementById('btn_fs').style.display = (b) ? 'none' : 'block'; document.getElementById('waitmsg').style.display = "none"; var l = 0; if (SGP4.kUnits != 1.0) l = isst_map_h * 0.04; document.getElementById('btn_metric2').style.left = l + "px"; } function tleError() { var ref = document.getElementById('errmsg'); ref.innerHTML = "ERROR: Cannot load TLE vector."; ref.style.display = "block"; } function loadingStep() { isst_ld_progress++; var progressPerc = Math.min(100.0, Math.round(isst_ld_progress * 100.0 / isst_ld_steps)) + "%"; //alert(progressPerc); } var isst_map_w = 0; var isst_map_h = 0; var canDraw = false; function issTrackerResize() { if (!canDraw) return; var fsMode = isDocumentInFullScreenMode(); var ref; //isst_map_w = (!fsMode) ? document.getElementById('isstwp').offsetWidth : screen.width; isst_map_w = (!fsMode) ? 625 : screen.width; isst_map_h = Math.round(isst_map_w * 0.5); document.documentElement.style.fontSize = (isst_map_h * 0.03) + "px"; var myNode = document.getElementById("isst_ls"); while (myNode.firstChild) myNode.removeChild(myNode.firstChild); ref = document.getElementById("isst"); ref.style.maxWidth = ((fsMode) ? screen.width : 625) + "px"; ref = document.getElementById("isst_ls"); ref.innerHTML = '<canvas id="isst_map" style="z-index:0;" width="' + isst_map_w + '" height="' + isst_map_h + '"></canvas>'; ref.style.height= isst_map_h + "px"; ref = document.getElementById('isst_dt'); ref.style.height = (isst_map_w * 0.0624) + "px"; ref = document.getElementById('waitmsg'); ref.style.height = (isst_map_w * 0.0624) + "px"; var kk = isst_map_h * 0.04; ref = document.getElementById('btn_metric'); ref.style.width = (2 * kk) + "px" ; ref.style.height = (kk) + "px" ; ref = document.getElementById('btn_metric2'); ref.style.width = (kk) + "px" ; ref.style.height = (kk) + "px" ; ref = document.getElementById('btn_fs'); ref.style.height = (isst_map_h * 0.06) + "px"; var b = isDocumentInFullScreenMode(); ref.style.display = (fsMode) ? 'none' : 'block'; var l = 0; if (SGP4.kUnits != 1.0) l = isst_map_h * 0.04; document.getElementById('btn_metric2').style.left = l + "px"; var hh = ((fsMode) ? ((screen.height - isst_map_w / 16.0 * 9.0) * 0.5) : 0) + "px"; document.getElementById('isstgap').style.height = hh; document.getElementById('isstgap2').style.height = hh; ref = document.getElementById('cover'); ref.style.maxWidth = ((fsMode) ? screen.width : 625) + "px"; ref.style.width = isst_map_w + "px"; ref.style.height = (isst_map_w * 9.0 / 16.0) + "px"; ctx = document.getElementById("isst_map").getContext("2d"); redrawTracker(true); } var iss_old_x = 0; var iss_old_y = 0; function redrawTracker() { if (!canDraw) return; if (!ctx) return; var iw; var ih; var ar; // day map ctx.drawImage(isst_imgs.earthDay, 0, 0, isst_map_w, isst_map_h); // night map calculateSunPosition(); DrawNight(); // map lines ctx.beginPath(); ctx.lineWidth = "0.5"; ctx.strokeStyle = "rgba(255,255,255,0.5)"; var i = -150; while (i < 180) { var x = (i + 180.0) / 360.0 * isst_map_w; ctx.moveTo(x, 0); ctx.lineTo(x, isst_map_h); i += 30; } i = -60; while (i < 90) { var x = (i + 90.0) / 180.0 * isst_map_h; ctx.moveTo(0, x); ctx.lineTo(isst_map_w, x); i += 30; } ctx.stroke(); ctx.save(); ctx.shadowColor = "black"; ctx.shadowBlur = isst_map_w * 0.005; ctx.shadowOffsetX = ctx.shadowOffsetY = 0; // Sun iw = isst_imgs.sun.width; ih = isst_imgs.sun.height; ar = iw / ih; iw = isst_map_w * 0.03; ih = iw / ar; x = LonRadToX(SunLon); y = LatRadToY(SunLat); ctx.drawImage(isst_imgs.sun, x - iw * 0.5, y - ih * 0.5, iw, ih); // Orbit var issAngle = DrawOrbit(); // ISS horizon mapCalotta(1800, SGP4.Longitude * Math.PI / 180 , SGP4.Latitude * Math.PI / 180, "rgba(0,255,0,0.5)"); // ISS iw = isst_imgs.iss.width; ih = isst_imgs.iss.height; ar = iw / ih; iw = isst_map_w * 0.04; ih = iw / ar; x = LonRadToX(SGP4.Longitude * Math.PI / 180.0); y = LatRadToY(SGP4.Latitude * Math.PI / 180.0); ctx.save(); ctx.translate(x, y); ctx.rotate(issAngle); ctx.drawImage(isst_imgs.iss, -iw * 0.5, -ih * 0.5, iw, ih); ctx.restore(); iss_old_x = x; iss_old_y = y; // overlays ESA Logo iw = isst_imgs.esaLogo.width; ih = isst_imgs.esaLogo.height; ar = iw / ih; iw = isst_map_w * 0.15; ih = iw / ar; var x = isst_map_w * 0.84; var y = isst_map_h * 0.010; ctx.drawImage(isst_imgs.esaLogo, x, y, iw, ih); // Directorate text ctx.font = (isst_map_h * 0.04) + "px NotesEsaBold"; ctx.fillStyle = "white"; x = isst_map_w * 0.03; y = isst_map_h * 0.1; ctx.fillText("human and robotic exploration", x, y); // TLE info ctx.font = (isst_map_h * 0.03) + "px NotesEsaRegular"; x = isst_map_w * 0.03; y = isst_map_h * 0.97; ctx.fillText("TLE vector date: " + getTLEDate(), x, y); x = isst_map_w * 0.81; y = isst_map_h * 0.97; ctx.fillText(String.fromCharCode(0xA9) + " European Space Agency", x, y); ctx.restore(); } function getTLEDate() { if (!SGP4.CanPropagate) return "- Invalid TLE vector -"; return SGP4.EpochToDate(SGP4.EpochTLE); } function getDayOfYear(epoch) { var d = new Date(); d.setTime(epoch * 3600 * 24 * 1000); var y = d.getUTCFullYear(); var d2 = new Date(Date.UTC(y, 0, 1)); return ((d.getTime() - d2.getTime()) / (1000 * 3600 * 24)); } var SunLat = 0; var SunLon = 0; var SunLatDeg = 0; var SunLonDeg = 0; function calculateSunPosition() { var MAR21 = (31 + 28.25 + 21) * 1.0; var Days = getDayOfYear(SGP4.EpochNow); var DayPart = Days - Math.floor(Days); SunLon = Math.PI * (1 - 2 * DayPart); SunLat = (23.5 * Math.PI / 180) * Math.sin(Math.PI * 2 / 365.25 * (Days - MAR21)); SunLonDeg = SunLon * 180.0 / Math.PI; SunLatDeg = SunLat * 180.0 / Math.PI; } function manageFullScreen() { var elem = document.getElementById('isstwp'); if (elem.requestFullscreen) { elem.requestFullscreen(); } else if (elem.msRequestFullscreen) { elem.msRequestFullscreen(); } else if (elem.mozRequestFullScreen) { elem.mozRequestFullScreen(); } else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); } } function isDocumentInFullScreenMode() { return ( (document.fullScreenElement && document.fullScreenElement !== null) || document.mozFullScreen || document.webkitIsFullscreen || window.innerHeight == screen.height ); } function mapCalotta(r, c_lon, c_lat, color) { if (!ctx) return; var re = 6371.0; var ri = re * Math.cos(Math.asin(r/re)); var alfa = 0; var N = 180; var olon = -c_lon * 2; var olat = -c_lat * 2; var p_x; var p_y; var p_z; var q; var x_; var y_; var z_; var p_lon; var p_lat; var Px; var Pxs; var Py; var aa; var RR; var i; var jump; var lonspec; var Pxx; var satx; var saty; var satcross = 3; aa = Math.PI/2; satx = LonRadToX(c_lon); saty = LatRadToY(c_lat); ctx.beginPath(); ctx.lineWidth = Math.max(1.5, isst_map_w * 0.002); ctx.strokeStyle = color; for (i = 0; i < (N+2-1); i++) { alfa = (2 * Math.PI) / N * i; p_x = ri; p_y = r * Math.cos(alfa); p_z = r * Math.sin(alfa); q = -c_lat; x_ = p_x * Math.cos(q) + p_z * Math.sin(q); y_ = p_y; z_ = - p_x * Math.sin(q) + p_z * Math.cos(q); p_x = x_; p_y = y_; p_z = z_; RR = Math.sqrt(p_x * p_x + p_y * p_y); p_lat = Math.atan2(p_z, RR); p_lon = Math.atan2(p_y, p_x); p_lon += c_lon; Pxx = -1; if (p_lon < -Math.PI) { p_lon = (2*Math.PI) + p_lon; } if (p_lon > Math.PI) { p_lon = p_lon - (2*Math.PI); } Px = LonRadToX(p_lon); Py = LatRadToY(p_lat); jump = (olon == -100) || (Math.abs(olon - p_lon) > aa) || (Math.abs(olat - p_lat) > aa); olon = p_lon; olat = p_lat; if ((i == 0) || (jump)) { ctx.moveTo(Px, Py); } else { ctx.lineTo(Px, Py); } olon = p_lon; olat = p_lat; } ctx.stroke(); } function DrawNight() { var NUM_SEGS = 90; var k = 0; var ew = isst_map_w; var eh = isst_map_h; var STEP = ew / NUM_SEGS; var PI2 = Math.PI * 0.5; var ilon; var ilat; var iy; var fx; var fy; var lx; var ly; var lbx; var b; if (SunLat == 0) { } else { ctx.save(); ctx.fillStyle="white"; ctx.beginPath(); var i = 0; var cc = 0; while (i < ew) { ilon = XToLonRad(i); if (Math.abs(ilon - SunLon) == PI2) { ilat = SunLat; } else { b = Math.cos(Math.abs(SunLat)) * Math.cos(ilon-SunLon); ilat = -Math.atan2(b, Math.sin(Math.abs(SunLat))); ilat = ((SunLat < 0) ? -ilat : ilat); } iy = LatRadToY(ilat); if (i == 0) { ctx.moveTo(i, iy); fx = i; fy = iy; } else { ctx.lineTo(i, iy); } i += STEP; cc++; } lbx = ((SunLat < 0) ? 0 : eh + k); ctx.lineTo(ew + k, fy); ctx.lineTo(ew + k, lbx); ctx.lineTo(0 - k, lbx); ctx.lineTo(0 - k, fy); ctx.closePath(); ctx.clip(); ctx.drawImage(isst_imgs.earthNight, 0, 0, isst_map_w, isst_map_h); ctx.restore(); } } function DrawOrbit() { var steps = 60; var iss_x = LonRadToX(SGP4.Longitude * Math.PI / 180.0); var iss_y = LatRadToY(SGP4.Latitude * Math.PI / 180.0); var epoch; var dt = 92 / 1440.0 / steps; ctx.save(); ox = iss_x; oy = iss_y; var pxf = []; var pyf = []; var ox; var oy; epoch = SGP4.EpochNow; for (var i = 0; i < steps; i++) { SGP4._propagate(epoch); pxf.push(LonRadToX(SGP4.Longitude * Math.PI / 180.0)); pyf.push(LatRadToY(SGP4.Latitude * Math.PI / 180.0)); epoch += dt; } ctx.strokeStyle = "rgba(255,255,255,0.8)"; ctx.lineWidth = Math.max(1.5, isst_map_w * 0.0015); ctx.beginPath(); for (var i = 0; i < steps; i++) { if (i == 0) { ctx.moveTo(ox = pxf[0], oy = pyf[0]); continue; } if (pxf[i] < ox) { ctx.lineTo(pxf[i] + isst_map_w, pyf[i]); ctx.moveTo(ox - isst_map_w, oy); } ctx.lineTo(ox = pxf[i], oy = pyf[i]); } ctx.stroke(); var pxb = []; var pyb = []; epoch = SGP4.EpochNow - 92/ 1440 + dt; for (var i = 0; i < steps; i++) { SGP4._propagate(epoch); pxb.push(LonRadToX(SGP4.Longitude * Math.PI / 180.0)); pyb.push(LatRadToY(SGP4.Latitude * Math.PI / 180.0)); epoch += dt; } ctx.strokeStyle = "rgba(255,255,0,0.8)"; ctx.beginPath(); for (var i = 0; i < steps; i++) { if (i == 0) { ctx.moveTo(ox = pxb[0], oy = pyb[0]); continue; } if (pxb[i] < ox) { ctx.lineTo(pxb[i] + isst_map_w, pyb[i]); ctx.moveTo(ox - isst_map_w, oy); } ctx.lineTo(ox = pxb[i], oy = pyb[i]); } ctx.stroke(); ctx.restore(); SGP4.propagate(); var angles = { iss : 0, head : 0, tail : 0 } var a = 1; var b = steps - 2; var x2 = pxf[a]; var x1 = pxb[b]; if (x2 < x1) x2 += isst_map_w; angles.iss = Math.atan2( pyf[a] - pyb[b], x2 - x1 ) + Math.PI * 0.5; a = steps - 1; b = steps - 2; x2 = pxf[a]; x1 = pxf[b]; if (x2 < x1) x2 += isst_map_w; angles.head = Math.atan2( pyf[a] - pyf[b], x2 - x1 ); a = 1; b = 0; x2 = pxb[a]; x1 = pxb[b]; if (x2 < x1) x2 += isst_map_w; angles.tail = Math.atan2( pyb[a] - pyb[b], x2 - x1 ); var iw = isst_imgs.orbitFwd.width; var ih = isst_imgs.orbitFwd.height; var ar = iw / ih; iw = isst_map_w * 0.05; ih = iw / ar; ctx.save(); a = steps - 1; ctx.translate(pxf[a], pyf[a]); ctx.rotate(angles.head); ctx.drawImage(isst_imgs.orbitFwd, -iw * 0.9, -ih * 0.79, iw, ih); ctx.restore(); iw = isst_imgs.orbitBwd.width; ih = isst_imgs.orbitBwd.height; ar = iw / ih; iw = isst_map_w * 0.05; ih = iw / ar; ctx.save(); a = 0; ctx.translate(pxb[a], pyb[a]); ctx.rotate(angles.tail); ctx.drawImage(isst_imgs.orbitBwd, -iw * 0.1, -ih * 0.21, iw, ih); ctx.restore(); return angles.iss; } function LonRadToX(lon) { return (isst_map_w * (0.5 + lon / (2 * Math.PI))); } function LatRadToY(lat) { return (isst_map_h * (0.5 - lat / Math.PI)); } function YToLatRad(y) { return (-(y-isst_map_h/2)*Math.PI/isst_map_h); } function XToLonRad(x) { return ((x-isst_map_w/2.0)*(2 * Math.PI)/isst_map_w); } var tc = -1; function redrawTrackerTimed() { if (tc != -1) clearTimeout(tc); if (document.getElementById("isst").style.display == "none") return; var t = (new Date()).getTime(); if ((t - lastUpdate) >= nextUpdateStep) { lastUpdate = t; issTracker_init(); return; } SGP4.propagate(); redrawTracker(); printData(); tc = setTimeout(redrawTrackerTimed, 5000); } function changeMetric() { var l = 0; if (SGP4.kUnits == 1.0) { SGP4.setImperial(); l = isst_map_h * 0.04; } else { SGP4.setMetric(); } document.getElementById('btn_metric2').style.left = l + "px"; document.getElementById('waitmsg').style.display = "block"; } function showCover() { isst_map_w = (!isDocumentInFullScreenMode()) ? document.getElementById('isst').offsetWidth : screen.width; isst_map_h = Math.round(isst_map_w * 9.0 / 16.0); var h = isst_map_h; document.getElementById('isst').style.display = "none"; document.getElementById('cover').style.display = "block"; document.getElementById('isst').style.display = "none"; } function issTracker_init() { showCover(); if (!!document.createElement('canvas').getContext) { var ref = document.getElementById('cover'); ref.style.height = (ref.offsetWidth * 9.0 / 16.0) + "px" canDraw = true; isst_ready = false; isst_ld_progress = isst_ld_steps = 0; loadImages(imagesReady, imagesError); } else { var ref = document.getElementById('errmsg'); ref.innerHTML = "Your browser does not support HTML5"; ref.style.display = "block"; } } </script> <style> @font-face { font-family: 'NotesEsaBold'; src: url('/fonts_webseite/notesstyle-bold-updatedtf-webfont.eot?#iefix') format('embedded-opentype'), url('/fonts_webseite/notesstyle-bold-updatedtf-webfont.woff') format('woff'), url('/fonts_webseite/notesstyle-bold-updatedtf-webfont.ttf') format('truetype'), url('/fonts_webseite/notesstyle-bold-updatedtf-webfont.svg#CenturyGothic') format('svg'); font-weight:normal; font-style:normal; } @font-face { font-family:'NotesEsaRegular'; src: url('/fonts_webseite/NotesEsaReg.eot'); src:url('/fonts_webseite/NotesEsaReg.eot?#iefix') format('embedded-opentype'), url('/fonts_webseite/NotesEsaReg.ttf') format('truetype'), url('/fonts_webseite/NotesEsaReg.svg#NotesEsaReg') format('svg'); font-weight:normal;font-style:normal} html {font-family:"Arial", sans-serif;font-size:13pt;color:white;background-color:#cccccc;} html, body, div, canvas, p, table {margin:0;padding:0;border:0;} #cover {width:100%;max-width:625px;background-color:#cccccc;background:url('/image/cover.jpg'); background-position:center;background-size:cover;} #isst {width:100%;max-width:625px;display:none;} #isstwp {width:100%;} #isst_dt {font-family:"NotesEsaRegular", sans-serif;position:relative;} .isst_cl {font-size:1rem;color:rgba(255,255,255,0.7);} .isst_cd {font-size:1.3rem;} #btns {position:absolute;top:0;right:0;} #btn_metric {width:50px;height:25px;border-radius:100pt; border:2px rgba(255,255,255,0.5) solid;position:relative;cursor:pointer;} #btn_metric2 {height:25px;width:25px;border-radius:100pt;background-color:white; position:absolute;left:0px;} #btn_fs {cursor:pointer;} #btn_fse {cursor:pointer;} #waitmsg {display:none;background-color:rgba(0, 0, 0, 0.75);text-align:center; position:absolute;top:0;left:0;width:100%;font-size:1.1rem;} #errmsg {text-align:center;padding:10pt 0pt 10pt 0pt;background-color:#ff0000; font-size:9pt;display:none;} #isstgap {height:0;background-color:black;} #isstgap2 {height:0;background-color:black;} </style> </head> <body onload="javascript:issTracker_init();" onresize="javascript:issTrackerResize();"> <center> <div id="cover" style="display: none; height: 351.562px; max-width: 625px; width: 625px;"> <div id="errmsg"></div> </div> <div id="isst" style="display: block; max-width: 625px;"> <div id="isstwp"> <div id="isstgap" style="height: 0px;">&nbsp;</div> <div id="isst_ls" style="background-color: rgb(34, 34, 34); height: 313px;"> <canvas id="isst_map" style="z-index:0;" width="625" height="313"></canvas></div> <div id="isst_dt" style="background-color: rgb(0, 84, 159); height: 39px;"> <table height="100%" cellspacing="0" cellpadding="0" border="0"> <tbody><tr> <td> <div class="isst_cl">Latitude</div> <div id="isst_lat" class="isst_cd">12,7 N</div> </td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td> <div class="isst_cl">Longitude</div> <div id="isst_lon" class="isst_cd">40,1 W</div> </td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td> <div class="isst_cl">Altitude</div> <div id="isst_alt" class="isst_cd">420 km</div> </td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td> <div class="isst_cl">Speed</div> <div id="isst_spd" class="isst_cd">27574 km/h</div> </td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td> <div class="isst_cl">Time (GMT)</div> <div id="isst_tim" class="isst_cd">07 Jan 2023, 23:01:27</div> </td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td>&nbsp;&nbsp;&nbsp;</td> <td> <table cellspacing="0" cellpadding="0" border="0"> <tbody><tr> <td> Metric / Imperial&nbsp;&nbsp; </td> <td> <div id="btn_metric" onclick="javascript:changeMetric();" style="width: 25.04px; height: 12.52px;"> <div id="btn_metric2" style="width: 12.52px; height: 12.52px; left: 0px;"></div> </div> </td> </tr> </tbody></table> </td> <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td> <td> <div onclick="javascript:manageFullScreen();"> <img id="btn_fs" src="/image/fullscreen.png" style="height: 18.78px; display: block;"></div> </td> </tr> </tbody></table> <div id="waitmsg" style="height: 39px; display: none;"><div><br>Please wait...</div></div> </div> <div id="isstgap2" style="height: 0px;">&nbsp;</div> </div> </div> </center> </body></html>