1
0
mirror of https://github.com/KubaPro010/fm-dx-webserver.git synced 2026-02-26 22:13:53 +01:00

Sporadic E mode for TX search

Add sporadic E mode for TX search, to optimise for 1500km distance if recent activity has been reported in server region.
This commit is contained in:
Adam Wisher
2024-07-06 21:49:58 +01:00
committed by GitHub
parent 8b2f489fbe
commit 70f08ec39d

View File

@@ -46,6 +46,7 @@ function processData(data, piCode, rdsPs) {
let maxScore = -Infinity; // Initialize maxScore with a very low value
let txAzimuth;
let maxDistance;
let esMode = checkEs();
for (const cityId in data.locations) {
const city = data.locations[cityId];
@@ -53,7 +54,13 @@ function processData(data, piCode, rdsPs) {
for (const station of city.stations) {
if (station.pi === piCode.toUpperCase() && !station.extra && station.ps && station.ps.toLowerCase().includes(rdsPs.replace(/ /g, '_').replace(/^_*(.*?)_*$/, '$1').toLowerCase())) {
const distance = haversine(serverConfig.identification.lat, serverConfig.identification.lon, city.lat, city.lon);
const score = (10*Math.log10(station.erp*1000)) / distance.distanceKm; // Calculate score
let weightDistance = distance.distanceKm
if (esMode && distance.distanceKm > 200) {
weightDistance = Math.abs(distance.distanceKm-1500);
} else {
weightDistance = distance.distanceKm;
}
const score = (10*Math.log10(station.erp*1000)) / weightDistance; // Calculate score
if (score > maxScore) {
maxScore = score;
txAzimuth = distance.azimuth;
@@ -82,6 +89,29 @@ function processData(data, piCode, rdsPs) {
}
}
function checkEs() {
const url = "https://fmdx.org/includes/tools/get_muf.php";
let esSwitch = false;
fetch(url)
.then(response => response.json())
.then(data => {
if (serverConfig.identification.lon < -32) {
if (data.north_america.max_frequency != "No data") {
esSwitch = true;
}
} else {
if (data.europe.max_frequency != "No data") {
esSwitch = true;
}
}
})
.catch(error => {
console.error("Error fetching data:", error);
});
return esSwitch;
}
function haversine(lat1, lon1, lat2, lon2) {
const R = 6371; // Earth radius in kilometers
const dLat = deg2rad(lat2 - lat1);