The compute pipeline now actually runs: per-pixel path loss over LIDAR
terrain, antenna pattern lookup, real GeoTIFF + colored PNG output,
Leaflet imageOverlay rendering with opacity slider and dBm legend.
Propagation:
- Towerops.Coverages.Propagation: Friis FSPL + Bullington single-knife-edge
diffraction (ITU-R P.526). Pure Elixir, closed-form, no NIF dependency.
Clean signature so a future ITM/Longley-Rice backend can drop in.
- Towerops.Coverages.Profile: AAIGrid sampler with elevation_at, sample
along great circle, haversine distance.
- Towerops.Coverages.Raster: Float32 GeoTIFF via gdal_translate (with VRT
wrapper) and colored PNG via gdaldem color-relief. Outputs to
priv/static/coverage/<org>/<id>/, served by existing Plug.Static.
Worker:
- Towerops.Workers.CoverageWorker now does the full pipeline: bbox compute
-> Towerops.Lidar.get_elevation_grid -> per-pixel Task.async_stream
(parallel = schedulers) running antenna pattern lookup + propagation +
RSSI threshold check, write rasters. Configurable terrain source via
:coverage_terrain_module application env so tests can stub. Friendly
failure messages for :no_tile, :grid_too_large, :nodata,
:unknown_antenna, :missing_location.
Bundled antenna catalog (~95 entries):
- AntennaCatalog with compact specs for every antenna in the request list:
Cambium, ALPHA, Antel, ITELITE, KP Performance, L-com, MARS, MikroTik,
Mimosa, MTI, RADWIN, RF Elements, Ruckus, Tarana, Simulate, Ubiquiti.
- Antenna.from_spec/1 synthesizes 360+360 attenuation patterns from
gain+beamwidth (cosine-squared main lobe, smooth transition,
front-to-back floor with mild ripple). Real .ant files in priv/antennas/
override the catalog by slug. Test fixtures moved to test/support.
Schema (migration add_radio_fields_to_coverages):
- tx_power_dbm replaces eirp_dbm; EIRP is now derived as
tx_power + antenna.gain - cable_loss in Coverage.eirp_dbm/2 and shown
live in the form header.
- cable_loss_db, sm_gain_dbi, latitude_override, longitude_override,
height_above_rooftop_m, tx_clearance_m, foliage_tuning (0-100 slider).
- Coverage.location/1 returns {lat, lon} from override or parent site.
UI:
- form.html.heex: cnHeat-style grouped form (Identity / Location /
Mounting / RF / Coverage extent), foliage tuning range slider,
computed EIRP badge in the header.
- show.html.heex: Leaflet map area with L.imageOverlay heatmap,
opacity slider, dBm color legend, antenna marker with directional
wedge for azimuth.
- assets/js/app.ts: CoverageMap hook registered.
Tests: 24 new (propagation reference values, profile sampling,
worker end-to-end with stubbed terrain that writes real GeoTIFF + PNG,
org-mismatch job-cancel guard). Full suite: 10815 tests.
732 lines
6.9 KiB
XML
732 lines
6.9 KiB
XML
NAME Test Sector 90deg 5 GHz
|
|
MAKE Test Manufacturer
|
|
FREQUENCY 5500
|
|
H_WIDTH 90
|
|
V_WIDTH 10
|
|
FRONT_TO_BACK 28
|
|
GAIN 16.0 dBi
|
|
TILT MECHANICAL
|
|
POLARIZATION DUAL
|
|
COMMENT Synthetic 90 degree sector antenna for tests.
|
|
HORIZONTAL 360
|
|
0 0.00
|
|
1 0.00
|
|
2 0.01
|
|
3 0.01
|
|
4 0.02
|
|
5 0.04
|
|
6 0.05
|
|
7 0.07
|
|
8 0.09
|
|
9 0.12
|
|
10 0.15
|
|
11 0.18
|
|
12 0.21
|
|
13 0.25
|
|
14 0.29
|
|
15 0.33
|
|
16 0.38
|
|
17 0.43
|
|
18 0.48
|
|
19 0.53
|
|
20 0.59
|
|
21 0.65
|
|
22 0.72
|
|
23 0.78
|
|
24 0.85
|
|
25 0.93
|
|
26 1.00
|
|
27 1.08
|
|
28 1.16
|
|
29 1.25
|
|
30 1.33
|
|
31 1.42
|
|
32 1.52
|
|
33 1.61
|
|
34 1.71
|
|
35 1.81
|
|
36 1.92
|
|
37 2.03
|
|
38 2.14
|
|
39 2.25
|
|
40 2.37
|
|
41 2.49
|
|
42 2.61
|
|
43 2.74
|
|
44 2.87
|
|
45 3.00
|
|
46 3.13
|
|
47 3.27
|
|
48 3.41
|
|
49 3.56
|
|
50 3.70
|
|
51 3.85
|
|
52 4.01
|
|
53 4.16
|
|
54 4.32
|
|
55 4.48
|
|
56 4.65
|
|
57 4.81
|
|
58 4.98
|
|
59 5.16
|
|
60 5.33
|
|
61 6.47
|
|
62 6.93
|
|
63 7.40
|
|
64 7.87
|
|
65 8.33
|
|
66 8.80
|
|
67 9.27
|
|
68 9.73
|
|
69 10.20
|
|
70 10.67
|
|
71 11.13
|
|
72 11.60
|
|
73 12.07
|
|
74 12.53
|
|
75 13.00
|
|
76 13.47
|
|
77 13.93
|
|
78 14.40
|
|
79 14.87
|
|
80 15.33
|
|
81 15.80
|
|
82 16.27
|
|
83 16.73
|
|
84 17.20
|
|
85 17.67
|
|
86 18.13
|
|
87 18.60
|
|
88 19.07
|
|
89 19.53
|
|
90 20.00
|
|
91 30.00
|
|
92 29.99
|
|
93 29.97
|
|
94 29.95
|
|
95 29.92
|
|
96 29.89
|
|
97 29.85
|
|
98 29.81
|
|
99 29.76
|
|
100 29.70
|
|
101 29.64
|
|
102 29.57
|
|
103 29.49
|
|
104 29.41
|
|
105 29.33
|
|
106 29.24
|
|
107 29.15
|
|
108 29.05
|
|
109 28.94
|
|
110 28.83
|
|
111 28.72
|
|
112 28.60
|
|
113 28.47
|
|
114 28.35
|
|
115 28.21
|
|
116 28.08
|
|
117 27.94
|
|
118 27.80
|
|
119 27.65
|
|
120 27.50
|
|
121 27.35
|
|
122 27.19
|
|
123 27.03
|
|
124 26.87
|
|
125 26.71
|
|
126 26.55
|
|
127 26.38
|
|
128 26.21
|
|
129 26.04
|
|
130 25.87
|
|
131 25.70
|
|
132 25.52
|
|
133 25.35
|
|
134 25.17
|
|
135 25.00
|
|
136 24.83
|
|
137 24.65
|
|
138 24.48
|
|
139 24.30
|
|
140 24.13
|
|
141 23.96
|
|
142 23.79
|
|
143 23.62
|
|
144 23.45
|
|
145 23.29
|
|
146 23.13
|
|
147 22.97
|
|
148 22.81
|
|
149 22.65
|
|
150 22.50
|
|
151 22.35
|
|
152 22.20
|
|
153 22.06
|
|
154 21.92
|
|
155 21.79
|
|
156 21.65
|
|
157 21.53
|
|
158 21.40
|
|
159 21.28
|
|
160 21.17
|
|
161 21.06
|
|
162 20.95
|
|
163 20.85
|
|
164 20.76
|
|
165 20.67
|
|
166 20.59
|
|
167 20.51
|
|
168 20.43
|
|
169 20.36
|
|
170 20.30
|
|
171 20.24
|
|
172 20.19
|
|
173 20.15
|
|
174 20.11
|
|
175 20.08
|
|
176 20.05
|
|
177 20.03
|
|
178 20.01
|
|
179 20.00
|
|
180 20.00
|
|
181 20.00
|
|
182 20.01
|
|
183 20.03
|
|
184 20.05
|
|
185 20.08
|
|
186 20.11
|
|
187 20.15
|
|
188 20.19
|
|
189 20.24
|
|
190 20.30
|
|
191 20.36
|
|
192 20.43
|
|
193 20.51
|
|
194 20.59
|
|
195 20.67
|
|
196 20.76
|
|
197 20.85
|
|
198 20.95
|
|
199 21.06
|
|
200 21.17
|
|
201 21.28
|
|
202 21.40
|
|
203 21.53
|
|
204 21.65
|
|
205 21.79
|
|
206 21.92
|
|
207 22.06
|
|
208 22.20
|
|
209 22.35
|
|
210 22.50
|
|
211 22.65
|
|
212 22.81
|
|
213 22.97
|
|
214 23.13
|
|
215 23.29
|
|
216 23.45
|
|
217 23.62
|
|
218 23.79
|
|
219 23.96
|
|
220 24.13
|
|
221 24.30
|
|
222 24.48
|
|
223 24.65
|
|
224 24.83
|
|
225 25.00
|
|
226 25.17
|
|
227 25.35
|
|
228 25.52
|
|
229 25.70
|
|
230 25.87
|
|
231 26.04
|
|
232 26.21
|
|
233 26.38
|
|
234 26.55
|
|
235 26.71
|
|
236 26.87
|
|
237 27.03
|
|
238 27.19
|
|
239 27.35
|
|
240 27.50
|
|
241 27.65
|
|
242 27.80
|
|
243 27.94
|
|
244 28.08
|
|
245 28.21
|
|
246 28.35
|
|
247 28.47
|
|
248 28.60
|
|
249 28.72
|
|
250 28.83
|
|
251 28.94
|
|
252 29.05
|
|
253 29.15
|
|
254 29.24
|
|
255 29.33
|
|
256 29.41
|
|
257 29.49
|
|
258 29.57
|
|
259 29.64
|
|
260 29.70
|
|
261 29.76
|
|
262 29.81
|
|
263 29.85
|
|
264 29.89
|
|
265 29.92
|
|
266 29.95
|
|
267 29.97
|
|
268 29.99
|
|
269 30.00
|
|
270 20.00
|
|
271 19.53
|
|
272 19.07
|
|
273 18.60
|
|
274 18.13
|
|
275 17.67
|
|
276 17.20
|
|
277 16.73
|
|
278 16.27
|
|
279 15.80
|
|
280 15.33
|
|
281 14.87
|
|
282 14.40
|
|
283 13.93
|
|
284 13.47
|
|
285 13.00
|
|
286 12.53
|
|
287 12.07
|
|
288 11.60
|
|
289 11.13
|
|
290 10.67
|
|
291 10.20
|
|
292 9.73
|
|
293 9.27
|
|
294 8.80
|
|
295 8.33
|
|
296 7.87
|
|
297 7.40
|
|
298 6.93
|
|
299 6.47
|
|
300 5.33
|
|
301 5.16
|
|
302 4.98
|
|
303 4.81
|
|
304 4.65
|
|
305 4.48
|
|
306 4.32
|
|
307 4.16
|
|
308 4.01
|
|
309 3.85
|
|
310 3.70
|
|
311 3.56
|
|
312 3.41
|
|
313 3.27
|
|
314 3.13
|
|
315 3.00
|
|
316 2.87
|
|
317 2.74
|
|
318 2.61
|
|
319 2.49
|
|
320 2.37
|
|
321 2.25
|
|
322 2.14
|
|
323 2.03
|
|
324 1.92
|
|
325 1.81
|
|
326 1.71
|
|
327 1.61
|
|
328 1.52
|
|
329 1.42
|
|
330 1.33
|
|
331 1.25
|
|
332 1.16
|
|
333 1.08
|
|
334 1.00
|
|
335 0.93
|
|
336 0.85
|
|
337 0.78
|
|
338 0.72
|
|
339 0.65
|
|
340 0.59
|
|
341 0.53
|
|
342 0.48
|
|
343 0.43
|
|
344 0.38
|
|
345 0.33
|
|
346 0.29
|
|
347 0.25
|
|
348 0.21
|
|
349 0.18
|
|
350 0.15
|
|
351 0.12
|
|
352 0.09
|
|
353 0.07
|
|
354 0.05
|
|
355 0.04
|
|
356 0.02
|
|
357 0.01
|
|
358 0.01
|
|
359 0.00
|
|
VERTICAL 360
|
|
0 0.00
|
|
1 0.12
|
|
2 0.48
|
|
3 1.08
|
|
4 1.92
|
|
5 3.00
|
|
6 4.40
|
|
7 5.80
|
|
8 7.20
|
|
9 8.60
|
|
10 10.00
|
|
11 10.75
|
|
12 11.50
|
|
13 12.25
|
|
14 13.00
|
|
15 13.75
|
|
16 14.50
|
|
17 15.25
|
|
18 16.00
|
|
19 16.75
|
|
20 17.50
|
|
21 18.25
|
|
22 19.00
|
|
23 19.75
|
|
24 20.50
|
|
25 21.25
|
|
26 22.00
|
|
27 22.75
|
|
28 23.50
|
|
29 24.25
|
|
30 25.00
|
|
31 30.00
|
|
32 30.00
|
|
33 29.99
|
|
34 29.98
|
|
35 29.97
|
|
36 29.96
|
|
37 29.95
|
|
38 29.93
|
|
39 29.91
|
|
40 29.89
|
|
41 29.87
|
|
42 29.84
|
|
43 29.82
|
|
44 29.79
|
|
45 29.76
|
|
46 29.72
|
|
47 29.69
|
|
48 29.65
|
|
49 29.61
|
|
50 29.57
|
|
51 29.52
|
|
52 29.48
|
|
53 29.43
|
|
54 29.38
|
|
55 29.33
|
|
56 29.28
|
|
57 29.22
|
|
58 29.16
|
|
59 29.11
|
|
60 29.05
|
|
61 28.98
|
|
62 28.92
|
|
63 28.85
|
|
64 28.78
|
|
65 28.72
|
|
66 28.64
|
|
67 28.57
|
|
68 28.50
|
|
69 28.42
|
|
70 28.35
|
|
71 28.27
|
|
72 28.19
|
|
73 28.11
|
|
74 28.02
|
|
75 27.94
|
|
76 27.85
|
|
77 27.77
|
|
78 27.68
|
|
79 27.59
|
|
80 27.50
|
|
81 27.41
|
|
82 27.32
|
|
83 27.22
|
|
84 27.13
|
|
85 27.03
|
|
86 26.94
|
|
87 26.84
|
|
88 26.74
|
|
89 26.64
|
|
90 26.55
|
|
91 26.45
|
|
92 26.34
|
|
93 26.24
|
|
94 26.14
|
|
95 26.04
|
|
96 25.94
|
|
97 25.83
|
|
98 25.73
|
|
99 25.63
|
|
100 25.52
|
|
101 25.42
|
|
102 25.31
|
|
103 25.21
|
|
104 25.10
|
|
105 25.00
|
|
106 24.90
|
|
107 24.79
|
|
108 24.69
|
|
109 24.58
|
|
110 24.48
|
|
111 24.37
|
|
112 24.27
|
|
113 24.17
|
|
114 24.06
|
|
115 23.96
|
|
116 23.86
|
|
117 23.76
|
|
118 23.66
|
|
119 23.55
|
|
120 23.45
|
|
121 23.36
|
|
122 23.26
|
|
123 23.16
|
|
124 23.06
|
|
125 22.97
|
|
126 22.87
|
|
127 22.78
|
|
128 22.68
|
|
129 22.59
|
|
130 22.50
|
|
131 22.41
|
|
132 22.32
|
|
133 22.23
|
|
134 22.15
|
|
135 22.06
|
|
136 21.98
|
|
137 21.89
|
|
138 21.81
|
|
139 21.73
|
|
140 21.65
|
|
141 21.58
|
|
142 21.50
|
|
143 21.43
|
|
144 21.36
|
|
145 21.28
|
|
146 21.22
|
|
147 21.15
|
|
148 21.08
|
|
149 21.02
|
|
150 20.95
|
|
151 20.89
|
|
152 20.84
|
|
153 20.78
|
|
154 20.72
|
|
155 20.67
|
|
156 20.62
|
|
157 20.57
|
|
158 20.52
|
|
159 20.48
|
|
160 20.43
|
|
161 20.39
|
|
162 20.35
|
|
163 20.31
|
|
164 20.28
|
|
165 20.24
|
|
166 20.21
|
|
167 20.18
|
|
168 20.16
|
|
169 20.13
|
|
170 20.11
|
|
171 20.09
|
|
172 20.07
|
|
173 20.05
|
|
174 20.04
|
|
175 20.03
|
|
176 20.02
|
|
177 20.01
|
|
178 20.00
|
|
179 20.00
|
|
180 20.00
|
|
181 20.00
|
|
182 20.00
|
|
183 20.01
|
|
184 20.02
|
|
185 20.03
|
|
186 20.04
|
|
187 20.05
|
|
188 20.07
|
|
189 20.09
|
|
190 20.11
|
|
191 20.13
|
|
192 20.16
|
|
193 20.18
|
|
194 20.21
|
|
195 20.24
|
|
196 20.28
|
|
197 20.31
|
|
198 20.35
|
|
199 20.39
|
|
200 20.43
|
|
201 20.48
|
|
202 20.52
|
|
203 20.57
|
|
204 20.62
|
|
205 20.67
|
|
206 20.72
|
|
207 20.78
|
|
208 20.84
|
|
209 20.89
|
|
210 20.95
|
|
211 21.02
|
|
212 21.08
|
|
213 21.15
|
|
214 21.22
|
|
215 21.28
|
|
216 21.36
|
|
217 21.43
|
|
218 21.50
|
|
219 21.58
|
|
220 21.65
|
|
221 21.73
|
|
222 21.81
|
|
223 21.89
|
|
224 21.98
|
|
225 22.06
|
|
226 22.15
|
|
227 22.23
|
|
228 22.32
|
|
229 22.41
|
|
230 22.50
|
|
231 22.59
|
|
232 22.68
|
|
233 22.78
|
|
234 22.87
|
|
235 22.97
|
|
236 23.06
|
|
237 23.16
|
|
238 23.26
|
|
239 23.36
|
|
240 23.45
|
|
241 23.55
|
|
242 23.66
|
|
243 23.76
|
|
244 23.86
|
|
245 23.96
|
|
246 24.06
|
|
247 24.17
|
|
248 24.27
|
|
249 24.37
|
|
250 24.48
|
|
251 24.58
|
|
252 24.69
|
|
253 24.79
|
|
254 24.90
|
|
255 25.00
|
|
256 25.10
|
|
257 25.21
|
|
258 25.31
|
|
259 25.42
|
|
260 25.52
|
|
261 25.63
|
|
262 25.73
|
|
263 25.83
|
|
264 25.94
|
|
265 26.04
|
|
266 26.14
|
|
267 26.24
|
|
268 26.34
|
|
269 26.45
|
|
270 26.55
|
|
271 26.64
|
|
272 26.74
|
|
273 26.84
|
|
274 26.94
|
|
275 27.03
|
|
276 27.13
|
|
277 27.22
|
|
278 27.32
|
|
279 27.41
|
|
280 27.50
|
|
281 27.59
|
|
282 27.68
|
|
283 27.77
|
|
284 27.85
|
|
285 27.94
|
|
286 28.02
|
|
287 28.11
|
|
288 28.19
|
|
289 28.27
|
|
290 28.35
|
|
291 28.42
|
|
292 28.50
|
|
293 28.57
|
|
294 28.64
|
|
295 28.72
|
|
296 28.78
|
|
297 28.85
|
|
298 28.92
|
|
299 28.98
|
|
300 29.05
|
|
301 29.11
|
|
302 29.16
|
|
303 29.22
|
|
304 29.28
|
|
305 29.33
|
|
306 29.38
|
|
307 29.43
|
|
308 29.48
|
|
309 29.52
|
|
310 29.57
|
|
311 29.61
|
|
312 29.65
|
|
313 29.69
|
|
314 29.72
|
|
315 29.76
|
|
316 29.79
|
|
317 29.82
|
|
318 29.84
|
|
319 29.87
|
|
320 29.89
|
|
321 29.91
|
|
322 29.93
|
|
323 29.95
|
|
324 29.96
|
|
325 29.97
|
|
326 29.98
|
|
327 29.99
|
|
328 30.00
|
|
329 30.00
|
|
330 25.00
|
|
331 24.25
|
|
332 23.50
|
|
333 22.75
|
|
334 22.00
|
|
335 21.25
|
|
336 20.50
|
|
337 19.75
|
|
338 19.00
|
|
339 18.25
|
|
340 17.50
|
|
341 16.75
|
|
342 16.00
|
|
343 15.25
|
|
344 14.50
|
|
345 13.75
|
|
346 13.00
|
|
347 12.25
|
|
348 11.50
|
|
349 10.75
|
|
350 10.00
|
|
351 8.60
|
|
352 7.20
|
|
353 5.80
|
|
354 4.40
|
|
355 3.00
|
|
356 1.92
|
|
357 1.08
|
|
358 0.48
|
|
359 0.12
|