sgp4 2.4.0

A pure Rust implementation of the SGP4 algorithm for satellite propagation
Documentation
fn main() -> anyhow::Result<()> {
    let mut response = ureq::post("https://www.space-track.org/ajaxauth/login").send_form([
        ("identity", "your-username"),
        ("password", "your-password"),
        ("query", "https://www.space-track.org/basicspacedata/query/class/gp/decay_date/null-val/epoch/<now-30/orderby/norad_cat_id/limit/20/format/json"),
    ])?;
    let elements_vec: Vec<sgp4::Elements> = response.body_mut().read_json()?;
    for elements in &elements_vec {
        println!("{}", elements.object_name.as_ref().unwrap());
        let constants = sgp4::Constants::from_elements(elements)?;
        for hours in &[12, 24] {
            println!("    t = {} min", hours * 60);
            let prediction = constants.propagate(sgp4::MinutesSinceEpoch((hours * 60) as f64))?;
            println!("        r = {:?} km", prediction.position);
            println!("        ṙ = {:?} km.s⁻¹", prediction.velocity);
        }
    }
    Ok(())
}