Hovering over burst shows lat/long/time, fixed timestamp bugs closes #38
rodzic
4f31ab40a6
commit
c11bd2fcc0
|
@ -27,6 +27,7 @@ google.load("jquery", "1.4.2");
|
||||||
google.load("jqueryui", "1.8.1");
|
google.load("jqueryui", "1.8.1");
|
||||||
</script>
|
</script>
|
||||||
<script src="js/jquery.form.js" type="text/javascript"></script>
|
<script src="js/jquery.form.js" type="text/javascript"></script>
|
||||||
|
<script src="js/date.jsport.js" type="text/javascript"></script>
|
||||||
<script src="js/pred.js" type="text/javascript"></script>
|
<script src="js/pred.js" type="text/javascript"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,201 @@
|
||||||
|
Date.prototype.monthNames = new Array(
|
||||||
|
"January", "February", "March", "April",
|
||||||
|
"May", "June", "July", "August",
|
||||||
|
"September", "October", "November", "December"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
Date.prototype.dayNames = new Array(
|
||||||
|
"Sunday", "Monday", "Tuesday", "Wednesday",
|
||||||
|
"Thursday", "Friday", "Saturday"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
Date.prototype.format = function (formatStr) {
|
||||||
|
var heap = formatStr.split("");
|
||||||
|
var resHeap = new Array(heap.length);
|
||||||
|
var escapeChar = "\\"; // you can change this to something different, but
|
||||||
|
// don't use a character that has a formatting meaning,
|
||||||
|
// unless you want to disable it's functionality
|
||||||
|
|
||||||
|
// go through array and extract identifiers from its fields
|
||||||
|
for (var i = 0; i < heap.length; i++) {
|
||||||
|
switch(heap[i]) {
|
||||||
|
case escapeChar:
|
||||||
|
resHeap[i] = heap[i+1];
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "a": // "am" or "pm"
|
||||||
|
var temp = this.getHours();
|
||||||
|
resHeap[i] = (temp < 12) ? "am" : "pm";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "A": // "AM" or "PM"
|
||||||
|
var temp = this.getHours();
|
||||||
|
resHeap[i] = (temp < 12) ? "AM" : "PM";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "d": // day of the month, 2 digits with leading zeros; i.e. "01" to "31"
|
||||||
|
var temp = String(this.getDate());
|
||||||
|
resHeap[i] = (temp.length > 1) ? temp : "0" + temp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "D": // day of the week, textual, 3 letters; i.e. "Fri"
|
||||||
|
var temp = this.dayNames[this.getDay()];
|
||||||
|
resHeap[i] = temp.substring(0, 3);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "F": // month, textual, long; i.e. "January"
|
||||||
|
resHeap[i] = this.monthNames[this.getMonth()];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "g": // hour, 12-hour format without leading zeros; i.e. "1" to "12"
|
||||||
|
var temp = this.getHours();
|
||||||
|
resHeap[i] = (temp <= 12) ? temp : (temp - 12);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "G": // hour, 24-hour format without leading zeros; i.e. "0" to "23"
|
||||||
|
resHeap[i] = String(this.getHours());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "h": // hour, 12-hour format; i.e. "01" to "12"
|
||||||
|
var temp = String(this.getHours());
|
||||||
|
temp = (temp <= 12) ? temp : (temp - 12);
|
||||||
|
resHeap[i] = (temp.length > 1) ? temp : "0" + temp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "H": // hour, 24-hour format; i.e. "00" to "23"
|
||||||
|
var temp = String(this.getHours());
|
||||||
|
resHeap[i] = (temp.length > 1) ? temp : "0" + temp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "i": // minutes; i.e. "00" to "59"
|
||||||
|
var temp = String(this.getMinutes());
|
||||||
|
resHeap[i] = (temp.length > 1) ? temp : "0" + temp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "I": // "1" if Daylight Savings Time, "0" otherwise. Works only on the northern hemisphere
|
||||||
|
var firstDay = new Date(this.getFullYear(), 0, 1);
|
||||||
|
resHeap[i] = (this.getTimezoneOffset() != firstDay.getTimezoneOffset()) ? (1) : (0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "J": // day of the month without leading zeros; i.e. "1" to "31"
|
||||||
|
resHeap[i] = this.getDate();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "l": // day of the week, textual, long; i.e. "Friday"
|
||||||
|
resHeap[i] = this.dayNames[this.getDay()];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "L": // boolean for whether it is a leap year; i.e. "0" or "1"
|
||||||
|
resHeap[i] = (this.getFullYear() % 4) ? false : true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "m": // month; i.e. "01" to "12"
|
||||||
|
var temp = String(this.getMonth() + 1);
|
||||||
|
resHeap[i] = (temp.length > 1) ? temp : "0" + temp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "M": // month, textual, 3 letters; i.e. "Jan"
|
||||||
|
resHeap[i] = this.monthNames[this.getMonth()];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "n": // month without leading zeros; i.e. "1" to "12"
|
||||||
|
resHeap[i] = this.getMonth() + 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "O": // Difference to Greenwich time in hours; i.e. "+0200"
|
||||||
|
var minZone = this.getTimezoneOffset();
|
||||||
|
var mins = minZone % 60;
|
||||||
|
var hour = String(((minZone - mins) / 60) * -1);
|
||||||
|
|
||||||
|
if (hour.charAt(0) != "-") {
|
||||||
|
hour = "+" + hour;
|
||||||
|
}
|
||||||
|
|
||||||
|
hour = (hour.length == 3) ? (hour) : (hour.replace(/([+-])(\d)/, "$1" + 0 + "$2"));
|
||||||
|
resHeap[i] = hour + mins + "0";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "r": // RFC 822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200"
|
||||||
|
var dayName = this.dayNames[this.getDay()].substr(0, 3);
|
||||||
|
var monthName = this.monthNames[this.getMonth()].substr(0, 3);
|
||||||
|
resHeap[i] = dayName + ", " + this.getDate() + " " + monthName + this.format(" Y H:i:s O");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "s": // seconds; i.e. "00" to "59"
|
||||||
|
var temp = String(this.getSeconds());
|
||||||
|
resHeap[i] = (temp.length > 1) ? temp : "0" + temp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "S": // English ordinal suffix for the day of the month, 2 characters; i.e. "st", "nd", "rd" or "th"
|
||||||
|
var temp = this.getDate();
|
||||||
|
var suffixes = ["st", "nd", "rd"];
|
||||||
|
var suffix = "";
|
||||||
|
|
||||||
|
if (temp >= 11 && temp <= 13) {
|
||||||
|
resHeap[i] = "th";
|
||||||
|
} else {
|
||||||
|
resHeap[i] = (suffix = suffixes[String(temp).substr(-1) - 1]) ? (suffix) : ("th");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case "t": // number of days in the given month; i.e. "28" to "31"
|
||||||
|
resHeap[i] = this.getDay();
|
||||||
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* T: Not implemented
|
||||||
|
*/
|
||||||
|
|
||||||
|
case "U": // seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
|
||||||
|
// remember that this does not return milisecs!
|
||||||
|
resHeap[i] = Math.floor(this.getTime() / 1000);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "w": // day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday)
|
||||||
|
resHeap[i] = this.getDay();
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case "W": // ISO-8601 week number of year, weeks starting on Monday
|
||||||
|
var startOfYear = new Date(this.getFullYear(), 0, 1, 0, 0, 0, 0);
|
||||||
|
var firstDay = startOfYear.getDay() - 1;
|
||||||
|
|
||||||
|
if (firstDay < 0) {
|
||||||
|
firstDay = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
var firstMonday = Date.UTC(this.getFullYear(), 0, 8 - firstDay);
|
||||||
|
var thisDay = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate());
|
||||||
|
resHeap[i] = Math.floor((thisDay - firstMonday) / (1000 * 60 * 60 * 24 * 7)) + 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "y": // year, 2 digits; i.e. "99"
|
||||||
|
resHeap[i] = String(this.getFullYear()).substring(2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Y": // year, 4 digits; i.e. "1999"
|
||||||
|
resHeap[i] = this.getFullYear();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "z": // day of the year; i.e. "0" to "365"
|
||||||
|
var firstDay = Date.UTC(this.getFullYear(), 0, 0);
|
||||||
|
var thisDay = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate());
|
||||||
|
resHeap[i] = Math.floor((thisDay - firstDay) / (1000 * 60 * 60 * 24));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "Z": // timezone offset in seconds (i.e. "-43200" to "43200").
|
||||||
|
resHeap[i] = this.getTimezoneOffset() * 60;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
resHeap[i] = heap[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// return joined array
|
||||||
|
return resHeap.join("");
|
||||||
|
}
|
|
@ -167,6 +167,10 @@ function parseCSV(lines) {
|
||||||
var land_lon;
|
var land_lon;
|
||||||
var launch_pt;
|
var launch_pt;
|
||||||
var land_pt;
|
var land_pt;
|
||||||
|
var burst_lat;
|
||||||
|
var burst_lon;
|
||||||
|
var burst_pt;
|
||||||
|
var burst_time;
|
||||||
var launch_time;
|
var launch_time;
|
||||||
var land_time;
|
var land_time;
|
||||||
$.each(lines, function(idx, line) {
|
$.each(lines, function(idx, line) {
|
||||||
|
@ -189,7 +193,10 @@ function parseCSV(lines) {
|
||||||
|
|
||||||
if(parseFloat(entry[3]) > max_height) {
|
if(parseFloat(entry[3]) > max_height) {
|
||||||
max_height = parseFloat(entry[3]);
|
max_height = parseFloat(entry[3]);
|
||||||
max_point = point;
|
burst_pt = point;
|
||||||
|
burst_lat = entry[1];
|
||||||
|
burst_lon = entry[2];
|
||||||
|
burst_time = entry[0];
|
||||||
}
|
}
|
||||||
path.push(point);
|
path.push(point);
|
||||||
}
|
}
|
||||||
|
@ -244,10 +251,10 @@ function parseCSV(lines) {
|
||||||
});
|
});
|
||||||
|
|
||||||
var pop_marker = new google.maps.Marker({
|
var pop_marker = new google.maps.Marker({
|
||||||
position: max_point,
|
position: burst_pt,
|
||||||
map: map,
|
map: map,
|
||||||
icon: burst_img,
|
icon: burst_img,
|
||||||
title: 'Balloon burst (max. altitude: ' + max_height + 'm)',
|
title: 'Balloon burst ('+burst_lat+', '+burst_lon+' at altitude ' + max_height + 'm) at ' + POSIXtoHM(burst_time)
|
||||||
});
|
});
|
||||||
|
|
||||||
// now add the launch/land markers to map
|
// now add the launch/land markers to map
|
||||||
|
@ -393,10 +400,14 @@ function toggleWindow(window_name, linker, onhide, onshow, force) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function POSIXtoHM(timestamp) {
|
function POSIXtoHM(timestamp) {
|
||||||
|
// using JS port of PHP's date()
|
||||||
var ts = new Date();
|
var ts = new Date();
|
||||||
ts.setTime(timestamp*1000);
|
ts.setTime(timestamp*1000);
|
||||||
var adjHours = ts.getHours() + (ts.getTimezoneOffset()/60);
|
// account for DST
|
||||||
var str = adjHours + ":" + ts.getMinutes();
|
if ( ts.format("I") == 1 ) {
|
||||||
|
ts.setTime((timestamp-3600)*1000);
|
||||||
|
}
|
||||||
|
var str = ts.format("H:i");
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue