From 9a872cd7aa66dec3fa6186431e0a9bd89cb08732 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Mon, 18 Dec 2023 23:52:23 -0500 Subject: [PATCH] Repeater map --- content/radio/local-repeaters.md | 47 ++++++++++++++++ static/dist/icons8/antenna.png | Bin 0 -> 2701 bytes static/js/radio/local-repeaters.js | 83 +++++++++++++++++++++++++++++ templates/base.html | 5 ++ 4 files changed, 135 insertions(+) create mode 100644 content/radio/local-repeaters.md create mode 100644 static/dist/icons8/antenna.png create mode 100644 static/js/radio/local-repeaters.js diff --git a/content/radio/local-repeaters.md b/content/radio/local-repeaters.md new file mode 100644 index 0000000..e9fe0d5 --- /dev/null +++ b/content/radio/local-repeaters.md @@ -0,0 +1,47 @@ +--- +title: Local Repeaters +extra: + css_import: + - https://unpkg.com/leaflet@1.9.4/dist/leaflet.css + head_js_import: + - https://unpkg.com/leaflet@1.9.4/dist/leaflet.js + js_import: + - /js/radio/local-repeaters.js +--- + +This page keeps track of local repeaters. See incorrect data here? Please [contact me](/contact). + +## Analog Repeaters + +
+ +
+ +| Callsign | Downlink | Uplink | PL | Coverage | Reach | Links | +|----------|----------|---------|-------|-----------------------------------------------------------|--------|----------------| +| VA3ATL | 444.775 | 449.775 | 110.9 | GTA | 70 km | | +| VE3WOO | 443.900 | 448.900 | 127.3 | GTA | 50 km | | +| VE3WOO | 442.750 | 447.750 | 103.5 | GTA | | VE3WOO | +| VE3WOO | 444.175 | 449.175 | 103.5 | GTA | 50 km | VE3WOO | +| VE3ZOE | 443.075 | 448.075 | | Golden Horseshoe | 100 km | | +| VE3GRW | 442.900 | 447.900 | 107.2 | Golden Horseshoe | 200 km | | +| VE3YYZ | 443.050 | 448.050 | 156.7 | Toronto | 35 km | VE3RTR | +| VE3OKR | 442.450 | 447.450 | | Oakville | 40 km | | +| VE3RSB | 444.825 | 449.825 | 131.8 | Burlington | 40 km | | +| VE3ADT | 444.125 | 449.125 | 131.8 | Milton | 45 km | | +| VE3MIS | 145.430 | 144.830 | 103.5 | Mississauga | 20 km | | +| VE3YRA | 145.350 | 144.750 | 103.5 | GTA | 75 km | | +| VE3SKY | 146.985 | 146.385 | 103.5 | GTA | 70 km | | +| VE3GYQ | 145.350 | 144.750 | 114.8 | London | 50 km | | +| VE3TTT | 147.180 | 147.780 | 114.8 | London | 75 km | VE3SUE | +| VE3SUE | 444.400 | 449.400 | 114.8 | London | 50 km | | +| VA3FEZ | 444.100 | 449.100 | 114.8 | London | | VE3MMX | +| VE3MMX | 147.225 | 147.825 | 114.8 | St Thomas | 35 km | | +| VE3MMX | 443.750 | 448.750 | 114.8 | St Thomas | | | +| VE3TCB | 146.940 | 146.340 | 114.8 | Grand Bend | 50 km | VE3SUE, VE3SRT | +| VE3SRT | 442.050 | 447.050 | 114.8 | Grand Bend | 50 km | VE3SUE | +| VE3MCR | 147.000 | 147.600 | 114.8 | Grand Bend | | VE3SUE | +| VE3RGB | 146.760 | 146.160 | 114.8 | Grand Bend | | VE3SUE | +| VE3RTR | 444.975 | 449.975 | 162.2 | Peterborough | 65 km | | +
+ diff --git a/static/dist/icons8/antenna.png b/static/dist/icons8/antenna.png new file mode 100644 index 0000000000000000000000000000000000000000..9d8fa9d27b878519d10440cc2d51d374dea00cca GIT binary patch literal 2701 zcmV;83Uc*{P)hnqEzOT;PsJ8+b zCZm21poZ#G18_Ut`wjrp^D?Ltz~f}lKLLzI`_K(wHMPNG(l(iM9vQL|z=5hxFwUqwOuDG3{x<+dAb&=PEm7N?t%n-*J&eEuJoML+_8w$lFt0m~Flvuix`g+kc)VY+^H`(y2+|D!*gH*Q zKS~v@@X-F6v`bN3eoMCA?V(*kS~oVO#+_8zXN|gpmASg}4i}Z_$_o4-qxN&8{aKoW z-v6kwsYdOUqr>Vpq4r@ekbQ_PQXUbvxck2l zERFeQUqQM7q`)0i$yr9-w@K%WP09rEs@5BnmGYaUe1WdJz^FT$bhjY|R#GKahu}S= zJ3XNtqgp(S=tD{Rrp%;kx~aQ$zdfq^6HtuP@835oE-EAm`zSL@3wy`ZdBHP|u9S6+U>l(4yJO- zTUbLnw@^&N`5q6%?fWO;U}e+E!s|%47Af!~RdSS3_WOe0%8j6VkG9^XyZ zbYY_wjwan-kOJ%um}S)6K)QzDK%63GC>j zYrPW|EDq3rBL~Qsk-GxwE2lpouEZ%BzR4%G_ zQ|eaJ?592U{egYXVR^oZ%9%1{j($Ak}(EZ3`rpD_4r)|XvO6=G|kNdhvnRbssPNDlR z$N?M+?l1Tm&juT-g!`Z7@g{CDM7mr@nrFn@YhjG?c6&3|kO5!u(7%Pcl{uav zNYAwh_3w~FGf|DZMl;Th{C2C@Xk|e81K1xK^HpVS5uJjz;vE3y$>Oc%x&9f5F~GKp zmaK^_^E|^`k5twysf7KsqDKkcU!KCM^bniQELpI964m>D}WUHJtHz`n`=dVip6 z&rlq7K6~NZM)%GYWZg)uEmlNq4TRqkn&6psEaUPX}u$AY$K>dGBNq>=vOQUKmr$+o@z$kW? zWNkMdOr-|gnJ}KK)jrB@JiV^>2WYW-imqWYk}|NFYksn1lUQYZ0IQV;)(#0fWAhj_mP=E?jFSkKC5l^KEB}@5>tuPjmt_%| zUInHpYmdp1eTQCYSaud_WvdM2vz7gs2}-Dr^=L&~v49$BiJY^Tuk2TAWryqv_8Vqp zoVV*+8Qo)P7)7bd>oVY4#)aiF4*2Y0^ZAX90kc0;0&bvsi?T*$RMzx+jO)h!Q-Wk_ zxp8-l!8vp&lTRwYN^^iR$kwU6Bqz2)?6X9pMWS^KdmLn~G#pW1Hw@f!1DzpU5%ZW{ zrQzgeD`fAy)x#N-Zl*7RuZtay&X%@@kI8M9{321O;GoC4;~dYt?czduS=^8t; z$XAjFR~o;PuverT;>4S+$`Ex!BLk(P_4zDdDbV~yA8gPK4JPP@LVcH{KgGkMh2T`W zLD%S?k|SZhtLXKz!0VHY5^2z_EFhDlB`h2_dp3GKQeKre=Tdo-vRXagM0WfH6`|X> zC0maS_R(>`n))d;Cn>vzCb%L|;`7i}qF|nq#yQ z9rGTPkUJ_A?{q!gi*xUn?(k-nA_Aw=y=*VrVNw3H#i|PIPydzf$>n%24g6KmOHjQi z{Xe559HqF#i?aGo!v0D&2;bcGxiCMA?=KZ3zhvlypQ*4m=EuXzz$_)BccI6|8l9%y zkmlEAa-fScLA>no<%HbmmuaEf;5h@;;|#escaP4K9hCnA&yM24tp${repeater.callsign}`); + // marker.setIcon(L.divIcon({ + // className: 'repeater-marker', + // iconSize: [16, 16] + // })); +}); + +// Draw the coverage areas +analog_repeaters.forEach(function (repeater) { + if (repeater.reach != "") { + var coverage = L.circle([repeater.latitude, repeater.longitude], { + color: 'gray', + opacity: 0.25, + fillColor: 'gray', + fillOpacity: 0.05, + radius: repeater.reach * 1000 + }).addTo(analog_rpt_map); + coverage.bindPopup(`${repeater.callsign} coverage`); + } +}); + +// Draw the repeater links +analog_repeaters.forEach(function (repeater) { + repeater.linked_repeaters.forEach(function (linked_repeater) { + // Find that repeater + var linked_repeater_obj = analog_repeaters.find(function (obj) { + return obj.callsign === linked_repeater; + }); + + if (linked_repeater_obj) { + var link = L.polyline([ + [repeater.latitude, repeater.longitude], + [linked_repeater_obj.latitude, linked_repeater_obj.longitude] + ], { + color: 'gray', + weight: 2, + opacity: 0.75 + }).addTo(analog_rpt_map); + link.bindPopup(`${repeater.callsign} to ${linked_repeater_obj.callsign}`); + } + }); +}); + +// Add a custom CSS style for the markers +// document.head.insertAdjacentHTML('beforeend', ` +// ` +// ); \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 4a31c42..2e7c1f0 100644 --- a/templates/base.html +++ b/templates/base.html @@ -58,6 +58,11 @@ {% endfor %} + {# Allow pages to import custom Head JS if they need #} + {% for url in extra.head_js_import | default(value=[]) %} + + {% endfor %} + {% endblock head %}