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...