kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
Merge branch 'lightning-via-oams' into 'master'
Initial commit See merge request gridtracker.org/gridtracker!181 If this is changing anything in the UI or operational behavior, please prepare to update the wiki!merge-requests/182/head test_NewLightening
commit
91145aa562
|
@ -4665,6 +4665,7 @@ function setStrikesButton()
|
||||||
{
|
{
|
||||||
strikesImg.style.webkitFilter = "grayscale(1)";
|
strikesImg.style.webkitFilter = "grayscale(1)";
|
||||||
}
|
}
|
||||||
|
g_gtLiveStatusUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleStrikesValue()
|
function toggleStrikesValue()
|
||||||
|
@ -5210,8 +5211,6 @@ function displayTime()
|
||||||
|
|
||||||
if (g_mapSettings.strikes && g_mapSettings.offlineMode == false)
|
if (g_mapSettings.strikes && g_mapSettings.offlineMode == false)
|
||||||
{
|
{
|
||||||
if (g_strikeWebSocket == null) loadStrikes();
|
|
||||||
|
|
||||||
var now = Date.now();
|
var now = Date.now();
|
||||||
for (var time in g_bolts)
|
for (var time in g_bolts)
|
||||||
{
|
{
|
||||||
|
@ -5225,17 +5224,6 @@ function displayTime()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_layerSources.strikes.clear();
|
g_layerSources.strikes.clear();
|
||||||
if (g_strikeWebSocket != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
g_strikeWebSocket.close();
|
|
||||||
}
|
|
||||||
catch (e)
|
|
||||||
{
|
|
||||||
g_strikeWebSocket = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_currentNightState != g_nightTime)
|
if (g_currentNightState != g_nightTime)
|
||||||
|
@ -5382,20 +5370,17 @@ g_lightningGlobal[1] = new ol.style.Icon({
|
||||||
});
|
});
|
||||||
|
|
||||||
var g_bolts = {};
|
var g_bolts = {};
|
||||||
var g_strikeWebSocket = null;
|
|
||||||
var g_strikeInterval = null;
|
|
||||||
var g_strikeRange = 0.4;
|
var g_strikeRange = 0.4;
|
||||||
|
|
||||||
function toggleStrikeGlobal()
|
function toggleStrikeGlobal()
|
||||||
{
|
{
|
||||||
g_mapSettings.strikesGlobal =
|
g_mapSettings.strikesGlobal = g_mapSettings.strikesGlobal == false;
|
||||||
g_mapSettings.strikesGlobal == false;
|
|
||||||
saveMapSettings();
|
saveMapSettings();
|
||||||
|
|
||||||
var msg = "Local Strikes";
|
let msg = "Local Strikes";
|
||||||
if (g_mapSettings.strikesGlobal == true) msg = "Global Strikes";
|
if (g_mapSettings.strikesGlobal == true) msg = "Global Strikes";
|
||||||
|
|
||||||
var worker =
|
let worker =
|
||||||
"<font color='yellow'>Strike Distance Changed<br/>" + msg + "</font>";
|
"<font color='yellow'>Strike Distance Changed<br/>" + msg + "</font>";
|
||||||
if (g_mapSettings.strikes == false) { worker += "<br/><font color='red'>Detection is not enabled!</font>"; }
|
if (g_mapSettings.strikes == false) { worker += "<br/><font color='red'>Detection is not enabled!</font>"; }
|
||||||
addLastTraffic(worker);
|
addLastTraffic(worker);
|
||||||
|
@ -5403,169 +5388,67 @@ function toggleStrikeGlobal()
|
||||||
g_layerSources.strikes.clear();
|
g_layerSources.strikes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
function setStrikeDistance()
|
function handleStrike(strike)
|
||||||
{
|
{
|
||||||
|
let index = Date.now();
|
||||||
|
while (index in g_bolts) index++;
|
||||||
|
|
||||||
|
let inRange = true;
|
||||||
|
|
||||||
|
if (Math.abs(strike.o - g_myLon) > g_strikeRange) inRange = false;
|
||||||
|
|
||||||
|
if (Math.abs(strike.a - g_myLat) > g_strikeRange) inRange = false;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
g_mapSettings.offlineMode == true &&
|
g_mapSettings.strikesGlobal ||
|
||||||
g_strikeWebSocket != null &&
|
(g_mapSettings.strikesGlobal == false && inRange)
|
||||||
g_strikeWebSocket.readyState != 3
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
g_strikeWebSocket.close();
|
g_bolts[index] = iconFeature(
|
||||||
return;
|
ol.proj.fromLonLat([strike.o, strike.a]),
|
||||||
|
inRange ? g_lightningBolt : g_lightningGlobal[0],
|
||||||
|
1
|
||||||
|
);
|
||||||
|
|
||||||
|
g_layerSources.strikes.addFeature(g_bolts[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_strikeWebSocket != null)
|
if (inRange == true)
|
||||||
{
|
{
|
||||||
var distance = g_strikeRange;
|
playStrikeAlert();
|
||||||
if (g_mapSettings.strikesGlobal == true) distance = 1000;
|
|
||||||
|
|
||||||
var send = "{\"west\":-180,\"east\":180,\"north\":-90,\"south\":-90}";
|
let dist =
|
||||||
|
parseInt(
|
||||||
|
MyCircle.distance(
|
||||||
|
g_myLat,
|
||||||
|
g_myLon,
|
||||||
|
strikes.a,
|
||||||
|
strikes.o,
|
||||||
|
distanceUnit.value
|
||||||
|
) * MyCircle.validateRadius(distanceUnit.value)
|
||||||
|
).toLocaleString() +
|
||||||
|
" " +
|
||||||
|
distanceUnit.value.toLowerCase();
|
||||||
|
let azim =
|
||||||
|
parseInt(
|
||||||
|
MyCircle.bearing(g_myLat, g_myLon, strike.a, strike.o)
|
||||||
|
).toLocaleString() + "°";
|
||||||
|
|
||||||
if (g_strikeInterval == null) { g_strikeInterval = setInterval(setStrikeDistance, 300000); }
|
let worker =
|
||||||
|
"<font style='color:yellow;font-weight:bold'>Lighting Strike Detected!</font><br/>";
|
||||||
|
worker +=
|
||||||
|
"<font style='color:white'>" + userTimeString(null) + "</font><br/>";
|
||||||
|
worker +=
|
||||||
|
"<font style='color:orange'>Distance: </font><font style='color:lightblue;font-weight:bold'>" +
|
||||||
|
dist +
|
||||||
|
"</font><br/>";
|
||||||
|
worker +=
|
||||||
|
"<font style='color:cyan'>Bearing: </font><font style='color:lightgreen;font-weight:bold'>" +
|
||||||
|
azim +
|
||||||
|
"</font>";
|
||||||
|
|
||||||
try
|
addLastTraffic(worker);
|
||||||
{
|
|
||||||
g_strikeWebSocket.send(send);
|
|
||||||
}
|
|
||||||
catch (e)
|
|
||||||
{
|
|
||||||
g_strikeWebSocket = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (g_strikeInterval != null)
|
|
||||||
{
|
|
||||||
clearInterval(g_strikeInterval);
|
|
||||||
g_strikeInterval = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var g_strikeCount = 0;
|
|
||||||
function loadStrikes()
|
|
||||||
{
|
|
||||||
if (g_strikeWebSocket) return;
|
|
||||||
|
|
||||||
var rnd = parseInt(Math.random() * 4);
|
|
||||||
var ws_server = "";
|
|
||||||
if (rnd < 1)
|
|
||||||
{
|
|
||||||
ws_server = "ws7.blitzortung.org";
|
|
||||||
}
|
|
||||||
else if (rnd < 2)
|
|
||||||
{
|
|
||||||
ws_server = "ws6.blitzortung.org";
|
|
||||||
}
|
|
||||||
else if (rnd < 3)
|
|
||||||
{
|
|
||||||
ws_server = "ws5.blitzortung.org";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ws_server = "ws1.blitzortung.org";
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
g_strikeWebSocket = new WebSocket("wss:///" + ws_server + ":3000");
|
|
||||||
}
|
|
||||||
catch (e)
|
|
||||||
{
|
|
||||||
g_strikeWebSocket = null;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strikeWebSocket.onopen = function ()
|
|
||||||
{
|
|
||||||
setStrikeDistance();
|
|
||||||
};
|
|
||||||
|
|
||||||
g_strikeWebSocket.onmessage = function (evt)
|
|
||||||
{
|
|
||||||
var Strikes = JSON.parse(evt.data);
|
|
||||||
Strikes.sig = null;
|
|
||||||
|
|
||||||
if (
|
|
||||||
"delay" in Strikes &&
|
|
||||||
"time" in Strikes &&
|
|
||||||
"lat" in Strikes &&
|
|
||||||
"lon" in Strikes
|
|
||||||
)
|
|
||||||
{
|
|
||||||
var index = Date.now();
|
|
||||||
while (index in g_bolts) index++;
|
|
||||||
|
|
||||||
var inRange = true;
|
|
||||||
|
|
||||||
if (Math.abs(Strikes.lon - g_myLon) > g_strikeRange) inRange = false;
|
|
||||||
|
|
||||||
if (Math.abs(Strikes.lat - g_myLat) > g_strikeRange) inRange = false;
|
|
||||||
|
|
||||||
if (
|
|
||||||
g_mapSettings.strikesGlobal ||
|
|
||||||
(g_mapSettings.strikesGlobal == false && inRange)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
g_bolts[index] = iconFeature(
|
|
||||||
ol.proj.fromLonLat([Strikes.lon, Strikes.lat]),
|
|
||||||
inRange ? g_lightningBolt : g_lightningGlobal[0],
|
|
||||||
1
|
|
||||||
);
|
|
||||||
|
|
||||||
g_layerSources.strikes.addFeature(g_bolts[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inRange == true)
|
|
||||||
{
|
|
||||||
playStrikeAlert();
|
|
||||||
|
|
||||||
var dist =
|
|
||||||
parseInt(
|
|
||||||
MyCircle.distance(
|
|
||||||
g_myLat,
|
|
||||||
g_myLon,
|
|
||||||
Strikes.lat,
|
|
||||||
Strikes.lon,
|
|
||||||
distanceUnit.value
|
|
||||||
) * MyCircle.validateRadius(distanceUnit.value)
|
|
||||||
).toLocaleString() +
|
|
||||||
" " +
|
|
||||||
distanceUnit.value.toLowerCase();
|
|
||||||
var azim =
|
|
||||||
parseInt(
|
|
||||||
MyCircle.bearing(g_myLat, g_myLon, Strikes.lat, Strikes.lon)
|
|
||||||
).toLocaleString() + "°";
|
|
||||||
|
|
||||||
var worker =
|
|
||||||
"<font style='color:yellow;font-weight:bold'>Lighting Strike Detected!</font><br/>";
|
|
||||||
worker +=
|
|
||||||
"<font style='color:white'>" + userTimeString(null) + "</font><br/>";
|
|
||||||
worker +=
|
|
||||||
"<font style='color:orange'>Distance: </font><font style='color:lightblue;font-weight:bold'>" +
|
|
||||||
dist +
|
|
||||||
"</font><br/>";
|
|
||||||
worker +=
|
|
||||||
"<font style='color:cyan'>Bearing: </font><font style='color:lightgreen;font-weight:bold'>" +
|
|
||||||
azim +
|
|
||||||
"</font>";
|
|
||||||
|
|
||||||
addLastTraffic(worker);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
delete evt.data;
|
|
||||||
};
|
|
||||||
|
|
||||||
g_strikeWebSocket.onerror = function ()
|
|
||||||
{
|
|
||||||
g_strikeWebSocket = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
g_strikeWebSocket.onclose = function ()
|
|
||||||
{
|
|
||||||
g_strikeWebSocket = null;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleMouseTrack()
|
function toggleMouseTrack()
|
||||||
|
|
|
@ -9,7 +9,8 @@ var g_chatRecvFunctions = {
|
||||||
info: gtChatUpdateCall,
|
info: gtChatUpdateCall,
|
||||||
drop: gtChatRemoveCall,
|
drop: gtChatRemoveCall,
|
||||||
mesg: gtChatMessage,
|
mesg: gtChatMessage,
|
||||||
o: gtSpotMessage
|
o: gtSpotMessage,
|
||||||
|
l: gtLightningStrike
|
||||||
};
|
};
|
||||||
|
|
||||||
var ChatState = Object();
|
var ChatState = Object();
|
||||||
|
@ -235,8 +236,9 @@ function gtChatSendStatus()
|
||||||
msg.mode = myMode;
|
msg.mode = myMode;
|
||||||
msg.band = myBand;
|
msg.band = myBand;
|
||||||
msg.src = "GT";
|
msg.src = "GT";
|
||||||
msg.canmsg = g_appSettings.gtMsgEnable == true;
|
msg.canmsg = g_appSettings.gtMsgEnable;
|
||||||
msg.o = g_appSettings.gtSpotEnable == true ? 1 : 0;
|
msg.o = g_appSettings.gtSpotEnable == true ? 1 : 0;
|
||||||
|
msg.l = g_mapSettings.strikes == true ? 1 : 0;
|
||||||
msg = JSON.stringify(msg);
|
msg = JSON.stringify(msg);
|
||||||
|
|
||||||
if (msg != g_lastGtStatus)
|
if (msg != g_lastGtStatus)
|
||||||
|
@ -595,6 +597,15 @@ function gtSpotMessage(jsmesg)
|
||||||
addNewOAMSSpot(jsmesg.cid, jsmesg.db);
|
addNewOAMSSpot(jsmesg.cid, jsmesg.db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function gtLightningStrike(jsmesg)
|
||||||
|
{
|
||||||
|
// Saftey check
|
||||||
|
if (g_mapSettings.strikes)
|
||||||
|
{
|
||||||
|
handleStrike(jsmesg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function gtChatSystemInit()
|
function gtChatSystemInit()
|
||||||
{
|
{
|
||||||
g_gtEngineInterval = setInterval(gtChatStateMachine, 1000);
|
g_gtEngineInterval = setInterval(gtChatStateMachine, 1000);
|
||||||
|
|
Ładowanie…
Reference in New Issue