Hier kann man sehen, wo die ISS gerade ist .
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 = " ";
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;"> </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> </td>
<td>
<div class="isst_cl">Longitude</div>
<div id="isst_lon" class="isst_cd">40,1 W</div>
</td>
<td> </td>
<td>
<div class="isst_cl">Altitude</div>
<div id="isst_alt" class="isst_cd">420 km</div>
</td>
<td> </td>
<td>
<div class="isst_cl">Speed</div>
<div id="isst_spd" class="isst_cd">27574 km/h</div>
</td>
<td> </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> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td>
<table cellspacing="0" cellpadding="0" border="0">
<tbody><tr>
<td>
Metric / Imperial
</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> </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;"> </div>
</div>
</div>
</center>
</body></html>