use n3gb_rs::HexCell;
use n3gb_rs::HexCellsToArrow;
use n3gb_rs::HexGrid;
use n3gb_rs::geoarrow_array::GeoArrowArray;
fn main() -> Result<(), n3gb_rs::N3gbError> {
let cells: Vec<HexCell> = vec![
HexCell::from_bng(&(530000.0, 180000.0), 10)?,
HexCell::from_bng(&(530500.0, 180500.0), 10)?,
HexCell::from_bng(&(531000.0, 181000.0), 10)?,
];
println!("=== Vec<HexCell> ===");
let points = cells.to_arrow_points();
let polygons = cells.to_arrow_polygons();
println!(" to_arrow_points(): {} point(s)", points.len());
println!(
" to_arrow_polygons(): {} hexagon polygon(s)",
polygons.len()
);
println!(" to_arrow_polygons(): {:?} hexagon polygon(s)", polygons);
let batch = cells.to_record_batch()?;
println!(
" to_record_batch(): {} row(s) x {} column(s)",
batch.num_rows(),
batch.num_columns()
);
let schema = batch.schema();
let columns: Vec<&str> = schema.fields().iter().map(|f| f.name().as_str()).collect();
println!(" columns: {}", columns.join(", "));
println!("\n=== &[HexCell] slice ===");
let slice: &[HexCell] = cells.as_slice();
println!(
" to_arrow_points(): {} point(s)",
slice.to_arrow_points().len()
);
println!("\n=== single HexCell ===");
let one = &cells[0];
let one_batch = one.to_record_batch()?;
println!(" to_record_batch(): {} row(s)", one_batch.num_rows());
println!("\n=== HexGrid ===");
let grid = HexGrid::from_bng_extent(&(530000.0, 180000.0), &(531000.0, 181000.0), 10)?;
let grid_batch = grid.to_record_batch()?;
println!(
" grid.to_record_batch(): {} row(s) (inherent, forwards to the Vec)",
grid_batch.num_rows()
);
let grid_points = grid.cells().to_arrow_points();
println!(
" grid.cells().to_arrow_points(): {} point(s) (trait on &[HexCell])",
grid_points.len()
);
Ok(())
}