#![allow(clippy::print_stdout, reason = "example binary")]
use s2rst::s2::{LatLng, Loop, Polygon};
fn main() {
let l1 = &[(102.0, 2.0), (103.0, 2.0), (103.0, 3.0), (102.0, 3.0)];
let l2 = &[(100.0, 0.0), (101.0, 0.0), (101.0, 1.0), (100.0, 1.0)];
let l3 = &[(100.2, 0.2), (100.2, 0.8), (100.8, 0.8), (100.8, 0.2)];
let to_loop = |pts: &[(f64, f64)]| -> Loop {
let points: Vec<_> = pts
.iter()
.map(|&(lng, lat)| LatLng::from_degrees(lat, lng).to_point())
.collect();
Loop::new(points)
};
let p = Polygon::from_oriented_loops(vec![to_loop(l1), to_loop(l2), to_loop(l3)]);
for (i, loop_) in p.loops().iter().enumerate() {
println!("loop {i} is hole: {}", loop_.is_hole());
}
println!("Combined area: {:.7}", p.area());
let p12 = Polygon::from_oriented_loops(vec![to_loop(l1), to_loop(l2)]);
let mut p3 = Polygon::from_oriented_loops(vec![to_loop(l3)]);
p3.invert();
println!(
"l1+l2 = {:.7}, inv(l3) = {:.7}; l1+l2 - inv(l3) = {:.7}",
p12.area(),
p3.area(),
p12.area() - p3.area(),
);
}