/**
* Global Variables
*
*/
// BEGIN: LEGACY
var map;
var object_list;
var move_refresh = 0;
var geocoder = null;
var gmarkers;
var glabels;
var loading = new Object();
var runOnLoad = new Array();
// initialize variables
loading['chat'] = 0;
loading['server'] = 0;
loading['positions'] = 0;
loading['locate'] = 0;
// END: LEGACY
var gOpenAPRS = new OpenAPRS();
/* ----------------------------------------------------------------------------
* Name: OpenAPRS (object)
* Defaults for OpenAPRS object.
* Parameters:
* none
* Returns: n/a
*/
function OpenAPRS() {
this.runcount = 0;
this.aprsMap = new Map();
this.hnyMap = new Map();
this.myClusterDisplay = false;
this.oneShot = false;
this.posArray = new Array();
this.lastposArray = new Array();
this.hnyArray = new Array();
this.isPHG = false;
this.defaultMapCenter = new GLatLng(38.256973, -122.311685);
this.defaultMapZoom = 11;
this.track = new Track(this);
this.load = undefined;
this.loadCenter = true;
this.hnyAngle = 0.0;
this.hnyCount = 0;
this.hnyCenter = undefined;
this.hnyRange = 5;
this.centerMapArguments = false;
this.findMapArguments = undefined;
} // OpenAPRS
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::onTimer
* Performs routine actions based on a 500ms timer.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.onTimer = function() {
this.runcount += 0.5;
var d = new Date();
changeById('clock', d.toFormattedUTCString());
this.parseAprsQueue();
this.parseHnyQueue();
// Load any new stations
if ((this.runcount % 10) == 0 || this.runcount == 1)
this.refresh();
if ((this.runcount % 5) == 0)
this.checkTrackLinks();
if ((this.runcount % 10) == 0 &&
!isChecked('openaprs_form_pause'))
this.expireAprs(6);
// set the timer
window.setTimeout('gOpenAPRS.onTimer()', 500);
} // OpenAPRS::onTimer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::onLoad
* Loads google Maps settings for OpenAPRS interface.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.onLoad = function() {
document.body.style.overflow = 'hidden';
// Try and load map center and zoom.
if (this.centerMapArguments == false)
this.getDefaultCenterAndZoomFromCookie();
// Center the map on Palo Alto
map = new GMap2(document.getElementById("mapDiv"));
//map.addControl(new GSmallMapControl());
//map.addControl(new GMapTypeControl());
//map.disableDragging();
map.setCenter(this.defaultMapCenter, this.defaultMapZoom);
var topLeft = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,100));
var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(0,0));
map.addMapType(G_SATELLITE_3D_MAP);
map.addMapType(G_PHYSICAL_MAP);
//map.setMapType(G_HYBRID_MAP);
map.addControl(new GLargeMapControl(), topLeft);
map.addControl(new GMapTypeControl(), bottomRight);
map.disableScrollWheelZoom();
geocoder = new GClientGeocoder();
var center = map.getCenter();
navUpdate('navOverlay2', center.y, center.x);
object_list = new Array();
var me = this;
GEvent.addListener(map, "moveend", function() {
if (me.oneShot == true) {
me.oneShot = false;
log('Map: Will refresh on next interval.');
return;
} // if
me.refresh();
});
GEvent.addListener(map, "mousemove", function(point) {
navUpdate('navOverlay2', point.lat(), point.lng());
});
GEvent.addListener(map, "mouseout", function(point) {
var center = map.getCenter();
navUpdate('navOverlay2', center.y, center.x);
//hideWindow('divConsole');
});
GEvent.addListener(map, "infowindowopen", function() {
pause = document.getElementById("openaprs_form_pause");
if (pause == null)
return;
pause.checked = true;
changeById('mapSTATUS', 'Paused');
changeById('topMESSAGE', 'Paused');
showControl('controlPAUSE', false);
});
GEvent.addListener(map, "infowindowclose", function() {
if (cObject.isON())
return;
pause = document.getElementById("openaprs_form_pause");
if (pause == null)
return;
changeById('mapSTATUS', 'Resuming');
changeById('topMESSAGE', 'Resuming');
pause.checked = false;
showControl('controlPAUSE', false);
});
GEvent.addListener(map, "zoomend", function(oldLevel, newLevel) {
if (!gOpenAPRS.track.isPaused()) {
changeById('OpenAPRS:Menu:Status:Mode', 'Tracking');
return;
} // if
if (newLevel < 9)
changeById('OpenAPRS:Menu:Status:Mode', 'Cluster');
else
changeById('OpenAPRS:Menu:Status:Mode', 'Map');
if (this.load != undefined)
changeById('OpenAPRS:Menu:Status:Mode', 'View');
me.refresh();
});
this.onTimer();
updateChat();
updateAd();
checkPHG();
checkHNY();
checkMOUSE();
toggleCONSOLE();
//toggleSTATIONS();
var loadTips = readCookie("myTips");
if (loadTips == "yes" || loadTips == "") {
loadHelp('random:tips');
windowControl('helpOverlay');
} // if
// Restore tracking list if there is a cookie.
this.track.restore();
this.track.checkMiniImage();
// add logout functions
onLogout.push(new Function("changeFieldById('aprsMESSAGE:Form:Timestamp', '0'); clearRows('messagingTable')"));
onLogout.push(new Function("clearRows('viewTable');"));
if (this.findMapArguments != undefined)
this.centerOnGeocode(this.findMapArguments);
} // OpenAPRS::onLoad
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::centerOnGeocode
* Tries to look up an address, zip code or city & state pair.
* Parameters:
* address : Address to try and geocode lookup.
* Returns: n/a
*/
OpenAPRS.prototype.centerOnGeocode = function(address) {
var me = this;
if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
changeById("locate_status", "Unable to locate");
changeById("locateOverlayMessage", "Unable to locate");
changeById('mapSTATUS', 'Not Found');
changeById('topMESSAGE', 'Not Found');
logById('logContainer', 'logTable', "Geocode: Unable to locate ["+address+"]");
} // else
else {
changeById("locate_status", "Located, centering map");
hideWindow('locateOverlay');
logById('logContainer', 'logTable', "Geocode: Found location, centering map ["+address+"]");
map.setCenter(point, 11);
changeById('mapSTATUS', 'Map Recentered');
changeById('topMESSAGE', 'Map Recentered');
//var marker = new GMarker(point);
//map.addOverlay(marker);
//marker.openInfoWindowHtml(address);
me.getLastpositionsFromServer(map);
setLocation();
} // else
} // function
);
} // if
} // OpenAPRS::centerOnGeocode
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::findClicked
* Tries to look up an address, zip code or city & state pair.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.findClicked = function() {
var f = document.getElementById('OpenAPRS:Console:Form:Find');
if (f == null)
return;
this.centerOnGeocode(f.value);
return;
} // OpenAPRS::findClicked
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::saveView
* Tries to look up an address, zip code or city & state pair.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.saveView = function() {
if (this.track.isPaused())
this.sendViewToServer(map);
else
this.sendTrackToServer(map);
return;
} // OpenAPRS::saveView
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::findClicked
* Tries to look up an address, zip code or city & state pair.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.loadView = function(id) {
unPause('openaprs_form_pause');
showWindow('OpenAPRS:Console:Unload');
this.load = id;
this.clearRefresh();
this.loadCenter = true;
return;
} // OpenAPRS::loadView
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::unloadView
* Unloads the currently loaded view.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.unloadView = function(id) {
unPause('openaprs_form_pause');
hideWindow('OpenAPRS:Console:Unload');
this.load = undefined;
this.clearRefresh();
this.loadCenter = false;
return;
} // OpenAPRS::unloadView
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::trackClicked
* Adds a callsign to the tracking list.
* Parameters:
* id : Id of field to pull callsign from.
* Returns: n/a
*/
OpenAPRS.prototype.trackClicked = function(id) {
var t = document.getElementById(id);
if (t == undefined || t.value == undefined)
return;
if (t.value.length < 1)
return;
this.track.add(t.value);
windowControl('trackOverlay');
if (!this.track.isOn())
this.track.toggle();
if (this.track.isPaused())
this.track.unpause();
return;
} // OpenAPRS::trackClicked
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::trackStation
* Adds a callsign to the tracking list.
* Parameters:
* n : Name of station to track.
* Returns: n/a
*/
OpenAPRS.prototype.trackStation = function(n) {
if (n == undefined)
return;
if (n.length < 1)
return;
this.track.add(n);
windowControl('trackOverlay');
if (!this.track.isOn())
this.track.toggle();
if (this.track.isPaused())
this.track.unpause();
return;
} // OpenAPRS::trackStation
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::getDefaultCenterAndZoomFromCookie
* Tries to look up an address, zip code or city & state pair.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.getDefaultCenterAndZoomFromCookie = function() {
var caz = readCookie('myLocation');
if (caz == undefined)
return false;
var s = caz.split(',');
if (s.length != 3)
return false;
var lat = parseFloat(s[0]);
var lng = parseFloat(s[1]);
var zoom = parseInt(s[2]);
if (zoom < 0 || zoom > 23)
return false;
if (!isCoordinate(lat, lng))
return false;
this.defaultMapCenter = new GLatLng(lat, lng);
this.defaultMapZoom = zoom;
return true;
} // OpenAPRS::getDefaultCenterAndZoomFromCookie
/**
* OpenAPRS::Control
*
* Select all text on click.
*
*/
OpenAPRS.prototype.Control = function(id, doACTION) {
var myImg = document.getElementById(id);
var path = '/images/c/';
if (myImg == null)
return;
var menus = {
"cOPENAPRS": new Array("openaprs.png", "OpenAPRS", "cOPENAPRS:Overlay"),
"cEDIT": new Array("edit.png", "Edit", "cEDIT:Overlay"),
"cTOOLS": new Array("tools.png", "Tools", "cTOOLS:Overlay"),
"cVIEW": new Array("view.png", "View", "cVIEW:Overlay"),
"cHELP": new Array("help.png", "Help", "cHELP:Overlay"),
"cDONATE": new Array("donate.png", "Donate"),
"cBLOG": new Array("blog.png", "BLOG")
};
var tooltips = {
"controlCHAT": '
Web Chat
Chat with others users currently on the website.
'
};
for(var m in menus) {
if (m == id) {
if (doACTION == 'over') {
var mySub = "over/";
if (tooltips[m] != undefined)
Tip(tooltips[m], BALLOON, true, ABOVE, true, OFFSETX, 0);
if (menus[m][2] != undefined)
showWindow(menus[m][2]);
} // if
else if (doACTION == 'on') {
var mySub = "on/";
myImg.src = path + mySub + menus[m][0];
} // if
else if (doACTION == 'off') {
var mySub = "off/";
myImg.src = path + mySub + menus[m][0];
UnTip();
if (menus[m][2] != undefined)
hideWindow(menus[m][2]);
} // if
else {
var mySub = "off/";
UnTip();
} // else
myImg.src = path + mySub + menus[m][0];
} // if
} // for
return void(0);
} // OpenAPRS::Control()
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::getLastpositionsFromServer
* Retrieves the latest positions from the server based on coordinates.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.getLastpositionsFromServer = function(map) {
var request = createXMLHttpRequest();
var pause = document.getElementById("openaprs_form_pause");
var me = this;
if (pause != null && pause.checked == true) {
changeById('locate_status', 'Paused');
changeById('mapSTATUS', 'Paused');
changeById('topMESSAGE', 'Paused');
return;
} // if
if (requestMap.isKey('getLastpositionsFromServer')) {
// We already have a request in progress.
var r = requestMap.get('getLastpositionsFromServer');
if (r.time < (getUnixTime() - 10)) {
r.request.abort();
requestMap.remove('getLastpositionsFromServer');
log('Clusters: Connection timed out.');
changeById('mapSTATUS', 'Timed out');
} // if
else {
changeById('mapSTATUS', 'Please wait');
return false;
} // else
} // if
if (map.getZoom() < 4) {
changeById('locate_status', 'Stopped');
changeById('mapSTATUS', 'Stopped');
changeById('topMESSAGE', 'Stopped');
log('Map Refresh: Stopped, please zoom in.');
return;
} // if
if (map.getZoom() < 9 && this.load == undefined) {
if (this.oneShot == true) {
changeById('locate_status', 'Stopped');
changeById('mapSTATUS', 'Stopped');
changeById('topMESSAGE', 'Stopped');
return;
} // if
gOpenAPRS.getClustersFromServer(map);
this.oneShot = true;
return;
} // if
else
this.oneShot = false;
// Need a bounding box for query X = Long, Y = Lat
var bounds = map.getBounds();
var sw = bounds.getSouthWest();
var ne = bounds.getNorthEast();
/**
* Default Variables
*
* Span through the possible field values
* and set our variable list accordingly.
*
*/
var ids = {
"find": "openaprs_form_find",
"tocall": "openaprs_form_tocall",
"limit": "openaprs_form_limit",
"limit_tracks": "openaprs_form_limit_tracks",
"limit_uls": "openaprs_form_limit_uls",
"age": "openaprs_form_age",
"units": "openaprs_form_units",
"geocoords": "openaprs_form_geocoords",
"save": "aprsVIEW:Form:Name",
"show_tracks": "openaprs_form_show_tracks",
"show_irlp": "openaprs_form_show_irlp",
"show_uls": "openaprs_form_show_uls",
"show_phg": "openaprs_form_show_phg",
"show_quakes": "openaprs_form_show_quakes",
"tactical": "openaprs_form_tactical",
"zoom": "openaprs_form_fail",
"timezone": "openaprs_form_timezone",
"load": "-none",
"BBOX": "-none"
};
var dfts = {
"find": "",
"tocall": "",
"limit": "15",
"limit_tracks": "15",
"limit_uls": "100",
"age": ((map.getZoom() < 9) ? "20 MINUTE" : "4 HOUR"),
"units": "imperial",
"geocoords": "decimal",
"save": "",
"show_tracks": ((map.getZoom() < 9) ? "no" : "yes"),
"show_irlp": "yes",
"show_uls": "no",
"show_phg": "no",
"show_quakes": "yes",
"tactical": "",
"zoom" : map.getZoom().toString(),
"timezone": "America/Los_angeles",
"load": (this.load != undefined ? this.load : ""),
"BBOX": sw.lng()+","+sw.lat()+","+ne.lng()+","+ne.lat()
};
var var_list = createURI(document, false, ids, dfts);
changeById('mapSTATUS', 'Updating');
changeById('topMESSAGE', 'Updating');
changeById("locate_status", "updating");
if (this.load != undefined)
changeById('OpenAPRS:Menu:Status:Mode', 'View');
else
changeById('OpenAPRS:Menu:Status:Mode', 'Map');
var queryString = "/ajax/openaprs/aprs/lastpositions.php?hash="
+ seed
+ var_list;
var sw = new Stopwatch();
var sw2 = new Stopwatch();
var sw3 = new Stopwatch();
sw.Start();
sw2.Start();
var r = new requestObject(request);
requestMap.add('getLastpositionsFromServer', r);
request.open("GET", queryString, true);
request.onreadystatechange = function() {
var len;
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
sw2.Stop();
// Remove from requestMap.
requestMap.remove('getLastpositionsFromServer');
sw3.Start();
var c = me.storeLastpositionsFromServer(request);
sw3.Stop();
changeById("mapRESULTS", "Results " + c + " stations (" + sw.Time() + " seconds)");
log('Map: Results ' + c + ' stations (T:' + sw.Time() + '/X:'+sw2.Time()+'/P:'+sw3.Time()+')');
changeById("mapSTATUS", 'Idle');
changeById('topMESSAGE', 'Idle');
} // if
} // function()
request.send(null);
} // OpenAPRS::getLastpositionsFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::getTrackLastpositionsFromServer
* Retrieves the latest positions from the server based on track list.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.getTrackLastpositionsFromServer = function(map) {
var request = createXMLHttpRequest();
var pause = document.getElementById("openaprs_form_pause");
var me = this;
if (pause != null && pause.checked == true) {
changeById('locate_status', 'Tracking Paused');
changeById('mapSTATUS', 'Tracking Paused');
changeById('topMESSAGE', 'Paused');
return;
} // if
if (requestMap.isKey('getLastpositionsFromServer')) {
// We already have a request in progress.
var r = requestMap.get('getTrackLastpositionsFromServer');
if (r.time < (getUnixTime() - 10)) {
r.request.abort();
requestMap.remove('getTrackLastpositionsFromServer');
log('Track: Connection timed out.');
changeById('mapSTATUS', 'Tracking: Timed out');
} // if
else {
changeById('mapSTATUS', 'Tracking: Please wait');
return false;
} // else
} // if
/**
* Default Variables
*
* Span through the possible field values
* and set our variable list accordingly.
*
*/
var ids = {
"f": "-none",
"tocall": "openaprs_form_tocall",
"limit": "openaprs_form_limit",
"limit_tracks": "openaprs_form_limit_tracks",
"limit_uls": "openaprs_form_limit_uls",
"age": "openaprs_form_age",
"units": "openaprs_form_units",
"geocoords": "openaprs_form_geocoords",
"save": "aprsVIEW:Form:Name",
"show_tracks": "openaprs_form_show_tracks",
"show_irlp": "openaprs_form_show_irlp",
"show_uls": "openaprs_form_show_uls",
"show_phg": "openaprs_form_show_phg",
"show_quakes": "openaprs_form_show_quakes",
"tactical": "openaprs_form_tactical",
"zoom": "openaprs_form_fail",
"load": "-none",
"timezone": "openaprs_form_timezone"
};
var dfts = {
"f": this.track.getTrackList(),
"tocall": "",
"limit": "15",
"limit_tracks": "15",
"limit_uls": "100",
"age": ((map.getZoom() < 9) ? "20 MINUTE" : "4 HOUR"),
"units": "imperial",
"geocoords": "decimal",
"save": "",
"show_tracks": ((map.getZoom() < 9) ? "no" : "yes"),
"show_irlp": "yes",
"show_uls": "no",
"show_phg": "no",
"show_quakes": "yes",
"tactical": "",
"zoom" : map.getZoom().toString(),
"load": (this.load != undefined ? this.load : ""),
"timezone": "America/Los_angeles"
};
var var_list = createURI(document, false, ids, dfts);
changeById('mapSTATUS', 'Updating');
changeById('topMESSAGE', 'Updating');
if (this.load != undefined)
changeById('OpenAPRS:Menu:Status:Mode', 'View: Track');
else
changeById('OpenAPRS:Menu:Status:Mode', 'Tracking');
changeById("locate_status", "updating");
var queryString = "/ajax/openaprs/aprs/track.php?hash="
+ seed
+ var_list;
var sw = new Stopwatch();
var sw2 = new Stopwatch();
var sw3 = new Stopwatch();
sw.Start();
sw2.Start();
var r = new requestObject(request);
requestMap.add('getTrackLastpositionsFromServer', r);
request.open("GET", queryString, true);
request.onreadystatechange = function() {
var len;
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
sw2.Stop();
// Remove from requestMap.
requestMap.remove('getTrackLastpositionsFromServer');
sw3.Start();
var c = me.storeLastpositionsFromServer(request);
sw3.Stop();
changeById("mapRESULTS", "Results " + c + " stations (" + sw.Time() + " seconds)");
log('Tracking Map: Results ' + c + ' stations (T:' + sw.Time() + '/X:'+sw2.Time()+'/P:'+sw3.Time()+')');
changeById("mapSTATUS", 'Tracking: Idle');
changeById('topMESSAGE', 'Idle');
} // if
} // function()
request.send(null);
} // OpenAPRS::getTrackLastpositionsFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::getHnyFromServer
* Retrieves ULS entries for the city map is centered on.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.getHnyFromServer = function(map) {
var request = createXMLHttpRequest();
var me = this;
if (requestMap.isKey('getHnyFromServer')) {
// We already have a request in progress.
var r = requestMap.get('getHnyFromServer');
if (r.time < (getUnixTime() - 10)) {
r.request.abort();
requestMap.remove('getHnyFromServer');
log('HNY: Connection timed out.');
} // if
else
return false;
} // if
// Need a bounding box for query X = Long, Y = Lat
var center = map.getCenter();
this.clearHny();
this.hnyCenter = center;
this.hnyCount = 0;
this.hnyAngle = 0.0;
this.hnyRange = 5;
/**
* Default Variables
*
* Span through the possible field values
* and set our variable list accordingly.
*
*/
var ids = {
"la": center.lat().toString(),
"lo": center.lng().toString(),
"limit_tracks": "openaprs_form_limit_tracks",
"limit_uls": "openaprs_form_limit_uls",
"timezone": "openaprs_form_timezone"
};
var dfts = {
"la": center.lat().toString(),
"lo": center.lng().toString(),
"limit_uls": "100",
"timezone": "America/Los_angeles"
};
var var_list = createURI(document, false, ids, dfts);
var queryString = "/ajax/openaprs/hny/hny.php?hash="
+ seed
+ var_list;
var sw = new Stopwatch();
var sw2 = new Stopwatch();
var sw3 = new Stopwatch();
sw.Start();
sw2.Start();
var r = new requestObject(request);
requestMap.add('getHnyFromServer', r);
request.open("GET", queryString, true);
request.onreadystatechange = function() {
var len;
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
sw2.Stop();
// Remove from requestMap.
requestMap.remove('getHnyFromServer');
sw3.Start();
var c = me.storeHnyFromServer(request);
sw3.Stop();
log('HNY: Results ' + c + ' stations (T:' + sw.Time() + '/X:'+sw2.Time()+'/P:'+sw3.Time()+')');
} // if
} // function()
request.send(null);
} // OpenAPRS::getHnyFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::storeHnyFromServer
* Processes and stores list of ULS entries returned from the server.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.storeHnyFromServer = function(xmlDoc) {
var me = this;
var numRows = 0;
var i;
if (xmlDoc == null)
return;
var parseMe = xmlDoc.responseText.split('\n');
// Main large loop
for(i=0; i < parseMe.length; i++) {
// Skip broken lines or comments
if (parseMe[i].length < 1 ||
parseMe[i].substr(0, 1) == "#")
continue;
var v = new Vars();
v.Parse(parseMe[i]);
// BEGIN: PROCESS LOCATIONS
if (v.getField("TY") == "loc") {
var la = parseFloat(v.getField("la"));
var lo = parseFloat(v.getField("lo"));
var p = new GLatLng(la, lo);
me.hnyCenter = p;
map.setCenter(p);
} // if
// BEGIN: PROCESS LOCATIONS
if (v.getField("TY") == "uls") {
this.hnyArray.push(v);
numRows++;
} // if
// END: PROCESS LOCATIONS
} // for
return numRows;
} // OpenAPRS::storeHnyFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::storeLastpositionsFromServer
* Processes and stores list of last positions returned from the server.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.storeLastpositionsFromServer = function(xmlDoc) {
var new_object_list = [];
var numLastpositions = 0;
var i;
if (xmlDoc == null)
return;
// Remove cluster display if it's on.
if (this.myClusterDisplay) {
map.clearOverlays();
this.myClusterDisplay = false;
} // if
var parseMe = xmlDoc.responseText.split('\n');
// Main large loop
for(i=0; i < parseMe.length; i++) {
// Skip broken lines or comments
if (parseMe[i].length < 1 ||
parseMe[i].substr(0, 1) == "#")
continue;
var v = new Vars();
v.Parse(parseMe[i]);
// Recenter the map if requested.
if (this.loadCenter
&& v.getField("TY") == "CN") {
var la = parseFloat(v.getField("LA"));
var lo = parseFloat(v.getField("LO"));
var zm = parseInt(v.getField("ZM"));
map.setCenter(new GLatLng(la, lo), zm);
this.loadCenter = false;
} // if
// BEGIN: PROCESS LOCATIONS
if (v.getField("TY") == "LP") {
//this.addAprs(v);
//this.addAprsPositions(v);
this.lastposArray.push(v);
numLastpositions++;
} // if
// END: PROCESS LOCATIONS
} // for
return numLastpositions;
} // OpenAPRS::storeLastpositionsFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::getClustersFromServer
* Gets positions clusters from server.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.getClustersFromServer = function(map) {
var request = createXMLHttpRequest();
var pause = document.getElementById("openaprs_form_pause");
var me = this;
if (requestMap.isKey('getClustersFromServer')) {
// We already have a request in progress.
var r = requestMap.get('getClustersFromServer');
if (r.time < (getUnixTime() - 10)) {
r.request.abort();
requestMap.remove('getClustersFromServer');
log('Clusters: Connection timed out.');
changeById('mapSTATUS', 'Clusters: Timed out');
} // if
else {
changeById('mapSTATUS', 'Clusters: Please wait');
return false;
} // else
} // if
if (pause != null && pause.checked == true) {
changeById('locate_status', 'Clusters: Paused');
changeById('mapSTATUS', 'Clusters: Paused');
changeById('topMESSAGE', 'Paused');
return;
} // if
// Need a bounding box for query X = Long, Y = Lat
var bounds = map.getBounds();
var sw = bounds.getSouthWest();
var ne = bounds.getNorthEast();
/**
* Default Variables
*
* Span through the possible field values
* and set our variable list accordingly.
*
*/
var ids = {
"find": "openaprs_form_find",
"units": "openaprs_form_units",
"geocoords": "openaprs_form_geocoords",
"timezone": "openaprs_form_timezone",
"zoom": "none",
"la1": "none",
"lo1": "none",
"la2": "none",
"lo2": "none"
};
var dfts = {
"find": "",
"units": "imperial",
"geocoords": "decimal",
"timezone": "America/Los_angeles",
"zoom": map.getZoom().toString(),
"la1": ne.lat().toString(),
"lo1": sw.lng().toString(),
"la2": sw.lat().toString(),
"lo2": ne.lng().toString()
};
var var_list = createURI(document, false, ids, dfts);
changeById('mapSTATUS', 'Clusters: Updating');
changeById('topMESSAGE', 'Updating');
changeById("locate_status", "updating");
changeById('OpenAPRS:Menu:Status:Mode', 'Cluster');
// clear the processing queue
this.lastposArray = new Array();
var queryString = "/ajax/openaprs/aprs/cluster.php?hash="
+ seed
+ var_list;
var sw = new Stopwatch();
var sw2 = new Stopwatch();
var sw3 = new Stopwatch();
sw.Start();
sw2.Start();
var r = new requestObject(request);
requestMap.add('getClustersFromServer', r);
request.open("GET", queryString, true);
request.onreadystatechange = function() {
var len;
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
sw2.Stop();
// Remove from requestMap.
requestMap.remove('getClustersFromServer');
sw3.Start();
var c = me.storeClustersFromServer(request);
sw3.Stop();
changeById("mapRESULTS", "Results " + c + " clusters (" + sw.Time() + " seconds)");
log('Cluster: Results ' + c + ' clusters (T:' + sw.Time() + ' X:'+sw2.Time()+' P:'+sw3.Time()+')');
} // if
} // function()
request.send(null);
} // OpenAPRS::getClustersFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::storeClustersFromServer
* Stores clusters loaded from server.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.storeClustersFromServer = function(xmlDoc) {
var new_object_list = [];
var numClusters = 0;
var i;
if (xmlDoc == null)
return;
var parseMe = xmlDoc.responseText.split('\n');
var numMax = 0;
// Main large loop
for(i=0; i < parseMe.length; i++) {
// Skip broken lines or comments
if (parseMe[i].length < 1 ||
parseMe[i].substr(0, 1) == "#")
continue;
var v = new Vars();
v.Parse(parseMe[i]);
if (v.getField("TY") == "MX")
numMax = parseInt(v.getField("NUM")) * 1.40;
// BEGIN: PROCESS LOCATIONS
if (v.getField("TY") == "CL") {
var lat1 = parseFloat(v.getField("la1"), 6);
var lng1 = parseFloat(v.getField("lo1"), 6);
var lat2 = parseFloat(v.getField("la2"), 6);
var lng2 = parseFloat(v.getField("lo2"), 6);
var num = parseInt(v.getField("num"));
var points = new Array(
new GLatLng(lat1, lng1),
new GLatLng(lat1, lng2),
new GLatLng(lat2, lng2),
new GLatLng(lat2, lng1),
new GLatLng(lat1, lng1)
);
var f = num / numMax + 0.1;
var pg = new GPolygon(points, 'red', 1, f, 'red', f);
//if (map.getZoom() >= 6) {
var label = new ELabel(new GLatLng(lat1, lng1), v.getField("num"), "clusterLabelName", new GSize(0,15), 90);
new_object_list.push(label);
//} // if
new_object_list.push(pg);
numClusters++;
} // if
// END: PROCESS LOCATIONS
} // for
changeById("locate_status", "" + numClusters + " clusters displayed");
changeById("mapSTATUS", "Clusters: Idle");
changeById('topMESSAGE', 'Idle');
// clear the map markers and draw the new ones
this.clear();
map.clearOverlays();
this.myClusterDisplay = true;
for(var k = 0; k < new_object_list.length; k++)
map.addOverlay(new_object_list[k]);
object_list = new_object_list;
return numClusters;
} // OpenAPRS::storeClustersFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::storeLocationFromServer
* Stores a retrieved location from the server.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.storeLocationFromServer = function(xmlDoc) {
var new_object_list = [];
var numLastpositions = 0;
var i;
if (xmlDoc == null)
return;
// Remove cluster display if it's on.
if (this.myClusterDisplay) {
map.clearOverlays();
this.myClusterDisplay = false;
} // if
var parseMe = xmlDoc.responseText.split('\n');
// Main large loop
for(i=0; i < parseMe.length; i++) {
// Skip broken lines or comments
if (parseMe[i].length < 1 ||
parseMe[i].substr(0, 1) == "#")
continue;
var v = new Vars();
v.Parse(parseMe[i]);
// BEGIN: PROCESS LOCATIONS
if (v.getField("TY") == "LP") {
//this.addAprs(v);
//this.addAprsPositions(v);
this.lastposArray.push(v);
numLastpositions++;
} // if
// END: PROCESS LOCATIONS
} // for
changeById("mapSTATUS", "Idle");
changeById('topMESSAGE', 'Idle');
return numLastpositions;
} // OpenAPRS::storeLocationFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::sendViewToServer
* Retrieves the latest positions from the server based on coordinates.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.sendViewToServer = function(map) {
var request = createXMLHttpRequest();
var me = this;
if (this.load != undefined) {
changeById('aprsVIEW:Error', 'Unload current view first.');
return 0;
} // if
if (requestMap.isKey('sendViewToServer')) {
// We already have a request in progress.
var r = requestMap.get('sendViewToServer');
if (r.time < (getUnixTime() - 10)) {
r.request.abort();
requestMap.remove('sendViewToServer');
log('Save View: Connection timed out.');
changeById('aprsVIEW:Error', 'Timed out');
} // if
else {
changeById('aprsVIEW:Error', 'Please wait');
return false;
} // else
} // if
if (map.getZoom() < 9) {
changeById('aprsVIEW', 'Zoomed out too far, please zoom in and try again.');
return;
} // if
// Need a bounding box for query X = Long, Y = Lat
var bounds = map.getBounds();
var center = map.getCenter();
var sw = bounds.getSouthWest();
var ne = bounds.getNorthEast();
var la = center.lat();
var lo = center.lng();
/**
* Default Variables
*
* Span through the possible field values
* and set our variable list accordingly.
*
*/
var ids = {
"find": "openaprs_form_find",
"tocall": "openaprs_form_tocall",
"limit": "openaprs_form_limit",
"limit_tracks": "openaprs_form_limit_tracks",
"limit_uls": "openaprs_form_limit_uls",
"age": "openaprs_form_age",
"units": "openaprs_form_units",
"geocoords": "openaprs_form_geocoords",
"save": "aprsVIEW:Form:Name",
"show_tracks": "openaprs_form_show_tracks",
"show_irlp": "openaprs_form_show_irlp",
"show_uls": "openaprs_form_show_uls",
"show_phg": "openaprs_form_show_phg",
"show_quakes": "openaprs_form_show_quakes",
"tactical": "openaprs_form_tactical",
"zoom": "openaprs_form_fail",
"timezone": "openaprs_form_timezone",
"la": "-none",
"lo": "-none",
"BBOX": "-none"
};
var dfts = {
"find": "",
"tocall": "",
"limit": "15",
"limit_tracks": "15",
"limit_uls": "100",
"age": ((map.getZoom() < 9) ? "20 MINUTE" : "4 HOUR"),
"units": "imperial",
"geocoords": "decimal",
"save": "",
"show_tracks": ((map.getZoom() < 9) ? "no" : "yes"),
"show_irlp": "yes",
"show_uls": "no",
"show_phg": "no",
"show_quakes": "yes",
"tactical": "",
"zoom" : map.getZoom().toString(),
"timezone": "America/Los_angeles",
"la": center.lat().toString(),
"lo": center.lng().toString(),
"BBOX": sw.lng()+","+sw.lat()+","+ne.lng()+","+ne.lat()
};
var var_list = createURI(document, false, ids, dfts);
changeById("aprsVIEW:Error", "Saving...");
var queryString = "/ajax/openaprs/aprs/save/view.php?hash="
+ seed
+ var_list;
var sw = new Stopwatch();
var sw2 = new Stopwatch();
var sw3 = new Stopwatch();
sw.Start();
sw2.Start();
var r = new requestObject(request);
requestMap.add('sendViewToServer', r);
request.open("GET", queryString, true);
request.onreadystatechange = function() {
var len;
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
sw2.Stop();
// Remove from requestMap.
requestMap.remove('sendViewToServer');
sw3.Start();
var c = me.storeViewReplyFromServer(request);
sw3.Stop();
log('Save View: Results ' + c + ' reply (T:' + sw.Time() + '/X:'+sw2.Time()+'/P:'+sw3.Time()+')');
refreshSavedTracks();
} // if
} // function()
request.send(null);
} // OpenAPRS::sendViewToServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::sendTrackToServer
* Sends the current track to the server.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.sendTrackToServer = function(map) {
var request = createXMLHttpRequest();
var me = this;
if (this.load != undefined) {
changeById('aprsVIEW:Error', 'Unload current view first.');
return 0;
} // if
if (requestMap.isKey('sendViewToServer')) {
// We already have a request in progress.
var r = requestMap.get('sendViewToServer');
if (r.time < (getUnixTime() - 10)) {
r.request.abort();
requestMap.remove('sendViewToServer');
log('Save View: Connection timed out.');
changeById('aprsVIEW:Error', 'Timed out');
} // if
else {
changeById('aprsVIEW:Error', 'Please wait');
return false;
} // else
} // if
// Need a bounding box for query X = Long, Y = Lat
var center = map.getCenter();
var la = center.lat();
var lo = center.lng();
/**
* Default Variables
*
* Span through the possible field values
* and set our variable list accordingly.
*
*/
var ids = {
"f": "-none",
"tocall": "openaprs_form_tocall",
"limit": "openaprs_form_limit",
"limit_tracks": "openaprs_form_limit_tracks",
"limit_uls": "openaprs_form_limit_uls",
"age": "openaprs_form_age",
"units": "openaprs_form_units",
"geocoords": "openaprs_form_geocoords",
"save": "aprsVIEW:Form:Name",
"show_tracks": "openaprs_form_show_tracks",
"show_irlp": "openaprs_form_show_irlp",
"show_uls": "openaprs_form_show_uls",
"show_phg": "openaprs_form_show_phg",
"show_quakes": "openaprs_form_show_quakes",
"tactical": "openaprs_form_tactical",
"zoom": "openaprs_form_fail",
"timezone": "openaprs_form_timezone",
"la": "-none",
"lo": "-none"
};
var dfts = {
"f": this.track.getTrackList(),
"tocall": "",
"limit": "15",
"limit_tracks": "15",
"limit_uls": "100",
"age": ((map.getZoom() < 9) ? "20 MINUTE" : "4 HOUR"),
"units": "imperial",
"geocoords": "decimal",
"save": "",
"show_tracks": ((map.getZoom() < 9) ? "no" : "yes"),
"show_irlp": "yes",
"show_uls": "no",
"show_phg": "no",
"show_quakes": "yes",
"tactical": "",
"zoom" : map.getZoom().toString(),
"timezone": "America/Los_angeles",
"la": center.lat().toString(),
"lo": center.lng().toString()
};
var var_list = createURI(document, false, ids, dfts);
changeById("aprsVIEW:Error", "Saving Track...");
var queryString = "/ajax/openaprs/aprs/save/track.php?hash="
+ seed
+ var_list;
var sw = new Stopwatch();
var sw2 = new Stopwatch();
var sw3 = new Stopwatch();
sw.Start();
sw2.Start();
var r = new requestObject(request);
requestMap.add('sendViewToServer', r);
request.open("GET", queryString, true);
request.onreadystatechange = function() {
var len;
if (request.readyState == 4) {
var xmlDoc = request.responseXML;
sw2.Stop();
// Remove from requestMap.
requestMap.remove('sendViewToServer');
sw3.Start();
var c = me.storeViewReplyFromServer(request);
sw3.Stop();
log('Save Track View: Results ' + c + ' reply (T:' + sw.Time() + '/X:'+sw2.Time()+'/P:'+sw3.Time()+')');
refreshSavedTracks();
} // if
} // function()
request.send(null);
} // OpenAPRS::sendTrackToServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::storeViewReplyFromServer
* Stores a retrieved location from the server.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.storeViewReplyFromServer = function(xmlDoc) {
var numReplies = 0;
var i;
if (xmlDoc == null)
return;
var parseMe = xmlDoc.responseText.split('\n');
// Main large loop
for(i=0; i < parseMe.length; i++) {
// Skip broken lines or comments
if (parseMe[i].length < 1 ||
parseMe[i].substr(0, 1) == "#")
continue;
var v = new Vars();
v.Parse(parseMe[i]);
// BEGIN: PROCESS LOCATIONS
if (v.getField("TY") == "ERR") {
changeById('aprsVIEW:Error', v.getField("MS"));
numReplies++;
} // if
// END: PROCESS LOCATIONS
} // for
return numReplies;
} // OpenAPRS::storeViewReplyFromServer
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::addAprs
* Adds a new station to the map.
* Parameters:
* v: Special Vars's type record with satellite information.
* Returns: n/a
*/
OpenAPRS.prototype.addAprs = function(v) {
var latitude = parseFloat(v.getField("la"), 6);
var longitude = parseFloat(v.getField("lo"), 6);
var k = v.getField("nm");
var id = v.getField("id");
var ct = parseInt(v.getField("ct"));
if (this.aprsMap.isKey(k)) {
// Already in the satellite objectMap.
// Re just want to sync the time index.
var a = this.aprsMap.get(k);
if (ct < a.timeIndex)
// This really should never happen, it means the packets
// returned are earlier than the current packet stored.
return undefined;
var p = new GLatLng(latitude, longitude);
a.sync(id, ct, v);
a.changePosition(p);
return undefined;
} // if
var ov = undefined;
if (v.isName("OVR"))
ov = v.getField("ovr");
// Draw the marker on the map only if it isn't in the station list
var img = "http://www.opensats.net/images/icons/" + v.getField("img");
var marker = this.createAprsMarker(k, latitude, longitude, img, ov);
var name = k;
if (v.isName("tac"))
name = v.getField("tac") + "
" + name;
var label = new ELabel(new GLatLng(latitude, longitude), k, "satLabelName", new GSize(-50, +20), 90);
//label.hide();
// Add this satellite to the map.
var aprs = new APRS(id, k, ct, marker, label, v.getField("nm"), v);
aprs.addListener();
// Only enable the compass line or ground circle if we're in tracking mode
// for this satellite.
if (v.isName("TRK") && v.getField("TRK") == "Y") {
// sat.enableCompassLine();
// sat.enableGroundCircle();
} // if
this.aprsMap.add(k, aprs);
//if (k == "25544") {
// sat.enableTracking();
// this.boldSatelliteName(k);
//} // if
// Set star next to satellite in the satellite list.
//this.linkSatelliteName(k);
map.addOverlay(marker);
map.addOverlay(label);
//o.push(marker);
//o.push(label);
return marker;
} // OpenAPRS::addAprs
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::removeAprs
* Removes an aprs station from the map.
* Parameters:
* k : APRS name to remove.
* Returns: n/a
*/
OpenAPRS.prototype.removeAprs = function(k) {
if (!this.aprsMap.isKey(k))
return false;
// Set star next to satellite in the satellite list.
// We shouldn't unstar the satellite since it may
// be a temporary outage.
//this.unstarSatelliteName(k);
//this.unboldSatelliteName(k);
//this.unlinkSatelliteName(k);
var a = this.aprsMap.get(k);
//var refreshPaths = s.isTracking;
a.remove();
this.aprsMap.remove(k);
//if (refreshPaths)
// this.getPathsFromServer(map);
return true;
} // OpenAPRS::removeAprs
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::addHny
* Adds a new ULS entry to the map.
* Parameters:
* v: Special Vars's type record with satellite information.
* Returns: n/a
*/
OpenAPRS.prototype.addHny = function(v) {
var k = v.getField("frn");
var nm = v.getField("nm");
var address = v.getField("ad")
+", "
+v.getField("cty")
+", "
+v.getField("sta");
var center = this.hnyCenter;
var gcircle = new GCircle(center.lat(), center.lng());
var p = gcircle.getPointAtAngle(center.lat(), center.lng(), (this.hnyRange*1000)/2, this.hnyAngle);
this.hnyAngle += 15;
if (this.hnyAngle > 360) {
this.hnyRange += 4;
this.hnyAngle = 0;
if (this.hnyRange > 10)
this.hnyAngle /= 2;
} // if
if (this.hnyMap.isKey(k)) {
// Already in the satellite objectMap.
// Re just want to sync the time index.
var u = this.hnyMap.get(k);
u.sync(v);
return undefined;
} // if
var balloon = ''+v.getField("cl")+'
'
+'('+v.getField("cla")+')
'
+''+v.getField("nm")+'
'
+v.getField("ad")+'
'
+v.getField("ad2");
// Draw the marker on the map only if it isn't in the station list
var img = "http://www.opensats.net/images/icons/gender/no" + v.getField("img");
var marker = this.createHnyMarker(k, p.lat(), p.lng(), img, balloon);
var name = nm;
var label = new ELabel(new GLatLng(p.lat(), p.lng()), nm, "satLabelName", new GSize(-50, +20), 90);
label.hide();
// Add this ULS entry to the map.
var hny = new HNY(k, marker, label, nm, v);
//hny.addListener();
this.hnyMap.add(k, hny);
map.addOverlay(marker);
map.addOverlay(label);
this.hnyCount++;
window.setTimeout('gOpenAPRS.showHam(\''+k+'\', \''+address+'\')', this.hnyCount*200);
return marker;
} // OpenAPRS::addHny
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::removeHny
* Removes an aprs station from the map.
* Parameters:
* k : APRS name to remove.
* Returns: n/a
*/
OpenAPRS.prototype.removeHny = function(k) {
if (!this.hnMap.isKey(k))
return false;
var h = this.hnyMap.get(k);
h.remove();
this.hnyMap.remove(k);
return true;
} // OpenAPRS::removeHny
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::showHam
* Use geocoder to move HAM's position to where their address is.
* Parameters:
* k : HNY id to remove.
* Returns: n/a
*/
OpenAPRS.prototype.showHam = function(k, address) {
var me = this;
if (!this.hnyMap.isKey(k))
return false;
var h = this.hnyMap.get(k);
if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (point) {
h.changePosition(point);
} // if
// else
// logById('logContainer', 'logTable', 'ULS: Unable to locate '+h.name+' ['+address+']');
me.hnyCount--;
if (me.hnyCount == 0)
me.organizeHny();
} // function
);
} // if
return true;
} // OpenAPRS::showHam
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::clear
* Clears all aprs stations on the map.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.clear = function() {
var keys = this.aprsMap.getKeys();
for(var i=0; i < keys.length; i++) {
var a = this.aprsMap.get(keys[i]);
a.remove();
this.aprsMap.remove(keys[i]);
} // for
} // OpenAPRS::clear
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::clearHny
* Clears all aprs stations on the map.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.clearHny = function() {
var keys = this.hnyMap.getKeys();
for(var i=0; i < keys.length; i++) {
var h = this.hnyMap.get(keys[i]);
h.remove();
this.hnyMap.remove(keys[i]);
} // for
} // OpenAPRS::clearHny
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::organizeHny
* Clears all aprs stations on the map.
* Parameters:
* none
* Returns: n/a
*/
OpenAPRS.prototype.organizeHny = function() {
var la = this.hnyCenter.lat() + 0.06;
var lo = this.hnyCenter.lng() - 0.2;
var lo2;
var keys = this.hnyMap.getKeys();
var losCount = 0;
for(var i=0; i < keys.length; i++) {
var h = this.hnyMap.get(keys[i]);
if (h.posFound)
continue;
if ((losCount % 10) == 0) {
la -= 0.03;
lo2 = lo;
} // if
else
lo2 += 0.01;
var p = new GLatLng(la, lo2);
h.changePosition(p)
losCount++;
} // for
} // OpenAPRS::organizeHny
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::addAprsPositions
* Adds a new set of future positions to satellite storage.
* Parameters:
* v: Special Vars's type record with satellite information.
* Returns: n/a
*/
OpenAPRS.prototype.addAprsPositions = function(v) {
var num_rows = 0;
if (!v.isName("POS") || !v.isName("NM"))
return 0;
// Get the satellite number (record key).
var k = v.getField("NM");
if (!this.aprsMap.isKey(k))
// APRS station wasn't stored in database.
return 0;
// Get satellite record.
var a = this.aprsMap.get(k);
// clear old positions
a.clearPositions();
var parseMe = v.getField("POS").split('\n');
var plat = 0;
var plng = 0;
var redraw = false;
for (var i=0; i < parseMe.length; i++) {
var v2 = new Vars();
v2.Parse(parseMe[i]);
if (!v2.isName("t"))
continue;
var t = parseInt(v2.getField("t"));
if (a.positions.isKey(t))
continue;
redraw = true;
var lat = parseFloat(v2.getField("l"));
var lng = parseFloat(v2.getField("g"));
//lat += plat;
//lng += plng;
var point = new GLatLng(lat, lng);
a.addPosition(k, t, point, v2);
plat = lat;
plng = lng;
num_rows++;
} // for
if (redraw)
a.plotTrail();
return num_rows;
} // OpenAPRS::addAprsPositions
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::createAprsMarker
* Change satellite tracking to num specified.
* Parameters:
* k : Key to aprs marker.
* lat : Latitude to create marker at.
* lng : Longitude to create marker at.
* img : Image to use for marker.
* ov : Overlay if needed.
* Returns: n/a
*/
OpenAPRS.prototype.createAprsMarker = function(k, lat, lng, img, ov) {
var icon;
var point;
var marker;
var me = this;
// Create our "tiny" marker icon
var point = new GLatLng(lat, lng);
var icon = new GIcon();
icon.image = img;
icon.shadow = "http://www.openaprs.net/images/icons/shadow.png";
icon.iconSize = new GSize(22, 22);
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(11, 11);
icon.infoWindowAnchor = new GPoint(25, 0);
var opts = new Object();
opts.icon = icon;
opts.zIndexProcess = PutOnTop;
var opts2 = {
"icon": icon,
"clickable": true,
"draggable": false,
"labelText": ov,
"labelOffset": new GSize(-4, -8)
};
if (ov != undefined)
var marker = new LabeledMarker(point, opts2);
else
var marker = new GMarker(point, opts);
GEvent.addListener(marker, "click", function() {
gOpenAPRS.clickAprsMarker(k);
//marker.openInfoWindowHtml(html);
});
GEvent.addListener(marker, "infowindowclose", function() {
gOpenAPRS.closeAprsMarker(k);
//marker.openInfoWindowHtml(html);
});
return marker;
} // createAprsMarker
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::createHnyMarker
* Change satellite tracking to num specified.
* Parameters:
* k : Key to aprs marker.
* lat : Latitude to create marker at.
* lng : Longitude to create marker at.
* img : Image to use for marker.
* b : Balloon html.
* Returns: n/a
*/
OpenAPRS.prototype.createHnyMarker = function(k, lat, lng, img, b) {
var icon;
var point;
var marker;
var me = this;
// Create our "tiny" marker icon
var point = new GLatLng(lat, lng);
var icon = new GIcon();
icon.image = img;
icon.shadow = "http://www.openaprs.net/images/icons/shadow.png";
icon.iconSize = new GSize(22, 22);
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(11, 11);
icon.infoWindowAnchor = new GPoint(25, 0);
var opts = new Object();
opts.icon = icon;
opts.zIndexProcess = PutOnTop;
var marker = new GMarker(point, opts);
GEvent.addListener(marker, "click", function() {
//gOpenAPRS.clickHnyMarker(k);
marker.openInfoWindowHtml(b);
});
GEvent.addListener(marker, "infowindowclose", function() {
//gOpenAPRS.closeHnyMarker(k);
//marker.openInfoWindowHtml(b);
});
GEvent.addListener(marker, "mouseover", function() {
var h = gOpenAPRS.getHny(k);
if (h == undefined)
return;
h.showLabel();
});
GEvent.addListener(marker, "mouseout", function() {
var h = gOpenAPRS.getHny(k);
if (h == undefined)
return;
h.hideLabel();
});
return marker;
} // createHnyMarker
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::clickAprsMarker
* Change satellite tracking to num specified.
* Parameters:
* k : Key to aprs marker.
* Returns: n/a
*/
OpenAPRS.prototype.clickAprsMarker = function(k) {
if (!this.aprsMap.isKey(k))
return;
var a = this.aprsMap.get(k);
a.openBalloon();
return;
} // clickAprsMarker
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::closeAprsMarker
* Change satellite tracking to num specified.
* Parameters:
* k : Key to aprs marker.
* Returns: n/a
*/
OpenAPRS.prototype.closeAprsMarker = function(k) {
if (!this.aprsMap.isKey(k))
return;
var a = this.aprsMap.get(k);
a.balloonOpen = false;
return;
} // closeAprsMarker
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::clickHnyMarker
* Change satellite tracking to num specified.
* Parameters:
* k : Key to aprs marker.
* Returns: n/a
*/
OpenAPRS.prototype.clickHnyMarker = function(k) {
if (!this.hnyMap.isKey(k))
return;
var h = this.hnyMap.get(k);
h.openBalloon();
return;
} // clickHnyMarker
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::closeHnyMarker
* Change satellite tracking to num specified.
* Parameters:
* k : Key to aprs marker.
* Returns: n/a
*/
OpenAPRS.prototype.closeHnyMarker = function(k) {
if (!this.hnyMap.isKey(k))
return;
var h = this.hnyMap.get(k);
h.balloonOpen = false;
return;
} // closeHnyMarker
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::getHny
* Trys to find an HNY marker.
* Parameters:
* k : Key to HNY marker.
* Returns: n/a
*/
OpenAPRS.prototype.getHny = function(k) {
if (!this.hnyMap.isKey(k))
return undefined;
var h = this.hnyMap.get(k);
return h;
} // getHny
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::parseAprsQueue
* Processes queue of APRS last positions and positions.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.parseAprsQueue = function() {
// Parse position buffer
var tmplastposArray = new Array();
for(var i=0; i < this.lastposArray.length; i++) {
if (i < 20) {
this.addAprs(this.lastposArray[i]);
this.addAprsPositions(this.lastposArray[i]);
} // if
else
tmplastposArray.push(this.lastposArray[i]);
} // for
this.lastposArray = tmplastposArray;
if (this.lastposArray.length > 0) {
showWindow('OpenAPRS:Queue');
changeById('OpenAPRS:Queue:Number', this.lastposArray.length);
} // if
else
hideWindow('OpenAPRS:Queue');
return;
} // OpenAPRS::parseAprsQueue
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::parseHnyQueue
* Processes queue of APRS last positions and positions.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.parseHnyQueue = function() {
var center = map.getCenter();
var la = center.lat();
var lo = center.lng();
// Parse position buffer
var tmpHnyArray = new Array();
for(var i=0; i < this.hnyArray.length; i++) {
if (i < 10)
this.addHny(this.hnyArray[i]);
else
tmpHnyArray.push(this.hnyArray[i]);
} // for
this.hnyArray = tmpHnyArray;
if (this.hnyArray.length > 0) {
showWindow('OpenAPRS:Queue');
changeById('OpenAPRS:Queue:Number', this.hnyArray.length);
} // if
else
hideWindow('OpenAPRS:Queue');
return;
} // OpenAPRS::parseHnyQueue
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::enablePHG
* Processes queue of APRS last positions and positions.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.enablePHG = function() {
if (this.isPHG)
return;
this.isPHG = true;
var keys = this.aprsMap.getKeys();
for(i=0; i < keys.length; i++) {
var a = this.aprsMap.get(keys[i]);
a.enablePHG();
} // for
return;
} // OpenAPRS::enablePHG
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::disablePHG
* Processes queue of APRS last positions and positions.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.disablePHG = function() {
if (!this.isPHG)
return;
this.isPHG = false;
var keys = this.aprsMap.getKeys();
for(i=0; i < keys.length; i++) {
var a = this.aprsMap.get(keys[i]);
a.disablePHG();
} // for
return;
} // OpenAPRS::disablePHG
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::checkTrackLinks
* Processes queue of APRS last positions and positions.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.checkTrackLinks = function() {
var t = this.track;
var keys = t.callMap.getKeys();
for(var i in keys) {
var k = keys[i];
if (this.aprsMap.isKey(k)) {
t.link(k);
t.star(k);
} // if
else {
t.unlink(k);
t.unstar(k);
} // else
} // for
return;
} // OpenAPRS::checkTrackLinks
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::snapToAprs
* Processes queue of APRS last positions and positions.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.snapToAprs = function(k) {
if (!this.aprsMap.isKey(k))
return false;
var a = this.aprsMap.get(k);
var latlng = a.marker.getLatLng();
map.setCenter(latlng, 11);
return true;
} // OpenAPRS::snapToAprs
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::snapToLatLngAndZoom
* Snaps the map to a lat and lng and zoom.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.snapToLatLngAndZoom = function(la, lo, zm) {
var latlng = new GLatLng(la, lo);
map.setCenter(latlng, zm);
return;
} // OpenAPRS::snapToLatLngAndZoom
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::refresh
* Refreshes the map based on what mode the map is in.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.refresh = function() {
if (this.track.isPaused())
this.getLastpositionsFromServer(map);
else
this.getTrackLastpositionsFromServer(map);
return true;
} // OpenAPRS::refresh
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::clearRefresh
* Clears all stations off of the map then refreshes.
* Parameters: n/a
* Returns: n/a
*/
OpenAPRS.prototype.clearRefresh = function() {
this.clear();
this.refresh();
return true;
} // OpenAPRS::clearRefresh
/* ----------------------------------------------------------------------------
* Name: OpenAPRS::expireAprs
* Expires any aprs stations after a specified timeframe.
* Parameters:
* n : Number of seconds *10 after expiration.
* Returns: n/a
*/
OpenAPRS.prototype.expireAprs = function(n) {
var sw = new Stopwatch();
var numRemoved = 0;
sw.Start();
// Remove any stations that haven't been updated in a while.
var keys = this.aprsMap.getKeys();
for(var i=0; i < keys.length; i++) {
var a = this.aprsMap.get(keys[i]);
a.wantToRemove++;
if (a.wantToRemove >= n) {
this.removeAprs(keys[i]);
numRemoved++;
} // if
} // for
if (numRemoved > 0) {
log('Cleanup: Results '+numRemoved+' stations removed (T:'+sw.Time()+')');
changeById('mapRESULTS', 'Results '+numRemoved+' removed ('+sw.Time()+' seconds)');
} // if
} // OpenAPRS::expireAprs