L = require('leaflet@1.9.4')
// Load the CSV file
qsosData = FileAttachment("qsos.json").json()
map = {
// Extract my station details
const myLocation = {
lat: qsosData.my_lat,
lon: qsosData.my_lon,
callsign: qsosData.my_callsign,
sota: qsosData.my_sota
};
// Function to assign colors based on the band
function getBandColor(band) {
const bandColors = {
"40m": "DarkBlue",
"20m": "Green",
"15m": "Orange",
"10m": "Red",
"2m": "Purple"
};
return bandColors[band] || "Gray"; // Default color if the band is missing
}
let container = DOM.element('div', { style: `width:${width}px;height:${width/1.6}px` });
yield container;
let map = L.map(container).setView([myLocation.lat, myLocation.lon], 7);
let osmLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
// Custom icons
const myIcon = L.icon({
iconUrl: "/flag.png",
iconSize: [25, 25],
});
const sotaIcon = L.icon({
iconUrl: "/summit.png",
iconSize: [25, 25],
});
// Add marker for my station
L.marker([myLocation.lat, myLocation.lon], { icon: myIcon })
.bindPopup(`${myLocation.callsign}<br>SOTA Ref: ${myLocation.sota}`)
.addTo(map);
// Add QSO markers
qsosData.qsos.forEach(({ lat, lon, callsign, band, distance_km, sota_ref }) => {
const isSOTA = sota_ref !== "";
const markerIcon = isSOTA ? sotaIcon : null; // Use SOTA icon if reference exists
const color = getBandColor(band);
const marker = isSOTA
? L.marker([lat, lon], { icon: markerIcon }) // SOTA markers get an icon
: L.circleMarker([lat, lon], {
radius: 6,
color: color,
fillColor: color,
fillOpacity: 0.8
});
marker.bindPopup(
`Callsign: ${callsign}<br>Band: ${band}<br>Distance: ${distance_km} km` +
(isSOTA ? `<br>SOTA Ref: <a href="https://sotl.as/summits/${sota_ref}" target="_blank">${sota_ref}</a>` : "")
).addTo(map);
});
}
Kerloch
An early start
sota
Since my daughter has swim training at 6:30am, I thought I’d make use of the early start and do a quick, local summit before work. The weather this week hasn’t been and isn’t looking that great, and this morning seemed like as good as it was going to get anyway. Kerloch hill climb is quite quick, but it has a long path leading up to it.
Once I started going uphill, there was some snow on the path, and I followed the track of person and their dog the whole way. It was quite windy but whilst in the woods and behind the hill it was still for me.
Last time I did Kerloch, it was a glorious day, and the path was washed away back then. Now the snow had covered it but you could still tell it was terribly washed away still. It also had the added benefit of fallen trees across the track.
No doubt when this snow melts, it’s not going to help the situation. I made my way up the track at a steady pace, generally keeping to one side where the snow was less and also less like to slide off a boulder. Once I came out of the forest then the wind started to pick up. There were deep drifts across the track and several times I was waist deep in snow having not realised it was so deep.
Continuing on, I suddenly see the trig and cairn appear out of the clouds and realised I’ve reached the top. The trig had some lovely ice feathers on it but I didn’t stand around too long to admire as the wind was pretty strong and cold.
I settled in the cairn, which did give some shelter from the wind. I had the carbon 6 mast wedged in the rocks and ran my wire up and then across to the fence posts. It did slip off the top of the antenna in the wind, so I used the other hole in my mast fitting to friction fit it on. This hole is larger, and so goes lower down the mast, but I can trap the wire in it up against the mast to wedge it in place. Useful when the wind blows the mast right over. What should be an inverted sloper-L, ends up looking like a twin C arrangement!
I started on 40m, and turned randomly to M7CUW doing a POTA activation. He was coming in 59, and so was I when replying. I spotted and go Chris, 2M0RVZ, a local, but then there was nothing on 40m. The Aberdeenshire SOTA chat group said there was a CME the night before so probably why. I switched to 20m, hoping that would be better and I’d at least get my 4, and that ended up being pretty good with contacts into Greece and Canaries, and most people giving me a 55 report. Content with that, and getting cold hands, I packed away and tried 2m with the HT and RH770 antenna. Fraser and Simon were both ready and we had a quick chat on 2m. Now it was time to get out of the wind, down the hill and off to work!