kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
Aurora As heatmap
rodzic
ffe0bc5468
commit
f907bc9e09
|
@ -611,9 +611,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<td id="mufTitle" colspan="3">Maximum Usable Frequency</td>
|
||||
<td id="fof2Title" colspan="3">Critical Frequency NVIS</td>
|
||||
<td id="epiTitle" colspan="3">Es Probability Index</td>
|
||||
<td id="aufTitle" colspan="3">Aurora Forecast</td>
|
||||
</tr>
|
||||
<tr id="epiTimeTr">
|
||||
<td colspan="3" align="center" id="epiTimeTd"></td>
|
||||
<tr id="epiTimeTr"><td colspan="3" align="center" id="epiTimeTd"></td></tr>
|
||||
<tr id="aufForTimeTr">
|
||||
<td colspan="3" align="center" id="aufForTimeTd"></td>
|
||||
</tr>
|
||||
<tr id="epiTimeOffsetTr">
|
||||
<td id="epiTimeOffsetTd">0</td>
|
||||
|
@ -646,6 +648,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
rgb(170,219,209) 50%,
|
||||
rgb(253,246,171) 100%);width: 170px;" class="barGraph"></td>
|
||||
</tr>
|
||||
<tr id="fof2BarTr">
|
||||
<td colspan="3" style="background: linear-gradient(90deg,
|
||||
rgb(184,159,190) 0%,
|
||||
rgb(170,219,209) 50%,
|
||||
rgb(253,246,171) 100%);width: 170px;" class="barGraph"></td>
|
||||
</tr>
|
||||
<tr id="mufRangeTr">
|
||||
<td align="left"><5</td>
|
||||
<td align="right">14</td>
|
||||
|
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 8.4 KiB |
|
@ -630,6 +630,7 @@ GT.predImageArray[0] = "./img/no-pred.png";
|
|||
GT.predImageArray[1] = "./img/muf.png";
|
||||
GT.predImageArray[2] = "./img/fof2.png";
|
||||
GT.predImageArray[3] = "./img/epi.png";
|
||||
GT.predImageArray[4] = "./img/auf.png";
|
||||
|
||||
GT.gridViewArray = Array();
|
||||
GT.gridViewArray[1] = "Live";
|
||||
|
@ -4228,13 +4229,13 @@ function timeNowSec()
|
|||
return parseInt(Date.now() / 1000);
|
||||
}
|
||||
|
||||
function createGlobalHeatmapLayer(name, radius, blur)
|
||||
function createGlobalHeatmapLayer(name, blur, radius)
|
||||
{
|
||||
GT.layerSources[name] = new ol.source.Vector({});
|
||||
GT.layerVectors[name] = new ol.layer.Heatmap({
|
||||
source: GT.layerSources[name],
|
||||
blur: 20,
|
||||
radius: 15,
|
||||
blur: blur,
|
||||
radius: radius,
|
||||
zIndex: Object.keys(GT.layerVectors).length + 1
|
||||
});
|
||||
GT.layerVectors[name].set("name", name);
|
||||
|
@ -4426,7 +4427,7 @@ function initMap()
|
|||
];
|
||||
|
||||
createGlobalMapLayer("award");
|
||||
createGlobalHeatmapLayer("pskHeat", 10, 5);
|
||||
createGlobalHeatmapLayer("pskHeat", 20, 15);
|
||||
createGlobalMapLayer("qso");
|
||||
createGlobalMapLayer("qsoPins");
|
||||
createGlobalMapLayer("live");
|
||||
|
@ -15188,7 +15189,10 @@ GT.epiTimeValue = 0;
|
|||
function changePredOpacityValue()
|
||||
{
|
||||
predOpacityTd.innerHTML = GT.mapSettings.predOpacity = predOpacityValue.value;
|
||||
predLayerRefreh();
|
||||
if (GT.PredLayer != null)
|
||||
{
|
||||
GT.PredLayer.setOpacity(Number(GT.mapSettings.predOpacity));
|
||||
}
|
||||
}
|
||||
|
||||
function changeEpiTimeValue()
|
||||
|
@ -15230,7 +15234,7 @@ function createPredSource()
|
|||
{
|
||||
return new ol.source.XYZ({
|
||||
url: getCurrentPredURL(),
|
||||
attributions: GT.mapSettings.predMode != 3 ? "<a href='https://prop.kc2g.com/acknowledgments/' target='_blank' title='Visit prop.kc2g.com' class='roundBorder'>KC2G</a>" : "<a href='https://www.propquest.co.uk/about.php' target='_blank' title='Visit PROPquest.co.uk' class='roundBorder'>PROPquest</a>",
|
||||
attributions: GT.mapSettings.predMode != 3 ? "<a href='https://prop.kc2g.com/acknowledgments/' target='_blank' title='Visit prop.kc2g.com' class='roundBorder'>KC2G</a>" : GT.mapSettings.predMode == 3 ? "<a href='https://www.propquest.co.uk/about.php' target='_blank' title='Visit PROPquest.co.uk' class='roundBorder'>PROPquest</a>" : "NOAA",
|
||||
minZoom: 0,
|
||||
maxZoom: 0
|
||||
});
|
||||
|
@ -15238,13 +15242,37 @@ function createPredSource()
|
|||
|
||||
function createPredLayer()
|
||||
{
|
||||
var layerVector = new ol.layer.Tile({
|
||||
source: createPredSource(),
|
||||
opacity: Number(GT.mapSettings.predOpacity),
|
||||
visible: true,
|
||||
zIndex: 0
|
||||
});
|
||||
var layerVector;
|
||||
|
||||
if (GT.mapSettings.predMode != 4)
|
||||
{
|
||||
layerVector = new ol.layer.Tile({
|
||||
source: createPredSource(),
|
||||
opacity: Number(GT.mapSettings.predOpacity),
|
||||
visible: true,
|
||||
zIndex: 0
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
var source = new ol.source.Vector({});
|
||||
layerVector = new ol.layer.Heatmap({
|
||||
source: source,
|
||||
opacity: Number(GT.mapSettings.predOpacity),
|
||||
visible: true,
|
||||
gradient: ['#f00', '#ff0', '#0f0', '#0ff', '#00f'],
|
||||
blur: 30,
|
||||
radius: 8,
|
||||
zIndex: 0
|
||||
});
|
||||
|
||||
if (GT.predLayerTimeout != null)
|
||||
{
|
||||
nodeTimers.clearTimeout(GT.predLayerTimeout);
|
||||
GT.predLayerTimeout = null;
|
||||
}
|
||||
GT.predLayerTimeout = nodeTimers.setTimeout(predLayerRefreh, 300 * 1000);
|
||||
}
|
||||
layerVector.set("name", "Pred");
|
||||
|
||||
return layerVector;
|
||||
|
@ -15252,7 +15280,7 @@ function createPredLayer()
|
|||
|
||||
function cyclePredLayer()
|
||||
{
|
||||
GT.mapSettings.predMode = (GT.mapSettings.predMode + 1) % 4;
|
||||
GT.mapSettings.predMode = (GT.mapSettings.predMode + 1) % 5;
|
||||
displayPredLayer();
|
||||
saveMapSettings();
|
||||
}
|
||||
|
@ -15260,23 +15288,10 @@ function cyclePredLayer()
|
|||
function predInit()
|
||||
{
|
||||
GT.predViews = Array();
|
||||
GT.predViews[1] =
|
||||
{
|
||||
on: { mufTitle, mufBarTr, mufRangeTr },
|
||||
off: { fof2Title, epiTitle, epiTimeTr, epiTimeOffsetTr, epiBarTr, epiRangeTr, fof2RangeTr }
|
||||
};
|
||||
|
||||
GT.predViews[2] =
|
||||
{
|
||||
on: { fof2Title, mufBarTr, fof2RangeTr },
|
||||
off: { mufTitle, epiTitle, epiTimeTr, epiTimeOffsetTr, epiBarTr, epiRangeTr, mufRangeTr }
|
||||
};
|
||||
|
||||
GT.predViews[3] =
|
||||
{
|
||||
on: { epiTitle, epiTimeTr, epiTimeOffsetTr, epiBarTr, epiRangeTr },
|
||||
off: { mufTitle, fof2Title, mufBarTr, mufRangeTr, fof2RangeTr }
|
||||
};
|
||||
GT.predViews[1] = { mufTitle, mufBarTr, mufRangeTr };
|
||||
GT.predViews[2] = { fof2Title, fof2BarTr, fof2RangeTr }
|
||||
GT.predViews[3] = { epiTitle, epiTimeTr, epiTimeOffsetTr, epiBarTr, epiRangeTr };
|
||||
GT.predViews[4] = { aufTitle, aufForTimeTr };
|
||||
}
|
||||
|
||||
function displayPredLayer()
|
||||
|
@ -15285,24 +15300,15 @@ function displayPredLayer()
|
|||
{
|
||||
predDiv.style.display = "block";
|
||||
predButton.style.display = "inline-block";
|
||||
let view = GT.predViews[GT.mapSettings.predMode];
|
||||
for (var item in view.on)
|
||||
for (var viewIndex in GT.predViews)
|
||||
{
|
||||
view.on[item].style.display = "";
|
||||
}
|
||||
for (var item in view.off)
|
||||
{
|
||||
view.off[item].style.display = "none";
|
||||
}
|
||||
if (GT.PredLayer == null)
|
||||
{
|
||||
GT.PredLayer = createPredLayer();
|
||||
GT.map.addLayer(GT.PredLayer);
|
||||
}
|
||||
else
|
||||
{
|
||||
predLayerRefreh();
|
||||
for (var html in GT.predViews[viewIndex])
|
||||
{
|
||||
GT.predViews[viewIndex][html].style.display = viewIndex == GT.mapSettings.predMode ? "" : "none";
|
||||
}
|
||||
}
|
||||
|
||||
predLayerRefreh();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -15329,11 +15335,81 @@ function displayPredLayer()
|
|||
|
||||
function predLayerRefreh()
|
||||
{
|
||||
if (GT.PredLayer != null && GT.mapSettings.offlineMode == false)
|
||||
if (GT.mapSettings.offlineMode == false)
|
||||
{
|
||||
GT.PredLayer.setSource(createPredSource());
|
||||
GT.PredLayer.setOpacity(Number(GT.mapSettings.predOpacity));
|
||||
if (GT.PredLayer)
|
||||
{
|
||||
GT.map.removeLayer(GT.PredLayer);
|
||||
GT.PredLayer = null;
|
||||
}
|
||||
|
||||
GT.PredLayer = createPredLayer();
|
||||
GT.map.addLayer(GT.PredLayer);
|
||||
}
|
||||
|
||||
if (GT.mapSettings.predMode == 4)
|
||||
{
|
||||
aufForTimeTd.innerHTML = "...retrieving data...";
|
||||
getAuroraJson();
|
||||
}
|
||||
}
|
||||
|
||||
function getAuroraJson()
|
||||
{
|
||||
getBuffer(
|
||||
"https://services.swpc.noaa.gov/json/ovation_aurora_latest.json",
|
||||
handleAuroraResponse,
|
||||
null,
|
||||
"https",
|
||||
443
|
||||
);
|
||||
}
|
||||
function square(long, lat)
|
||||
{
|
||||
var thing = new ol.geom.Polygon([
|
||||
[
|
||||
ol.proj.fromLonLat([long, lat]),
|
||||
ol.proj.fromLonLat([long, lat+1]),
|
||||
ol.proj.fromLonLat([long+1, lat+1]),
|
||||
ol.proj.fromLonLat([long+1, lat])
|
||||
]
|
||||
]);
|
||||
var square = new ol.Feature({
|
||||
geometry: thing
|
||||
});
|
||||
return square;
|
||||
}
|
||||
|
||||
function handleAuroraResponse(buffer)
|
||||
{
|
||||
if (GT.PredLayer != null && GT.mapSettings.predMode == 4)
|
||||
{
|
||||
var json = String(buffer);
|
||||
json = JSON.parse(json);
|
||||
GT.PredLayer.getSource().clear();
|
||||
aufForTimeTd.innerHTML = "<font color='lightblue'>" + userTimeString(Date.parse(json["Forecast Time"])) + "</font>";
|
||||
let count = 0;
|
||||
for (let where in json.coordinates)
|
||||
{
|
||||
let lat = Math.abs(json.coordinates[where][1]);
|
||||
if (json.coordinates[where][2] > 0 && lat > 2 && lat < 86)
|
||||
{
|
||||
count++;
|
||||
let toPoint = ol.proj.fromLonLat([(json.coordinates[where][0] + 180) % 360 - 180, json.coordinates[where][1]]);
|
||||
|
||||
let lonLat = new ol.geom.Point(toPoint);
|
||||
|
||||
let pointFeature = new ol.Feature({
|
||||
geometry: lonLat,
|
||||
weight: json.coordinates[where][2] / 100
|
||||
});
|
||||
|
||||
GT.PredLayer.getSource().addFeature(pointFeature);
|
||||
}
|
||||
}
|
||||
console.log(count);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
nodeTimers.setInterval(refreshSpotsNoTx, 300000);
|
||||
|
|
Ładowanie…
Reference in New Issue