geoarrow-array 0.8.0

GeoArrow array definitions.
Documentation
use geo_traits::{GeometryTrait, GeometryType};
use geozero::{GeomProcessor, GeozeroGeometry};

use super::{
    process_geometry_collection, process_line_string, process_multi_line_string,
    process_multi_point, process_multi_polygon, process_point, process_polygon, process_rect,
};
use crate::builder::geo_trait_wrappers::{LineWrapper, TriangleWrapper};
use crate::scalar::Geometry;

pub(crate) fn process_geometry<P: GeomProcessor>(
    geom: &impl GeometryTrait<T = f64>,
    geom_idx: usize,
    processor: &mut P,
) -> geozero::error::Result<()> {
    use GeometryType::*;

    match geom.as_type() {
        Point(g) => process_point(g, geom_idx, processor)?,
        LineString(g) => process_line_string(g, geom_idx, processor)?,
        Polygon(g) => process_polygon(g, true, geom_idx, processor)?,
        MultiPoint(g) => process_multi_point(g, geom_idx, processor)?,
        MultiLineString(g) => process_multi_line_string(g, geom_idx, processor)?,
        MultiPolygon(g) => process_multi_polygon(g, geom_idx, processor)?,
        GeometryCollection(g) => process_geometry_collection(g, geom_idx, processor)?,
        Rect(r) => process_rect(r, geom_idx, processor)?,
        Triangle(tri) => process_polygon(&TriangleWrapper(tri), true, geom_idx, processor)?,
        Line(l) => process_line_string(&LineWrapper(l), geom_idx, processor)?,
    };

    Ok(())
}

impl GeozeroGeometry for Geometry<'_> {
    fn process_geom<P: GeomProcessor>(&self, processor: &mut P) -> geozero::error::Result<()>
    where
        Self: Sized,
    {
        process_geometry(&self, 0, processor)
    }
}