Commit inicial: splat-rs — fork/port a Rust de SPLAT!
Fork de SPLAT! (John A. Magliacane, KD2BD, 2002-2014), bajo GPLv2 heredada del original. El núcleo de cálculo de propagación (ITWOM v3.0, Sid Shumate) se mantiene sin modificar en cpp/itwom3.0.cpp, llamado vía FFI. El resto del pipeline (lectura de formatos SPLAT!, reportes, mapas, KML, gnuplot) se reescribió en Rust, con paralelización nativa vía rayon reemplazando el paralelismo por múltiples procesos del original. Validado contra el corpus golden de SPLAT! con drift < 0.02 dB en cálculos ITWOM.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
use splat::{geo, radial::DemLookup, sdf::DemTileSet, udt};
|
||||
|
||||
fn main() {
|
||||
let mut base = DemTileSet::new();
|
||||
base.load_dir("/home/cescobar/Laboratorio/splat-1.4.2-Charles/sdf").unwrap();
|
||||
let fs = udt::load("/tmp/test-obstacle.udt").unwrap();
|
||||
let wrapped = udt::DemWithUdt::new(&base, fs, 1200);
|
||||
|
||||
let tx = (-1.023206, 79.458669);
|
||||
let rx = (-1.698611, 79.107222);
|
||||
let az_from_rx = geo::azimuth(rx.0, rx.1, tx.0, tx.1);
|
||||
let dist_mi = geo::distance(tx.0, tx.1, rx.0, rx.1);
|
||||
println!("dist {:.2} mi, az from rx {:.2}°", dist_mi, az_from_rx);
|
||||
|
||||
// Sample 20 points along the path from RX to TX; print the elevation
|
||||
// via the UDT-wrapped DEM at each sample point.
|
||||
let mut prev_z = 0.0;
|
||||
for i in 0..=20 {
|
||||
let d_mi = (i as f64 / 20.0) * dist_mi;
|
||||
let (lat, lon) = geo::step_great_circle(rx.0, rx.1, az_from_rx, d_mi);
|
||||
let z = wrapped.elevation(lat, lon);
|
||||
let mark = if z > prev_z + 1000.0 { " ← UDT HIT" } else { "" };
|
||||
println!(
|
||||
" d={:5.1} mi ({:.4}, {:.4}) z={:.0}m{}",
|
||||
d_mi, lat, lon, z, mark,
|
||||
);
|
||||
prev_z = z;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user