function CalculateCoorinate() { var degrees,minute,seconds,SiteLon,SiteLat //Latitude=1*document.Ephem.Latitude.value; //LatitudeDirection=document.Ephem.LatitudeDirection.value; //Longitude=1*document.Ephem.Longitude.value; SiteLat=1*document.Ephem.Latitude.value; SiteLon=1*document.Ephem.Longitude.value; degrees=Math.floor(SiteLat); minutes=Math.floor((SiteLat-degrees)*60); seconds= Math.floor(((SiteLat-degrees)*60- minutes)*60); document.Ephem.LatDegrees.value=degrees; document.Ephem.LatMinutes.value=minutes; document.Ephem.LatSeconds.value=seconds; degrees=Math.floor(SiteLon); minutes=Math.floor((SiteLon-degrees)*60); seconds= Math.floor(((SiteLon-degrees)*60- minutes)*60); document.Ephem.LonDegrees.value=degrees; document.Ephem.LonMinutes.value=minutes; document.Ephem.LonSeconds.value=seconds; } function CalculateLat() { var degrees,minutes,seconds,decimaldegrees degrees=1*document.Ephem.LatDegrees.value; minutes=1*document.Ephem.LatMinutes.value; seconds=1*document.Ephem.LatSeconds.value; decimaldegrees= degrees + (minutes/60) + (seconds/(60*60)); document.Ephem.Latitude.value=formatvalue(decimaldegrees,6); } function CalculateLon() { var degrees,minutes,seconds,decimaldegrees degrees=1*document.Ephem.LonDegrees.value; minutes=1*document.Ephem.LonMinutes.value; seconds=1*document.Ephem.LonSeconds.value; decimaldegrees= degrees + (minutes/60) + (seconds/(60*60)); document.Ephem.Longitude.value=formatvalue(decimaldegrees,6); } function file1_onchange() { ReadFromEphemFile() } var NomSatelliteLongitude,IntelsatID function ReadFromEphemFile() { if ((document.Ephem.file1.value!=="")&&(document.Ephem.file1.value!==null)) { //alert("ReadFromFile"); var s,s2,fs,minus, a, ForReading,V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11 var YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,yr ForReading=1; // Read only !! var tab=new Array(); var tab2=new Array(); fs = new ActiveXObject("Scripting.FileSystemObject"); a = fs.OpenTextFile(document.Ephem.file1.value, ForReading, false); //a = fs.OpenTextFile("e:\\11parameter\359m.txt", ForReading, false); s = a.ReadLine( ); while (s.match(/YEAR/)==null) { s = a.ReadLine( ); if (s.match(/SUBJECT:/)=="SUBJECT:") { tab=s.split(/\s+/); tab2[20]=tab[4]+" "+tab[5];// for listing and document title. if (tab[6]!=null) tab2[20]+=tab[6]; //alert("tab[6]="+tab[6]+ ((tab[6]==tab[88]) )); if (tab.length>7) tab2[20]+=tab[7]; // adds another index if it's used IntelsatID=tab2[20]; // Must be deleted if none intelsat 11 parameter file is read } } IntelsatID=tab2[20]; s = a.ReadLine( ); // First line containing data s = s.replace(/\(MINUS\)/g, ""); tab=s.split(/\s+/); if (tab[0]<99) tab2[0]=parseFloat(tab[0])+2000 else tab2[0]=parseFloat(tab[0]); // YEAR tab2[1]=parseFloat(tab[1]); // MONTH tab2[2]=parseFloat(tab[2]); // DAY tab2[3]=parseFloat(tab[3]); // HOUR tab2[4]=parseFloat(tab[4]); // MINUTE tab2[5]=parseFloat(tab[5]); // SECOND while (s.match(/LM0/)==null) s = a.ReadLine( ); s = a.ReadLine( );// Read and throw... s = a.ReadLine( ); s = s.replace(/\(MINUS\)/g, ""); tab=s.split(/\s+/); tab2[6]=parseFloat(tab[0]); tab2[7]=parseFloat(tab[1]); tab2[8]=parseFloat(tab[2]); while (s.match(/LONC/)==null) s = a.ReadLine( ); s = a.ReadLine( );// Read and throw... s = a.ReadLine( ); s = s.replace(/\(MINUS\)/g, ""); tab=s.split(/\s+/); tab2[9]=parseFloat(tab[0]); tab2[10]=parseFloat(tab[1]); tab2[11]=parseFloat(tab[2]); tab2[12]=parseFloat(tab[3]); while (s.match(/LATC/)==null) s = a.ReadLine( ); s = a.ReadLine( );// Read and throw... s = a.ReadLine( ); s = s.replace(/\(MINUS\)/g, ""); tab=s.split(/\s+/); tab2[13]=parseFloat(tab[0]); tab2[14]=parseFloat(tab[1]); tab2[15]=parseFloat(tab[2]); tab2[16]=parseFloat(tab[3]); while (s.match(/THE NOMINAL/)==null) s = a.ReadLine( ); tab=s.split(/\s+/); tab2[19]=tab[8]; while (s.match(/EPOCH ARE/)==null) s = a.ReadLine( ); s = s.replace(/EPOCH ARE/g, " "); s = s.replace(/DEG. E. AND /g, ""); // For INTELSAT/THOR 11 parameter txt file s = s.replace(/DEG. E AND /g, " "); // For NSS 11 parameter txt file s = s.replace(/DEG. N./g, ""); // For INTELSAT/THOR 11 parameter txt file s = s.replace(/DEG. N /g, ""); // For NSS 11 parameter txt file //EPOCH ARE 338.5421 DEG. E AND -.0268 DEG. N NSS //EPOCH ARE 359.1222 DEG. E. AND -.0479 DEG. N. INTELSAT/THOR //alert("|"+s); tab=s.split(/\s+/); //alert(tab[0]+tab[1]+tab[2]); tab2[17]=parseFloat(tab[0]); tab2[18]=parseFloat(tab[1]); a.Close(); // Close the file document.Ephem.LM0.value=tab2[6]; document.Ephem.LM1.value=tab2[7]; document.Ephem.LM2.value=tab2[8]; document.Ephem.LONC.value=tab2[9]; //4 document.Ephem.LONC1.value=tab2[10]; //5 document.Ephem.LONS.value=tab2[11]; //6 document.Ephem.LONS1.value=tab2[12]; //7 document.Ephem.LATC.value=tab2[13]; //8 document.Ephem.LATC1.value=tab2[14]; //9 document.Ephem.LATS.value=tab2[15]; //10 document.Ephem.LATS1.value=tab2[16]; //11 document.Ephem.PREDICTEDLONGITUDE.value=tab2[17]; //16 document.Ephem.PREDICTEDLATITUDE.value=tab2[18]; document.Ephem.YEAR.value=tab2[0]; //19 document.Ephem.MONTH.value=tab2[1]; //20 document.Ephem.DAY.value=tab2[2]; //21 document.Ephem.HOUR.value=tab2[3]; //22 document.Ephem.MINUTE.value=tab2[4]; //23 document.Ephem.SECOND.value=tab2[5]; document.Ephem.NOMLON.value=tab2[19]; //nominal satellite longitude SetCookie(); // remember the values } // end if } function ShowCredit() { var credittext credittext="First uploaded 06052001 " credittext=credittext+"\nProgrammed by Jens T. Satre" credittext=credittext+"\nJens-Torbjorn.Satre@telenor.com" credittext=credittext+"\nScript for antenna pointing as decribed in Intelsat IESS-412" credittext=credittext+"\n0605-2001: Uploaded. Listing and values stored in cookies to be done.." credittext=credittext+"\n0705-2001: Added values stored in cookie. Azimuth&Elevation 170 Hour listings still to be done..." credittext=credittext+"\n0805-2001: Added Azimuth&Elevation 170 Hour listings." credittext=credittext+"\n0905-2001: Added Azimuth&Elevation&Longitude&Latitude autoupdating based on the PC's UTC time" credittext=credittext+"\n0905-2001: Added nominal Azimuth & Elevation at the start of the 170 Hour listing" credittext=credittext+"\n1405-2001: Added file import from Intelsat 11 parameter txt file." credittext=credittext+"\n2105-2001: Improved file import routine. Works with MS IE5.0 now (maybee 4.0 also) but MS IE 5.5 is preferred" credittext=credittext+"\n2205-2001: Improved file import routine for MS IE5.0(maybee IE4.0 work too ?)" credittext=credittext+"\n2205-2001: Corrected bug in azimuth&elevation calculation which restulted in 2/100 degrees error on elevation" credittext=credittext+"\n2205-2001: Listing:Added nominal azimuth&elevation during the 170 Hour period" credittext=credittext+"\n2505-2001: Listing:Added ephemeris filename in listing" credittext=credittext+"\n2605-2001: Listing:Added azimuth,elevation and longitude error to listing" credittext=credittext+"\n2605-2001: Corrected a error which occured while reloading the page" credittext=credittext+"\n2705-2001: Formatting numbers by using a VBscript function. IE5.0 or later MUST be used ! " credittext=credittext+"\n2805-2001: Corrected a error that occured with IE 5.0. It's recommended to use IE5.5 !!!!" credittext=credittext+"\n1106-2001: Listing: Added distance to satellite and uplink delay (same as the downlink delay)" credittext=credittext+"\n1408-2001: Improved file import routine. Supports different file intro text." credittext=credittext+"\n1508-2001: Corrected problem when year 0-99 is used instead of year 2000-2099" credittext=credittext+"\n1302-2002: Added user selectable listingperiod in days" credittext=credittext+"\n1302-2002: Added printer friendly report of current calculated values to a new window" credittext=credittext+"\n1402-2002: Corrected some small bugs in the printer friendly report of current calculated values" credittext=credittext+"\n0906-2002: Added listing which makes it possible to find optimal time for a non-tracking antenna peakng" credittext=credittext+"\n1006-2002: Added support for New Satellite Skies ephemeris txt format" credittext=credittext+"\n0812-2002: Changed layout" credittext=credittext+"\n2001-2003: Corrected a bug resulting in 'time outside valid period'comment " credittext=credittext+"\n2104-2003: Added more coordinates" credittext=credittext+"\n1007-2003: Added more coordinates" credittext=credittext+"\n3008-2003: Added support for degree,minute,seconds coordinates" credittext=credittext+"\n0801-2006: NOL error added in 170H listing. NOL is Nominal Orbital Location error is in degree*1000" credittext=credittext+"\n0312-2006: Changes to make . and , work as decimal separator" alert(credittext); } function ReadPosition() // Store the selected position in the cookie { var Lat,Lon,LatDir,LonDir,CookieValue,MyVal var ValArray=new Array(); var SubArray=new Array(); MyVal=document.Ephem.Location.value; if (MyVal == null) alert("Error in site location data"); if (MyVal !== null) { // Check position ValArray=MyVal.split(","); SubArray = ValArray[0].split(":") ; // The first subarray containing Lat:LatDir Lat=SubArray[0]; LatDir=SubArray[1]; SubArray = ValArray[1].split(":"); // The second subarray containing Lon:LonDir Lon=SubArray[0]; LonDir=SubArray[1]; if (LonDir=="West") { Lon=360-Lon; // Convert to degrees east LonDir="East"; } document.Ephem.Latitude.value=Lat ; // Set user defaults if cookie already stored on the system document.Ephem.LatitudeDirection.value=LatDir ; // Set user defaults if cookie already stored on the system document.Ephem.Longitude.value=Lon ; // Set user defaults if cookie already stored on the system document.Ephem.LongitudeDirection.value=LonDir ; // Set user defaults if cookie already stored on the system } } // End function function SetCookie() { var LM0,LM1,LM2,LONC,LONC1,LONS,LONS1,LATC,LATC1,LATS,LATS1 var LatitudeDirection,Latitude,LongitudeDirection,Longitude,PREDICTEDLONGITUDE,PREDICTEDLATITUDE,H var SitePosCurrentIndex var YEAR,MONTH,DAY,HOUR,MINUTE,SECOND var INPUTYEAR,INPUTMONTH,INPUTDAY,INPUTHOUR,INPUTMINUTE,INPUTSECOND var CookieValue H=1*document.Ephem.Height.value; //0 Height above sea level LM0=1*document.Ephem.LM0.value; //1 LM1=1*document.Ephem.LM1.value; //2 LM2=1*document.Ephem.LM2.value; //3 LONC=1*document.Ephem.LONC.value; //4 LONC1=1*document.Ephem.LONC1.value; //5 LONS=1*document.Ephem.LONS.value; //6 LONS1=1*document.Ephem.LONS1.value; //7 LATC=1*document.Ephem.LATC.value; //8 LATC1=1*document.Ephem.LATC1.value; //9 LATS=1*document.Ephem.LATS.value; //10 LATS1=1*document.Ephem.LATS1.value; //11 Longitude=1*document.Ephem.Longitude.value; //12 LongitudeDirection=document.Ephem.LongitudeDirection.value; //13 Latitude=1*document.Ephem.Latitude.value; //14 LatitudeDirection=document.Ephem.LatitudeDirection.value; //15 PREDICTEDLONGITUDE=1*document.Ephem.PREDICTEDLONGITUDE.value; //16 PREDICTEDLATITUDE=1*document.Ephem.PREDICTEDLATITUDE.value; //17 SitePosCurrentIndex=document.Ephem.Location.selectedIndex; //18 YEAR=1*document.Ephem.YEAR.value; //19 MONTH=1*document.Ephem.MONTH.value; //20 DAY=1*document.Ephem.DAY.value; //21 HOUR=1*document.Ephem.HOUR.value; //22 MINUTE=1*document.Ephem.MINUTE.value; //23 SECOND=1*document.Ephem.SECOND.value; //24 INPUTYEAR=1*document.Ephem.INPUTYEAR.value; //25 INPUTMONTH=1*document.Ephem.INPUTMONTH.value; //26 INPUTDAY=1*document.Ephem.INPUTDAY.value; //27 INPUTHOUR=1*document.Ephem.INPUTHOUR.value; //28 INPUTMINUTE=1*document.Ephem.INPUTMINUTE.value; //29 INPUTSECOND=1*document.Ephem.INPUTSECOND.value; //30 CookieValue=H+"#"; CookieValue+=LM0+"#"; CookieValue+=LM1+"#"; CookieValue+=LM2+"#"; CookieValue+=LONC+"#"; CookieValue+=LONC1+"#"; CookieValue+=LONS+"#"; CookieValue+=LONS1+"#"; CookieValue+=LATC+"#"; CookieValue+=LATC1+"#"; CookieValue+=LATS+"#"; CookieValue+=LATS1+"#"; CookieValue+=Longitude+"#"; CookieValue+=LongitudeDirection+"#"; CookieValue+=Latitude+"#"; CookieValue+=LatitudeDirection+"#"; CookieValue+=PREDICTEDLONGITUDE+"#"; CookieValue+=PREDICTEDLATITUDE+"#"; CookieValue+=SitePosCurrentIndex+"#"; CookieValue+=YEAR+"#"; CookieValue+=MONTH+"#"; CookieValue+=DAY+"#"; CookieValue+=HOUR+"#"; CookieValue+=MINUTE+"#"; CookieValue+=SECOND+"#"; CookieValue+=INPUTYEAR+"#"; CookieValue+=INPUTMONTH+"#"; CookieValue+=INPUTDAY+"#"; CookieValue+=INPUTHOUR+"#"; CookieValue+=INPUTMINUTE+"#"; CookieValue+=INPUTSECOND+"#"; CookieValue+=document.Ephem.NOMLON.value+"#"; //CookieValue+=document.Ephem.file1.value+"#"; CookieValue+=";expires=Tue, 10 Jul 2040 23:59:59 UTC;"; document.cookie =CookieValue ; // Store cookie } function ReadCookie() { var LM0,LM1,LM2,LONC,LONC1,LONS,LONS1,LATC,LATC1,LATS,LATS1 var LatitudeDirection,Latitude,LongitudeDirection,Longitude,PREDICTEDLONGITUDE,PREDICTEDLATITUDE var SitePosCurrentIndex,MyCookieVal var CookieValue var YEAR,MONTH,DAY,HOUR,MINUTE,SECOND var INPUTYEAR,INPUTMONTH,INPUTDAY,INPUTHOUR,INPUTMINUTE,INPUTSECOND var CookieArray=new Array(); MyCookieVal=document.cookie; //alert(MyCookieVal); if (MyCookieVal == "") alert("There is a cookie error!\n\n\nThe reason can be that \nthe calculator has not\nbeen used on this computer\nbefore."); if ((MyCookieVal !=="")&&(MyCookieVal.match(/:/)==null)) // If cookie has a valid value then set users defaults { CookieArray=MyCookieVal.split("#"); // Reads cookie values in to the array document.Ephem.Height.value=CookieArray[0]; //0 Height above sea level document.Ephem.LM0.value=CookieArray[1]; //1 document.Ephem.LM1.value=CookieArray[2]; //2 document.Ephem.LM2.value=CookieArray[3]; //3 document.Ephem.LONC.value=CookieArray[4]; //4 document.Ephem.LONC1.value=CookieArray[5]; //5 document.Ephem.LONS.value=CookieArray[6]; //6 document.Ephem.LONS1.value=CookieArray[7]; //7 document.Ephem.LATC.value=CookieArray[8]; //8 document.Ephem.LATC1.value=CookieArray[9]; //9 document.Ephem.LATS.value=CookieArray[10]; //10 document.Ephem.LATS1.value=CookieArray[11]; //11 document.Ephem.Longitude.value=CookieArray[12]; //12 document.Ephem.LongitudeDirection.value=CookieArray[13]; //13 document.Ephem.Latitude.value=CookieArray[14]; //14 document.Ephem.LatitudeDirection.value=CookieArray[15]; //15 document.Ephem.PREDICTEDLONGITUDE.value=CookieArray[16]; //16 document.Ephem.PREDICTEDLATITUDE.value=CookieArray[17]; //17 document.Ephem.Location.selectedIndex=CookieArray[18]; //18 document.Ephem.YEAR.value=CookieArray[19]; //19 document.Ephem.MONTH.value=CookieArray[20]; //20 document.Ephem.DAY.value=CookieArray[21]; //21 document.Ephem.HOUR.value=CookieArray[22]; //22 document.Ephem.MINUTE.value=CookieArray[23]; //23 document.Ephem.SECOND.value=CookieArray[24]; //24 document.Ephem.INPUTYEAR.value=CookieArray[25]; //25 document.Ephem.INPUTMONTH.value=CookieArray[26]; //26 document.Ephem.INPUTDAY.value=CookieArray[27]; //27 document.Ephem.INPUTHOUR.value=CookieArray[28]; //28 document.Ephem.INPUTMINUTE.value=CookieArray[29]; //29 document.Ephem.INPUTSECOND.value=CookieArray[30]; //30 document.Ephem.NOMLON.value=CookieArray[31]; //31 // document.Ephem.file1.value=CookieArray[32]; //32 // alert(CookieArray[32]); } else { SitePosCurrentIndex =1074 ; // Used only if there are not any cookie stored document.cookie=""; } } // end function function autoupdate() { var result=new Array(4); var Azimuth,Elevation,SatLon,SatLat,d,MJDbase,actualMJD,T var INPUTYEAR,INPUTMONTH,INPUTDAY,INPUTHOUR,INPUTMINUTE,INPUTSECOND var YEAR,MONTH,DAY,HOUR,MINUTE,SECOND var LatitudeDirection,Latitude,LongitudeDirection,Longitude,Height,a var a= new Date(); YEAR=1*document.Ephem.YEAR.value; MONTH=1*document.Ephem.MONTH.value; DAY=1*document.Ephem.DAY.value; HOUR=1*document.Ephem.HOUR.value; MINUTE=1*document.Ephem.MINUTE.value; SECOND=1*document.Ephem.SECOND.value; d=daynumber(DAY,MONTH,YEAR,HOUR,MINUTE,SECOND) ; MJDbase=toMJD(d); Latitude=1*document.Ephem.Latitude.value; LatitudeDirection=document.Ephem.LatitudeDirection.value; Longitude=1*document.Ephem.Longitude.value; LongitudeDirection=document.Ephem.LongitudeDirection.value; Height=1*document.Ephem.Height.value/1000; if (LatitudeDirection=="South") Latitude=-Latitude; if (LongitudeDirection=="West") Longitude=360-Longitude; // add hours // x hours in days // (x/24) INPUTYEAR=a.getUTCFullYear(); INPUTMONTH=a.getUTCMonth()+1; INPUTDAY=a.getUTCDate(); INPUTHOUR=a.getUTCHours(); INPUTMINUTE=a.getUTCMinutes(); INPUTSECOND=a.getUTCSeconds(); document.Ephem.INPUTYEAR.value=INPUTYEAR; document.Ephem.INPUTMONTH.value=INPUTMONTH; document.Ephem.INPUTDAY.value=INPUTDAY; document.Ephem.INPUTHOUR.value=INPUTHOUR; document.Ephem.INPUTMINUTE.value=INPUTMINUTE; document.Ephem.INPUTSECOND.value=INPUTSECOND; d=daynumber(INPUTDAY,INPUTMONTH,INPUTYEAR,INPUTHOUR,INPUTMINUTE,INPUTSECOND) ; actualMJD=toMJD(d); T= actualMJD -MJDbase; if ((T<((170+1)/24))&&(T>=0)) { //alert(actualMJD); result=Ephem(T,Latitude,Longitude,Height); Azimuth= formatvalue(result[0],4); Elevation=formatvalue(result[1],4); SatLon=formatvalue(result[2],4); SatLat=formatvalue(result[3],4); document.Ephem.SatLon.value=SatLon+" °"; document.Ephem.SatLat.value=SatLat+" °"; document.Ephem.Azimuth.value=Azimuth+" °"; document.Ephem.Elevation.value=Elevation+" °"; T=170/24; result=Ephem(T,Latitude,Longitude,Height); SatLon=formatvalue(result[2],4); SatLat=formatvalue(result[3],4); document.Ephem.LONGITUDE170.value=SatLon+" °"; document.Ephem.LATITUDE170.value=SatLat+" °"; document.Ephem.Comment.value="Calculation OK"; if (parseFloat(document.Ephem.PREDICTEDLONGITUDE.value) !== parseFloat(SatLon)) document.Ephem.Comment.value="Predicted Longitude does not equals calculated !"; if (parseFloat(document.Ephem.PREDICTEDLATITUDE.value ) !== parseFloat(SatLat)) document.Ephem.Comment.value="Predicted Latitude does not equals calculated !"; } else { document.Ephem.SatLon.value="N/A"; document.Ephem.SatLat.value="N/A"; document.Ephem.Azimuth.value="N/A"; document.Ephem.Elevation.value="N/A"; document.Ephem.LONGITUDE170.value="N/A"; document.Ephem.LATITUDE170.value="N/A"; document.Ephem.Comment.value="Time outside the valid 170 Hours 11 parameter period !"; } } function update_UTC() { var result=new Array(4); var Azimuth,Elevation,SatLon,SatLat,d,MJDbase,actualMJD,T var INPUTYEAR,INPUTMONTH,INPUTDAY,INPUTHOUR,INPUTMINUTE,INPUTSECOND var YEAR,MONTH,DAY,HOUR,MINUTE,SECOND var LatitudeDirection,Latitude,LongitudeDirection,Longitude,Height,a var a= new Date(); YEAR=1*document.Ephem.YEAR.value; MONTH=1*document.Ephem.MONTH.value; DAY=1*document.Ephem.DAY.value; HOUR=1*document.Ephem.HOUR.value; MINUTE=1*document.Ephem.MINUTE.value; SECOND=1*document.Ephem.SECOND.value; d=daynumber(DAY,MONTH,YEAR,HOUR,MINUTE,SECOND) ; MJDbase=toMJD(d); Latitude=1*document.Ephem.Latitude.value; LatitudeDirection=document.Ephem.LatitudeDirection.value; Longitude=1*document.Ephem.Longitude.value; LongitudeDirection=document.Ephem.LongitudeDirection.value; Height=1*document.Ephem.Height.value/1000; if (LatitudeDirection=="South") Latitude=-Latitude; if (LongitudeDirection=="West") Longitude=360-Longitude; // add hours // x hours in days // (x/24) INPUTYEAR=a.getUTCFullYear(); INPUTMONTH=a.getUTCMonth()+1; INPUTDAY=a.getUTCDate(); INPUTHOUR=a.getUTCHours(); INPUTMINUTE=a.getUTCMinutes(); INPUTSECOND=a.getUTCSeconds(); document.Ephem.INPUTYEAR.value=INPUTYEAR; document.Ephem.INPUTMONTH.value=INPUTMONTH; document.Ephem.INPUTDAY.value=INPUTDAY; document.Ephem.INPUTHOUR.value=INPUTHOUR; document.Ephem.INPUTMINUTE.value=INPUTMINUTE; document.Ephem.INPUTSECOND.value=INPUTSECOND; d=daynumber(INPUTDAY,INPUTMONTH,INPUTYEAR,INPUTHOUR,INPUTMINUTE,INPUTSECOND) ; actualMJD=toMJD(d); T= actualMJD -MJDbase; if ((T<((170+1)/24))&&(T>=0)) { //alert(actualMJD); result=Ephem(T,Latitude,Longitude,Height); Azimuth= formatvalue(result[0],4); Elevation=formatvalue(result[1],4); SatLon=formatvalue(result[2],4); SatLat=formatvalue(result[3],4); document.Ephem.SatLon.value=SatLon+" °"; document.Ephem.SatLat.value=SatLat+" °"; document.Ephem.Azimuth.value=Azimuth+" °"; document.Ephem.Elevation.value=Elevation+" °"; T=170/24; result=Ephem(T,Latitude,Longitude,Height); SatLon=formatvalue(result[2],4); SatLat=formatvalue(result[3],4); document.Ephem.LONGITUDE170.value=SatLon+" °"; document.Ephem.LATITUDE170.value=SatLat+" °"; document.Ephem.Comment.value="Calculation OK"; if (parseFloat(document.Ephem.PREDICTEDLONGITUDE.value) !== parseFloat(SatLon)) document.Ephem.Comment.value="Predicted Longitude does not equals calculated !"; if (parseFloat(document.Ephem.PREDICTEDLATITUDE.value ) !== parseFloat(SatLat)) document.Ephem.Comment.value="Predicted Latitude does not equals calculated !"; } else { document.Ephem.SatLon.value="N/A"; document.Ephem.SatLat.value="N/A"; document.Ephem.Azimuth.value="N/A"; document.Ephem.Elevation.value="N/A"; document.Ephem.LONGITUDE170.value="N/A"; document.Ephem.LATITUDE170.value="N/A"; //alert("T="+T); document.Ephem.Comment.value="Time outside the valid 170 Hours 11 parameter period !"; } } function main() { var result=new Array(4); var Azimuth,Elevation,SatLon,SatLat,d,MJDbase,actualMJD,T var INPUTYEAR,INPUTMONTH,INPUTDAY,INPUTHOUR,INPUTMINUTE,INPUTSECOND var YEAR,MONTH,DAY,HOUR,MINUTE,SECOND var LatitudeDirection,Latitude,LongitudeDirection,Longitude,Height YEAR=1*document.Ephem.YEAR.value; MONTH=1*document.Ephem.MONTH.value; DAY=1*document.Ephem.DAY.value; HOUR=1*document.Ephem.HOUR.value; MINUTE=1*document.Ephem.MINUTE.value; SECOND=1*document.Ephem.SECOND.value; d=daynumber(DAY,MONTH,YEAR,HOUR,MINUTE,SECOND) ; MJDbase=toMJD(d); Latitude=1*document.Ephem.Latitude.value; LatitudeDirection=document.Ephem.LatitudeDirection.value; Longitude=1*document.Ephem.Longitude.value; LongitudeDirection=document.Ephem.LongitudeDirection.value; Height=1*document.Ephem.Height.value/1000; if (LatitudeDirection=="South") Latitude=-Latitude; if (LongitudeDirection=="West") Longitude=360-Longitude; // add hours // x hours in days // (x/24) INPUTYEAR=1*document.Ephem.INPUTYEAR.value; INPUTMONTH=1*document.Ephem.INPUTMONTH.value; INPUTDAY=1*document.Ephem.INPUTDAY.value; INPUTHOUR=1*document.Ephem.INPUTHOUR.value; INPUTMINUTE=1*document.Ephem.INPUTMINUTE.value; INPUTSECOND=1*document.Ephem.INPUTSECOND.value; d=daynumber(INPUTDAY,INPUTMONTH,INPUTYEAR,INPUTHOUR,INPUTMINUTE,INPUTSECOND) ; actualMJD=toMJD(d); T= actualMJD -MJDbase; if ((T<((170+1)/24))&&(T>=0)) { //alert(actualMJD); result=Ephem(T,Latitude,Longitude,Height); Azimuth= formatvalue(result[0],4); Elevation=formatvalue(result[1],4); SatLon=formatvalue(result[2],4); SatLat=formatvalue(result[3],4); document.Ephem.SatLon.value=SatLon+" °"; document.Ephem.SatLat.value=SatLat+" °"; document.Ephem.Azimuth.value=Azimuth+" °"; document.Ephem.Elevation.value=Elevation+" °"; T=170/24; result=Ephem(T,Latitude,Longitude,Height); SatLon=formatvalue(result[2],4); SatLat=formatvalue(result[3],4); document.Ephem.LONGITUDE170.value=SatLon+" °"; document.Ephem.LATITUDE170.value=SatLat+" °"; document.Ephem.Comment.value="Calculation OK"; if (parseFloat(document.Ephem.PREDICTEDLONGITUDE.value) !== parseFloat(SatLon)) document.Ephem.Comment.value="Predicted Longitude does not equals calculated !"; if (parseFloat(document.Ephem.PREDICTEDLATITUDE.value ) !== parseFloat(SatLat)) document.Ephem.Comment.value="Predicted Latitude does not equals calculated !"; } else { document.Ephem.SatLon.value="N/A"; document.Ephem.SatLat.value="N/A"; document.Ephem.Azimuth.value="N/A"; document.Ephem.Elevation.value="N/A"; document.Ephem.LONGITUDE170.value="N/A"; document.Ephem.LATITUDE170.value="N/A"; //alert("T="+T); document.Ephem.Comment.value="Time outside the valid 170 Hours 11 parameter period !"; } } function PrintValues() // Generates a report of the current values in a new window { var Listing,Hemisp,Hemisp,Pos,PosNumeric,StrPos var StrPos=new Array(); Listing=""; Listing+="\n
"; Listing+="\n"; Listing+="\n"; Listing+="\n"; Listing+="\n"; Listing+="\nPrintable Report of Current Calculated Pointing Data
"; Listing+="\n";
// Place text output
if ((document.Ephem.Comment.value!="Calculation OK") && (document.Ephem.Comment.value!="")) Listing+="\n Error: "+document.Ephem.Comment.value+" SATELLITE POINTING DATA "+IntelsatID+" EAST Date & UTC time="+document.Ephem.INPUTDAY.value+"."+document.Ephem.INPUTMONTH.value+"."+document.Ephem.INPUTYEAR.value+" "+document.Ephem.INPUTHOUR.value+":"+document.Ephem.INPUTMINUTE.value+":"+document.Ephem.INPUTSECOND.value+" UTC EarthStation Latitude="+document.Ephem.Latitude.value+" ° "+document.Ephem.LatitudeDirection.value+" EarthStation Longitude="+document.Ephem.Longitude.value+" ° "+document.Ephem.LongitudeDirection.value+" Satellite Longitude="+document.Ephem.SatLon.value+" East"+" Satellite Latitude="+document.Ephem.SatLat.value+" "+Hemisp+" Calculated Satellite Longitude after 170 Hours="+document.Ephem.LONGITUDE170.value+" East Predicted Satellite Longitude after 170 Hours="+document.Ephem.PREDICTEDLONGITUDE.value+" ° "+" East Calculated Satellite Latitude after 170 Hours="+document.Ephem.LATITUDE170.value+" "+Hemisp+" Predicted Satellite Latitude after 170 Hours="+document.Ephem.PREDICTEDLATITUDE.value+" ° "+" "+Hemisp+" Azimuth="+document.Ephem.Azimuth.value+" Elevation="+document.Ephem.Elevation.value+"
";
if (IntelsatID!=null) {
Listing+="\r "+ListingPeriod+" HOUR LISTING "+IntelsatID+" AT "+1*document.Ephem.NOMLON.value+" EAST -(C) JENS T. SATRE 2001 ";
}
else
{
Listing+="\r "+ListingPeriod+" HOUR LISTING FOR "+1*document.Ephem.NOMLON.value+" EAST -(C) JENS T. SATRE 2001 ";
}
result=Ephem((170/24),Latitude,Longitude,Height); // Calculated after 170 Hours
SatLon=formatvalue(result[2],4);
SatLat=formatvalue(result[3],4);
if (parseFloat(document.Ephem.PREDICTEDLONGITUDE.value) !== parseFloat(SatLon)){
LonError="(Error)" ;
}
else
{
LonError="";
}
if (parseFloat(document.Ephem.PREDICTEDLATITUDE.value ) !== parseFloat(SatLat)) {
LatError="(Error)" ;
}
else
{
LatError="";
}
Listing+="\r**********************************************************************************************************";
Listing+="\r 11 PARAMETER "+ListingPeriod+" HOUR LISTING";
if (IntelsatID==null)
{
Listing+="\r "+1*document.Ephem.NOMLON.value+" EAST";
}
else
{
Listing+="\r "+IntelsatID+" AT "+1*document.Ephem.NOMLON.value+" EAST";
//alert("IntelsatID!==null"+IntelsatID)
}
Listing+="\r PROGRAMMED BY JENS T. SATRE";
Listing+="\r Jens-Torbjorn.Satre@nittedal.online.no";
Listing+="\r**********************************************************************************************************";
Listing+="\r";
if (document.Ephem.file1.value!=="") {
Listing+="\r Listing generated from ephemeris file: ";
Listing+="\r "+document.Ephem.file1.value+" ";
Listing+="\r";
Listing+="\r**********************************************************************************************************";
Listing+="\r";
}
Listing+="\r Predicted Satellite Longitude after 170 Hour = "+PREDICTEDLONGITUDE+" °";
Listing+="\r Predicted Satellite Latitude after 170 Hour = "+PREDICTEDLATITUDE+" °";
Listing+="\r**********************************************************************************************************";
Listing+="\r";
Listing+="\r Calculated Satellite Longitude after 170 Hour = "+SatLon+" °"+LonError;
Listing+="\r Calculated Satellite Latitude after 170 Hour = "+SatLat+" °"+LatError;
Listing+="\r";
Listing+="\r**********************************************************************************************************";
Listing+="\r";
if (LatitudeDirection=="South") Latitude=-Latitude;
if (LongitudeDirection=="West") Longitude=360-Longitude;
nominal_result=Nominal(0,Latitude,Longitude,Height);
Azimuth= formatvalue(nominal_result[0],4);
Elevation=formatvalue(nominal_result[1],4);
SatLon=formatvalue(nominal_result[2],4);
SatLat=formatvalue(nominal_result[3],4);
nomAzimuth=Azimuth;
nomElevation=Elevation;
nomLon=SatLon;
nomLat=SatLat;
Listing+="\r Nominal Azimuth="+Azimuth+" °";
Listing+="\r Nominal Elevation= "+Elevation+" °";
Listing+="\r";
Listing+="\r**********************************************************************************************************";
Listing+="\r";
nominal_result=NominalThis170Hour(0,Latitude,Longitude,Height); // forstyrrer for NOL beregning lengre ned
Azimuth= formatvalue(nominal_result[0],4);
Elevation=formatvalue(nominal_result[1],4);
Listing+="\r Nominal Azimuth This 170 Hours="+Azimuth+" °";
Listing+="\r Nominal Elevation This 170 Hours= "+Elevation+" °";
Listing+="\r";
Listing+="\r**********************************************************************************************************";
Listing+="\r";
result=Ephem(0,Latitude,Longitude,Height);
Azimuth= formatvalue(result[0],4);
Elevation=formatvalue(result[1],4);
SatLon=formatvalue(result[2],4);
SatLat=formatvalue(result[3],4);
date=MJDtoDate(Div(MJDbase,1));
time=MJDtoTime(MJDbase);
nomLon=nomLon.replace(",",".");
SatLon=SatLon.replace(",",".");
nomLat=nomLat.replace(",",".");
SatLat=SatLat.replace(",",".");
Lon_error=formatvalue((nomLon-SatLon),4)
Lat_error=formatvalue((nomLat-SatLat),4);
nol_error='';
nol_error=formatvalue( (Math.sqrt( (nomLon-SatLon)*(nomLon-SatLon)+result[3]*result[3])*1000) , 1);
//nol_error=Lon_error+" ** "+Lat_error;
//*********************************************************** *************
nomAzimuth=nomAzimuth.replace(",",".");
Azimuth=Azimuth.replace(",",".");
Azimuth_error=formatvalue((nomAzimuth-Azimuth),4);
nomElevation=nomElevation.replace(",",".");
Elevation=Elevation.replace(",",".");
Elevation_error=formatvalue((nomElevation-Elevation),4);
distance=formatvalue(result[4],1);
delay=formatvalue((result[4]*1000/300000000)*1000,5);
//Listing+="\r T "+" D / M / Y"+" "+" H :M :S"+" "+" Azimuth"+" "+"Az.Error"+" "+"Elevation"+" "+"El.Error"+" "+"Longitude"+" "+"Lon.Error"+" "+"Latitude";
Listing+="\r T D / M / Y H :M :S Az AzError El ElErr Lon LonErr LatErr Distance[km] Delay[ms] NOL offset";
// 000 26/05/2001 00:00:00 249.1443 0.0376 3.0934 -0.0053 304.5341 -0.0341 -0.0143
Listing+="\r000 "+date+" "+time+Azimuth+" "+Azimuth_error+" "+Elevation+" "+Elevation_error+SatLon+" "+Lon_error+" "+SatLat+" "+distance+" "+delay+" "+nol_error;
for (i=1; inomLon) Lon_error=formatvalue((SatLon-nomLon),4)
// else
nomLon=nomLon.replace(",",".");
SatLon=SatLon.replace(",",".");
nomLat=nomLat.replace(",",".");
SatLat=SatLat.replace(",",".");
Lon_error=formatvalue((nomLon-SatLon),4);
Lat_error=formatvalue((nomLat-SatLat),4);
Azimuth=Azimuth.replace(",",".");
Azimuth_error=formatvalue((nomAzimuth-Azimuth),4);
nomElevation=nomElevation.replace(",",".");
Elevation=Elevation.replace(",",".");
Elevation_error=formatvalue((nomElevation-Elevation),4);
distance=formatvalue(result[4],1);
delay=formatvalue((result[4]*1000/300000000)*1000,5);
date=MJDtoDate( Div(MJDbase+(i/24),1) );
time=MJDtoTime(MJDbase+(i/24));
nol_error='';
NOL_offset=0;
NOL_offset=Math.sqrt(Lon_error*Lon_error+Lat_error*Lat_error);
//alert(NOL_offset);
nol_error=formatvalue( (Math.sqrt( (nomLon-SatLon)*(nomLon-SatLon)+result[3]*result[3])*1000) , 1);
//nol_error=SatLon+" ** "+nomLon;
//nol_error=Lon_error+" **"+Lat_error;
if (i<10) number="00"+i;
if ((i<100)&&(i>=10)) number="0"+i;
if (i>=100) number=i;
Listing+="\r"+number+" "+date+" "+time+Azimuth+" "+Azimuth_error+" "+Elevation+" "+Elevation_error+SatLon+" "+Lon_error+" "+SatLat+" "+distance+" "+delay+" "+nol_error;
}
Listing+="\r";
Listing+="\r";
Listing+="\r";
Listing+="\r-The delay calculated is the uplink delay (same as the downlink delay)"
Listing+="\r-NOL is the angular distance from Nominal Orbital Location calculated in in E-3 degrees (1/1000 degree)"
Listing+=" ";
//PrintWindow =window.open("","Print_window","menubar=yes,status=yes,toolbar=yes,scrollbars=yes,height=768,width=900");
PrintWindow =window.open("","Print_window")
PrintWindow.oldWindow = top;
PrintWindow.document.write(Listing); // page variable med sidekoden
PrintWindow.document.close();
//document.write(Listing);
}
function TimeToPeak() // Find the optimal time to point a non tracking antenna
{
var result=new Array(4);
var nominal_result=new Array(4);
var Azimuth,Elevation,SatLon,SatLat,d,MJDbase,actualMJD,T,Listing ,PREDICTEDLATITUDE,PREDICTEDLONGITUDE,NOL_offset
var INPUTYEAR,INPUTMONTH,INPUTDAY,INPUTHOUR,INPUTMINUTE,INPUTSECOND,time,number,LatError,LonError
var YEAR,MONTH,DAY,HOUR,MINUTE,SECOND
var LatitudeDirection,Latitude,LongitudeDirection,Longitude,Height,date
var Lon_error,Lat_error,Azimuth_error,Elevation_error,nomAzimuth,nomElevation,nomLon,nomLat,ListingPeriod,T_start
var distance,delay,error,boxsizestring;
YEAR=1*document.Ephem.YEAR.value;
MONTH=1*document.Ephem.MONTH.value;
DAY=1*document.Ephem.DAY.value;
HOUR=1*document.Ephem.HOUR.value;
MINUTE=1*document.Ephem.MINUTE.value;
SECOND=1*document.Ephem.SECOND.value;
PREDICTEDLONGITUDE=document.Ephem.PREDICTEDLONGITUDE.value;
PREDICTEDLATITUDE=document.Ephem.PREDICTEDLATITUDE.value;
ListingPeriod=1*(document.Ephem.ListingPeriod.value*24)+2; // in hours
// alert("ListingPeriod= "+ListingPeriod+" ListingTimeInterval= "+ListingTimeInterval);
d=daynumber(DAY,MONTH,YEAR,HOUR,MINUTE,SECOND) ;
MJDbase=toMJD(d); // Start of 170 Hour period
T_start=MJDbase;
error="";
boxsizestring=Math.abs(1*document.Ephem.LATS.value);
var boxsize = window.prompt("Enter the size of the box in degrees.\nIncrease the box size of no results is shown !",boxsizestring);
//use inclination as default box size
INPUTYEAR=1*document.Ephem.INPUTYEAR.value;
INPUTMONTH=1*document.Ephem.INPUTMONTH.value;
INPUTDAY=1*document.Ephem.INPUTDAY.value;
INPUTHOUR=1*document.Ephem.INPUTHOUR.value;
INPUTMINUTE=1*document.Ephem.INPUTMINUTE.value;
INPUTSECOND=1*document.Ephem.INPUTSECOND.value;
//d=daynumber(INPUTDAY,INPUTMONTH,INPUTYEAR,HOUR,MINUTE,SECOND) ;
d=daynumber(INPUTDAY,INPUTMONTH,INPUTYEAR,INPUTHOUR,INPUTMINUTE,INPUTSECOND) ;
actualMJD=toMJD(d);
T= actualMJD -MJDbase; // T for the day selected, epoch
Latitude=1*document.Ephem.Latitude.value;
LatitudeDirection=document.Ephem.LatitudeDirection.value;
Longitude=1*document.Ephem.Longitude.value;
LongitudeDirection=document.Ephem.LongitudeDirection.value;
Height=1*document.Ephem.Height.value/1000;
Listing="";
result=Ephem((170/24),Latitude,Longitude,Height); // Calculated after 170 Hours
SatLon=formatvalue(result[2],4);
SatLat=formatvalue(result[3],4);
if (parseFloat(document.Ephem.PREDICTEDLONGITUDE.value) !== parseFloat(SatLon)){
LonError="(Error)" ;
}
else
{
LonError="";
}
if (LatitudeDirection=="South") Latitude=-Latitude;
if (LongitudeDirection=="West") Longitude=360-Longitude;
nominal_result=Nominal(0,Latitude,Longitude,Height);
Azimuth= formatvalue(nominal_result[0],4);
Elevation=formatvalue(nominal_result[1],4);
SatLon=formatvalue(nominal_result[2],4);
SatLat=formatvalue(nominal_result[3],4);
nomAzimuth=Azimuth;
nomElevation=Elevation;
nomLon=SatLon;
nomLat=SatLat;
Listing+="\r ***Calculates the satellite's angular distance****";
Listing+="\r *** from the satellites nominal orbital ****";
Listing+="\r *** position (NOL) in 10E-3 degrees ****";
Listing+="\r";
Listing+="\r ***Small errors occur because of rounding errors**";
Listing+="\r *** and the precicion of jscript calculation ***";
Listing+="\r";
Listing+="\r *** Angle errors is around +/-0.0001 deg. ***";
Listing+="\r";
//10/06/2002 11:36:00 193.3958 21.0858 NOL offset= 9.9464
Listing+="\r"+" Date Time Az El 10E-3 deg.";
for (i=0; i<1440;i++) // introduce interval in minutes here. numbers= interval60min/60[h]*hours
// Calculate minute by minute NOL offset= Sqrt( Lat_error^2+Lon_error^2)
// Let user set the NOL limit and select date for TimeToPeak
// Blir mer enn 1 ....
{
T=T+(1/1440);
//MJD=MJDbase+T;
result=Ephem(T,Latitude,Longitude,Height);
Azimuth= formatvalue(result[0],4);
Elevation=formatvalue(result[1],4);
SatLon=formatvalue(result[2],4);
SatLat=formatvalue(result[3],4);
Lon_error=formatvalue((nomLon-SatLon),4);
Lat_error=formatvalue((nomLat-SatLat),4);
//NOL_offset= Math.sqrt(((nomLon-SatLon)*(nomLon-SatLon))+((nomLat-SatLat)*(nomLat-SatLat)));
nomLon=nomLon.replace(",",".");
SatLon=SatLon.replace(",",".");
SatLat=SatLat.replace(",",".");
NOL_offset= Math.sqrt((nomLon-SatLon)*(nomLon-SatLon)+SatLat*SatLat);
//alert(NOL_offset);
//alert(nomLon+" "+nomLat);
Azimuth_error=formatvalue((nomAzimuth-Azimuth),4);
Elevation_error=formatvalue((nomElevation-Elevation),4);
distance=formatvalue(result[4],1);
delay=formatvalue((result[4]*1000/300000000)*1000,5);
date=MJDtoDate( Div(MJDbase+T,1) );
time=MJDtoTime(MJDbase+T);
if (i<10) number="00"+i;
if ((i<100)&&(i>=10)) number="0"+i;
if (i>=100) number=i;
if ((T<=-1) || (T>=8)) {
Listing+="\r";
Listing+="\r";
Listing+="\r";
Listing+="\r"+" Error: the time is outside the 170 Hours ephemeris period !! ";
break;
}
/*
if ((T>-1) && (T<0) && (NOL_offset7) && (T<8) && (NOL_offset=0) && (T<=7) && (NOL_offset"; // End of listing
//PrintWindow =window.open("","Print_window","menubar=yes,status=yes,toolbar=yes,scrollbars=yes,height=768,width=600");
PrintWindow =window.open("","Print_window");
PrintWindow.oldWindow = top;
PrintWindow.document.write(Listing); // page variable med sidekoden
PrintWindow.document.close();
//document.write(Listing);
}
function MJDtoTime(MJD)
{
var time,remainder,remainder2,Hour,Minute,Second
time=(MJD-Math.floor(MJD)) +1/(60*60*24);
Hour=Math.floor(time*24) ;
remainder=(time*24-Math.floor(time*24));
Minute = (Math.floor((time*24-Math.floor(time*24))*60));
remainder2=(time*24-Math.floor(time*24))*60-(Math.floor((time*24-Math.floor(time*24))*60));
Second=Math.floor(remainder2*60);
if (Hour<10) Hour="0"+Hour;
if (Second<10) Second="0"+Second;
if (Minute<10) Minute="0"+Minute;
return(Hour+":"+Minute+":"+"00")
}
function MJDtoDate(MJD)
{
var dato,Ym,Mm,D,Y,M,K
Ym = Div((MJD-15078.2),365.25);
Mm=Div( ( (MJD-14956.1) - Div(Ym*365.25,1)), 30.6001);
D=MJD-14956 -Div(Ym*365.25,1) -Div(Mm*30.6001,1);
if ((Mm==14)||(Mm==15)) K=1
else K=0;
Y=Ym+K+1900;
M=Mm-1-(K*12);
if (D<10) D="0"+D; //format output
if (M<10) M="0"+M; //format output
dato=D+"/"+M+"/"+Y
return(dato);
}
function Ephem(t,SiteLat,SiteLon,h)
{
var LM0,LM1,LM2,LONC,LONC1,LONS,LONS1,LATC,LATC1,LATS,LATS1
var L0,L1,L2,Lc,Lc1,Ls,Ls1,Lc,lc1,ls,ls1,W,RSAT1,RSAT2,rSAT,f,Req,SiteLat,h,Ra,Rz,Rstation,Azimuth
var SatLon1,SatLon2,SatLon3,SatLon,Rs,K,SatLat,r_sat,r_eq,x,a0,a1,a2,a3,a4
var El_geometric,El_observed,Elevation
var alfa_r,alfa_rx,alfa_ry,alfa_rz,alfa_r_north,alfa_r_zenith
var result=new Array(5);
var distance
Rs=42164.57; //km Geosyncronus radius from earth centre
K=Math.PI/360;
Req=6378.14; //km Earth radius
f=(1/298.257) ; // Earth flattning factor
r_sat=42164.57; // Distance from earth centre to satellite
r_eq=6378.14 ; // Earth radius
LM0=1*document.Ephem.LM0.value;
LM1=1*document.Ephem.LM1.value;
LM2=1*document.Ephem.LM2.value;
LONC=1*document.Ephem.LONC.value;
LONC1=1*document.Ephem.LONC1.value;
LONS=1*document.Ephem.LONS.value;
LONS1=1*document.Ephem.LONS1.value;
LATC=1*document.Ephem.LATC.value;
LATC1=1*document.Ephem.LATC1.value;
LATS=1*document.Ephem.LATS.value;
LATS1=1*document.Ephem.LATS1.value;
// Use same variable names as in IESS/412
L0=1*LM0; // 1. Mean Longitude
L1=1*LM1; // 2. Drift rate
L2=1*LM2; // 3. Drift Acceleration
Lc=1*LONC; // 4. Longitude Ocillation-amplitude
Lc1=1*LONC1; // 5. Longitude Ocillation-amplitude rate of change cos term.
Ls=1*LONS; // 6. Longitude Oscillation-amplitude
Ls1=1*LONS1 // 7. Longitude Oscillation-amplitude rate of change sin term.
lc=1*LATC; // 8. Latitude Oscilation-amplitude
lc1=1*LATC1; // 9. Latitude Oscilation-amplitude rate of change cos term.
ls=1*LATS; //10. Latitude Oscillation-amplitude
ls1=1*LATS1; //11. Latitude Oscillation-amplitude rate of change sin term.
W=L1+360.98564;
// ****Calculate the Satellite Longitude****
SatLon1=L0 +L1*t+L2*t*t+ (Lc+Lc1*t)*Math.cos(Radians(W*t))+ (Ls+Ls1*t)*Math.sin(Radians(W*t)) ;
SatLon2=(K/2)*(lc*lc-ls*ls)*Math.sin(Radians(2*W*t));
SatLon3=-K*lc*ls*Math.cos(Radians(2*W*t));
SatLon=SatLon1+SatLon2+SatLon3;
//****Calculate satellite Geocentric Latitude****
SatLat=(lc+lc1*t)*Math.cos(Radians(W*t)) + (ls+ls1*t)*Math.sin(Radians(W*t)) ;
//****Calculate satellite radius****
RSAT1=Rs*(1- ( 2*L1/(3*(W-L1))));
RSAT2=1+K*Lc*Math.sin(Radians(W*t)) -K*Ls*Math.cos(Radians(W*t));
rSAT= RSAT1*RSAT2;
f=(1/298.257) ; // Earth flattning factor
r_sat=42164.57; // Distance from earth centre to satellite
r_eq=6378.14 ; // Earth radius
Rstation= r_eq/( Math.sqrt( 1 - f*(2-f)*Math.sin(Radians(SiteLat))*Math.sin(Radians(SiteLat)) ) ) ;
Ra= (Rstation+h)*Math.cos(Radians(SiteLat)) ;
Rz= ( (Rstation*(1-f)*(1-f)) +h )*Math.sin(Radians(SiteLat));
alfa_r=r_sat-Rstation ;
alfa_rx=rSAT*Math.cos(Radians(SatLat))*Math.cos(Radians(SatLon-SiteLon)) -Ra ;
alfa_ry=rSAT*Math.cos(Radians(SatLat))*Math.sin(Radians(SatLon-SiteLon)) ;
alfa_rz=rSAT*Math.sin(Radians(SatLat))-Rz;
distance=Math.sqrt(alfa_rx*alfa_rx+alfa_ry*alfa_ry+alfa_rz*alfa_rz);
alfa_r_north=-alfa_rx*Math.sin(Radians(SiteLat)) + alfa_rz*Math.cos(Radians(SiteLat)) ;
alfa_r_zenith=alfa_rx*Math.cos(Radians(SiteLat)) +alfa_rz*Math.sin(Radians(SiteLat)) ;
if (alfa_r_north<0) Azimuth=180+Deg(Math.atan(alfa_ry/alfa_r_north ))
else Azimuth=Rev(360+Deg(Math.atan(alfa_ry/alfa_r_north )));
a0 = 0.58804392
a1 = -0.17941557
a2 = 0.29906946/10
a3 = -0.25187400/100
a4 = 0.82622101/10000
El_geometric=Deg(Math.atan2( alfa_r_zenith , Math.sqrt(alfa_r_north*alfa_r_north+alfa_ry*alfa_ry)));
x=El_geometric+0.589;
refraction=a0+(a1*x)+(a2*x*x)+(a3*x*x*x) +(a4*x*x*x*x);
if (El_geometric>10.2) El_observed=El_geometric+0.01617*(Math.cos(Radians(El_geometric))/Math.sin(Radians(El_geometric)) )
else
{
El_observed=El_geometric+refraction ;
}
//if (alfa_r_zenith<-3000) El_observed=-99;
result[0]=1*Azimuth;
result[1]=1*El_observed;
result[2]=1*SatLon;
result[3]=1*SatLat;
result[4]=1*distance;
//alert((distance*1000/300000000)*1000);
return(result)
}
function NominalThis170Hour(t,SiteLat,SiteLon,h)
{
var LM0,LM1,LM2,LONC,LONC1,LONS,LONS1,LATC,LATC1,LATS,LATS1
var L0,L1,L2,Lc,Lc1,Ls,Ls1,Lc,lc1,ls,ls1,W,RSAT1,RSAT2,rSAT,f,Req,SiteLat,h,Ra,Rz,Rstation,Azimuth
var SatLon1,SatLon2,SatLon3,SatLon,Rs,K,SatLat,r_sat,r_eq,x,a0,a1,a2,a3,a4
var El_geometric,El_observed,Elevation
var alfa_r,alfa_rx,alfa_ry,alfa_rz,alfa_r_north,alfa_r_zenith
var result=new Array(4);
Rs=42164.57; //km Geosyncronus radius from earth centre
K=Math.PI/360;
Req=6378.14; //km Earth radius
f=(1/298.257) ; // Earth flattning factor
r_sat=42164.57; // Distance from earth centre to satellite
r_eq=6378.14 ; // Earth radius
LM0=1*document.Ephem.LM0.value;
LM1=1*document.Ephem.LM1.value;
LM2=1*document.Ephem.LM2.value;
LONC=1*document.Ephem.LONC.value;
LONC1=1*document.Ephem.LONC1.value;
LONS=1*document.Ephem.LONS.value;
LONS1=1*document.Ephem.LONS1.value;
LATC=1*document.Ephem.LATC.value;
LATC1=1*document.Ephem.LATC1.value;
LATS=1*document.Ephem.LATS.value;
LATS1=1*document.Ephem.LATS1.value;
// Use same variable names as in IESS/412
L0=LM0; // 1. Mean Longitude
L1=LM1; // 2. Drift rate
L2=LM2; // 3. Drift Acceleration
Lc=LONC; // 4. Longitude Ocillation-amplitude
Lc1=LONC1; // 5. Longitude Ocillation-amplitude rate of change cos term.
Ls=LONS; // 6. Longitude Oscillation-amplitude
Ls1=LONS1 // 7. Longitude Oscillation-amplitude rate of change sin term.
lc=LATC; // 8. Latitude Oscilation-amplitude
lc1=LATC1; // 9. Latitude Oscilation-amplitude rate of change cos term.
ls=LATS; //10. Latitude Oscillation-amplitude
ls1=LATS1; //11. Latitude Oscillation-amplitude rate of change sin term.
W=L1+360.98564;
// ****Calculate the Satellite Longitude****
SatLon1=L0 +L1*t+L2*t*t+ (Lc+Lc1*t)*Math.cos(Radians(W*t))+ (Ls+Ls1*t)*Math.sin(Radians(W*t)) ;
SatLon2=(K/2)*(lc*lc-ls*ls)*Math.sin(Radians(2*W*t));
SatLon3=-K*lc*ls*Math.cos(Radians(2*W*t));
//SatLon=SatLon1+SatLon2+SatLon3;
SatLon=L0;
//****Calculate satellite Geocentric Latitude****
SatLat=0; //(lc+lc1*t)*Math.cos(Radians(W*t)) + (ls+ls1*t)*Math.sin(Radians(W*t)) ;
//****Calculate satellite radius****
RSAT1=Rs*(1- ( 2*L1/(3*(W-L1))));
RSAT2=1+K*Lc*Math.sin(Radians(W*t)) -K*Ls*Math.cos(Radians(W*t));
rSAT= RSAT1*RSAT2;
f=(1/298.257) ; // Earth flattning factor
r_sat=42164.57; // Distance from earth centre to satellite
r_eq=6378.14 ; // Earth radius
Rstation= r_eq/( Math.sqrt( 1 - f*(2-f)*Math.sin(Radians(SiteLat))*Math.sin(Radians(SiteLat)) ) ) ;
Ra= (Rstation+h)*Math.cos(Radians(SiteLat)) ;
Rz= ( (Rstation*(1-f)*(1-f)) +h )*Math.sin(Radians(SiteLat));
alfa_r=r_sat-Rstation ;
alfa_rx=rSAT*Math.cos(Radians(SatLat))*Math.cos(Radians(SatLon-SiteLon)) -Ra ;
alfa_ry=rSAT*Math.cos(Radians(SatLat))*Math.sin(Radians(SatLon-SiteLon)) ;
alfa_rz=rSAT*Math.sin(Radians(SatLat))-Rz;
alfa_r_north=-alfa_rx*Math.sin(Radians(SiteLat)) + alfa_rz*Math.cos(Radians(SiteLat)) ;
alfa_r_zenith=alfa_rx*Math.cos(Radians(SiteLat)) +alfa_rz*Math.sin(Radians(SiteLat)) ;
if (alfa_r_north<0) Azimuth=180+Deg(Math.atan(alfa_ry/alfa_r_north ))
else Azimuth=Rev(360+Deg(Math.atan(alfa_ry/alfa_r_north )));
a0 = 0.58804392
a1 = -0.17941557
a2 = 0.29906946/10
a3 = -0.25187400/100
a4 = 0.82622101/10000
El_geometric=Deg(Math.atan2( alfa_r_zenith , Math.sqrt(alfa_r_north*alfa_r_north+alfa_ry*alfa_ry)));
x=El_geometric+0.589;
refraction=a0+(a1*x)+(a2*x*x)+(a3*x*x*x) +(a4*x*x*x*x);
if (El_geometric>10.2) El_observed=El_geometric+0.01617*(Math.cos(Radians(El_geometric))/Math.sin(Radians(El_geometric)) )
else
{
El_observed=El_geometric+refraction ;
}
//if (alfa_r_zenith<-3000) El_observed=-99;
result[0]= Azimuth;
result[1]=El_observed;
result[2]=SatLon;
result[3]=SatLat;
return(result)
}
function Nominal(t,SiteLat,SiteLon,h)
{
var LM0,LM1,LM2,LONC,LONC1,LONS,LONS1,LATC,LATC1,LATS,LATS1
var L0,L1,L2,Lc,Lc1,Ls,Ls1,Lc,lc1,ls,ls1,W,RSAT1,RSAT2,rSAT,f,Req,SiteLat,h,Ra,Rz,Rstation,Azimuth
var SatLon1,SatLon2,SatLon3,SatLon,Rs,K,SatLat,r_sat,r_eq,x,a0,a1,a2,a3,a4
var El_geometric,El_observed,Elevation
var alfa_r,alfa_rx,alfa_ry,alfa_rz,alfa_r_north,alfa_r_zenith
var result=new Array(4);
Rs=42164.57; //km Geosyncronus radius from earth centre
K=Math.PI/360;
Req=6378.14; //km Earth radius
f=(1/298.257) ; // Earth flattning factor
r_sat=42164.57; // Distance from earth centre to satellite
r_eq=6378.14 ; // Earth radius
LM0=1*document.Ephem.NOMLON.value; //document.Ephem.LM0.value;
LM1=0;
LM2=0;
LONC=0;
LONC1=0;
LONS=0;
LONS1=0;
LATC=0;
LATC1=0;
LATS=0;
LATS1=0;
// Use same variable names as in IESS/412
L0=LM0; // 1. Mean Longitude
L1=LM1; // 2. Drift rate
L2=LM2; // 3. Drift Acceleration
Lc=LONC; // 4. Longitude Ocillation-amplitude
Lc1=LONC1; // 5. Longitude Ocillation-amplitude rate of change cos term.
Ls=LONS; // 6. Longitude Oscillation-amplitude
Ls1=LONS1 // 7. Longitude Oscillation-amplitude rate of change sin term.
lc=LATC; // 8. Latitude Oscilation-amplitude
lc1=LATC1; // 9. Latitude Oscilation-amplitude rate of change cos term.
ls=LATS; //10. Latitude Oscillation-amplitude
ls1=LATS1; //11. Latitude Oscillation-amplitude rate of change sin term.
W=L1+360.98564;
// ****Calculate the Satellite Longitude****
SatLon1=L0 +L1*t+L2*t*t+ (Lc+Lc1*t)*Math.cos(Radians(W*t))+ (Ls+Ls1*t)*Math.sin(Radians(W*t)) ;
SatLon2=(K/2)*(lc*lc-ls*ls)*Math.sin(Radians(2*W*t));
SatLon3=-K*lc*ls*Math.cos(Radians(2*W*t));
SatLon=SatLon1+SatLon2+SatLon3;
//****Calculate satellite Geocentric Latitude****
//SatLat=(lc+lc1*t)*Math.cos(Radians(W*t)) + (ls+ls1*t)*Math.sin(Radians(W*t)) ;
SatLat=1*document.Ephem.NOMLON.value;
//****Calculate satellite radius****
RSAT1=Rs*(1- ( 2*L1/(3*(W-L1))));
RSAT2=1+K*Lc*Math.sin(Radians(W*t)) -K*Ls*Math.cos(Radians(W*t));
rSAT= RSAT1*RSAT2;
f=(1/298.257) ; // Earth flattning factor
r_sat=42164.57; // Distance from earth centre to satellite
r_eq=6378.14 ; // Earth radius
Rstation= r_eq/( Math.sqrt( 1 - f*(2-f)*Math.sin(Radians(SiteLat))*Math.sin(Radians(SiteLat)) ) ) ;
Ra= (Rstation+h)*Math.cos(Radians(SiteLat)) ;
Rz= ((Rstation*(1-f)*(1-f))+h)*Math.sin(Radians(SiteLat));
alfa_r=r_sat-Rstation ;
alfa_rx=rSAT*Math.cos(Radians(SatLon-SiteLon)) -Ra ;
alfa_ry=rSAT*Math.sin(Radians(SatLon-SiteLon)) ;
alfa_rz=-Rz;
alfa_r_north=-alfa_rx*Math.sin(Radians(SiteLat)) + alfa_rz*Math.cos(Radians(SiteLat)) ;
alfa_r_zenith=alfa_rx*Math.cos(Radians(SiteLat)) +alfa_rz*Math.sin(Radians(SiteLat)) ;
if (alfa_r_north<0) Azimuth=180+Deg(Math.atan(alfa_ry/alfa_r_north ))
else Azimuth=Rev(360+Deg(Math.atan(alfa_ry/alfa_r_north )));
a0 = 0.58804392
a1 = -0.17941557
a2 = 0.29906946/10
a3 = -0.25187400/100
a4 = 0.82622101/10000
El_geometric=Deg(Math.atan2( alfa_r_zenith , Math.sqrt(alfa_r_north*alfa_r_north+alfa_ry*alfa_ry)));
x=Math.abs(El_geometric+0.589);
refraction=a0+(a1*x)+(a2*x*x)+(a3*x*x*x) +(a4*x*x*x*x) ;
if (El_geometric>10.2) El_observed=El_geometric+0.01617*(Math.cos(Radians(El_geometric))/Math.sin(Radians(El_geometric)) )
else
{
El_observed=El_geometric+refraction ;
}
//if (alfa_r_zenith<-3000) El_observed=-99;
result[0]= Azimuth;
result[1]=El_observed;
result[2]=SatLon;
result[3]=SatLat;
return(result)
}
function Rev(number)
{
var x
x= number -Math.floor(number/360.0)*360 ;
return(x)
}
function Radians(number)
{
var rad
rad=number*Math.PI/180;
return(rad)
}
function Deg(number)
{
var rad
rad=number*180/Math.PI;
return(rad)
}
function daynumber(Day,Month,Year,Hour,Minute,Second)
{
//window.alert(Day+" "+Month+" "+Year+" "+Hour+" "+Minute+" "+Second);
d=367*Year - Div( (7*(Year+(Div((Month+9),12)))),4 ) + Div((275*Month),9) + Day - 730530
// d is correct
//window.alert(d);
d=d+ Hour/24 + Minute/(60*24) + Second/(24*60*60) // OK
return(d)
}
function toMJD(d)
{
var MJD
MJD=d+51543.0;
return(MJD);
}
function Div(a,b)
{
return((a-a%b)/b) //OK
}
function formatval2(input, rsize) // Desimal avrunding
{
var invalid = "**************************";
var nines = "999999999999999999999999";
var strin = "" + input;
var fltin = parseFloat(strin);
rsize+=3; // only for test
if (strin.length <= rsize) return strin;
if (strin.indexOf("e") != -1 ||
fltin > parseFloat(nines.substring(0,rsize)+".4"))
return invalid.substring(0, rsize);
var rounded = "" + (fltin + (fltin - parseFloat(strin.substring(0, rsize))));
return rounded.substring(0, rsize);
}
function formatv(num,places)
{
num.toFixed(places);
}
function formatval2(num,places)
{
num=1*num;
var a = Math.pow(10,Math.abs(places) == places ? places : 2);
//alert(a);
return(String(Math.round(num * a) / a).replace(/^(\d)/," $1") );
}
function tilstreng(num,places)
{
var a = Math.pow(10,Math.abs(places) == places ? places : 2);
return String(Math.round(num * a) / a).replace(/^(\d)/," $1");
}
function formatval(num,places)
{
var strOP,i,decimals,newdecimals,integer,newstring,numcopy
var ss=new Array()
numcopy=num;
var a = Math.pow(10,Math.abs(places) == places ? places : 2);
strOP=String(Math.round(num * a) / a).replace(/^(\d)/," $1");
if (num<0) strOP=" "+strOP; // put " " on negative numbers
//num=parseFloat(strOP);
ss = strOP.split(".");// split string by . what about zero..?
if ((num!==0)&&(ss.length>1))
{
decimals=ss[1];
integer=ss[0];
if (decimals.length=0) strOP=" "+strOP;
return(strOP)
}