geoarrow_array/geozero/export/array/
wkt.rs

1use arrow_array::OffsetSizeTrait;
2use geozero::error::GeozeroError;
3use geozero::{GeomProcessor, GeozeroGeometry};
4
5use crate::array::{GenericWktArray, WktViewArray};
6use crate::geozero::export::scalar::process_geometry;
7use crate::{GeoArrowArray, GeoArrowArrayAccessor};
8
9impl<O: OffsetSizeTrait> GeozeroGeometry for GenericWktArray<O> {
10    fn process_geom<P: GeomProcessor>(&self, processor: &mut P) -> geozero::error::Result<()>
11    where
12        Self: Sized,
13    {
14        let num_geometries = self.len();
15        processor.geometrycollection_begin(num_geometries, 0)?;
16
17        for geom_idx in 0..num_geometries {
18            let geom = &self
19                .value(geom_idx)
20                .map_err(|err| GeozeroError::Geometry(err.to_string()))?;
21            process_geometry(geom, geom_idx, processor)?;
22        }
23
24        processor.geometrycollection_end(num_geometries - 1)?;
25        Ok(())
26    }
27}
28
29impl GeozeroGeometry for WktViewArray {
30    fn process_geom<P: GeomProcessor>(&self, processor: &mut P) -> geozero::error::Result<()>
31    where
32        Self: Sized,
33    {
34        let num_geometries = self.len();
35        processor.geometrycollection_begin(num_geometries, 0)?;
36
37        for geom_idx in 0..num_geometries {
38            let geom = &self
39                .value(geom_idx)
40                .map_err(|err| GeozeroError::Geometry(err.to_string()))?;
41            process_geometry(geom, geom_idx, processor)?;
42        }
43
44        processor.geometrycollection_end(num_geometries - 1)?;
45        Ok(())
46    }
47}