Map - Day/Night Terminator
by Paulo Ávila
HTML
<!-- Copied from: http://www.lizard-tail.com/isana/lab/astro_calc/terminator.html -->
<!-- For future improvements: http://stackoverflow.com/questions/7100718/calculating-an-overlay-of-day-night-for-google-maps -->
<script src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=weather&language=es"></script>
<div id="map"></div>
CSS
#map { position: absolute; top: 0; right: 0; bottom: 0; left: 0; }
JavaScript
///////
// originally from: http://www.lizard-tail.com/isana/lab/astro_calc/terminator.js
// perhaps a better one here: https://github.com/kaktus621/google-maps-api-addons/tree/master/daynightoverlay
//
var GST = GST ||{};
GST.Time = GST.Time || function(date){
if(!date){
var _date = new Date();
}else{
var _date = date;
}
var _getUTCArray = function(_date){
return {
year: _date.getUTCFullYear(),
month: _date.getUTCMonth()+1,
day: _date.getUTCDate(),
hours: _date.getUTCHours(),
minutes: _date.getUTCMinutes(),
seconds: _date.getUTCSeconds()
}
}
var _utc = _getUTCArray(_date);
var _jd = function(){
var year = _utc.year;
var month = _utc.month;;
var day = _utc.day;
var calender = "";
if(month <= 2){
var year = year - 1;
var month = month + 12;
}
var julian_day = Math.floor(365.25*(year+4716))+Math.floor(30.6001*(month+1))+day-1524.5;
if (calender == "julian"){
var transition_offset=0;
}else if(calender == "gregorian"){
var tmp = Math.floor(year/100);
var transition_offset=2-tmp+Math.floor(tmp/4);
}else if(julian_day<2299160.5){
var transition_offset=0;
}else{
var tmp = Math.floor(year/100);
var transition_offset=2-tmp+Math.floor(tmp/4);
}
var jd=julian_day+transition_offset;
return jd;
}
var _gmst = function(){
var rad=Math.PI/180;
var time_in_sec = _utc.hours*3600 + _utc.minutes*60 + _utc.seconds;
var jd = _jd();
//gmst at 0:00
var t = (jd-2451545.0)/36525;
var gmst_at_zero = (24110.5484 + 8640184.812866*t+0.093104*t*t+0.0000062*t*t*t)/3600;
if(gmst_at_zero>24){gmst_at_zero=gmst_at_zero%24;}
//gmst at target time
var gmst = gmst_at_zero+(time_in_sec * 1.00273790925)/3600;
//mean obliquity of the ecliptic
var e = 23+26.0/60+21.448/3600 -46.8150/3600*t -0.00059/3600*t*t...