planetary_positions/
planetary_positions.rs

1//! Planetary positions example
2//!
3//! Demonstrates how to query planetary positions for multiple dates
4
5use rust_jpl::{Ephemeris, JulianDate};
6
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    println!("=== Planetary Positions Example ===\n");
9
10    // Initialize ephemeris
11    let eph = Ephemeris::new("config.toml")?;
12
13    // Define dates to query
14    let dates = vec![
15        (2024, 1, 1, 0, 0, 0.0),
16        (2024, 6, 15, 12, 0, 0.0),
17        (2024, 12, 31, 23, 59, 59.0),
18    ];
19
20    let bodies = vec!["Sun", "Mercury", "Venus", "Earth", "Mars", "Jupiter"];
21
22    for (year, month, day, hour, minute, second) in dates {
23        let jd = JulianDate::from_calendar(year, month, day, hour, minute, second)?;
24        println!(
25            "Date: {}-{:02}-{:02} {:02}:{:02}:{:02} (JD: {:.6})",
26            year,
27            month,
28            day,
29            hour,
30            minute,
31            second as i32,
32            jd.as_f64()
33        );
34        println!("{}", "=".repeat(70));
35
36        for body_name in &bodies {
37            match eph.get_position(body_name, jd) {
38                Ok(pos) => {
39                    println!(
40                        "  {:10} | X: {:12.6} | Y: {:12.6} | Z: {:12.6} | Distance: {:10.6} AU",
41                        body_name,
42                        pos.x,
43                        pos.y,
44                        pos.z,
45                        pos.distance()
46                    );
47                }
48                Err(e) => {
49                    println!("  {:10} | Error: {}", body_name, e);
50                }
51            }
52        }
53        println!();
54    }
55
56    Ok(())
57}