geoarrow_array/geozero/export/scalar/
multipolygon.rs

1use geo_traits::MultiPolygonTrait;
2use geozero::{GeomProcessor, GeozeroGeometry};
3
4use super::process_polygon;
5use crate::scalar::MultiPolygon;
6
7pub(crate) fn process_multi_polygon<P: GeomProcessor>(
8    geom: &impl MultiPolygonTrait<T = f64>,
9    geom_idx: usize,
10    processor: &mut P,
11) -> geozero::error::Result<()> {
12    processor.multipolygon_begin(geom.num_polygons(), geom_idx)?;
13
14    for (polygon_idx, polygon) in geom.polygons().enumerate() {
15        process_polygon(&polygon, false, polygon_idx, processor)?;
16    }
17
18    processor.multipolygon_end(geom_idx)?;
19    Ok(())
20}
21
22impl GeozeroGeometry for MultiPolygon<'_> {
23    fn process_geom<P: GeomProcessor>(&self, processor: &mut P) -> geozero::error::Result<()>
24    where
25        Self: Sized,
26    {
27        process_multi_polygon(self, 0, processor)
28    }
29}