geoarrow_array/geozero/export/array/
wkb.rs1use arrow_array::OffsetSizeTrait;
2use geozero::error::GeozeroError;
3use geozero::{GeomProcessor, GeozeroGeometry};
4
5use crate::array::{GenericWkbArray, WkbViewArray};
6use crate::geozero::export::scalar::process_geometry;
7use crate::{GeoArrowArray, GeoArrowArrayAccessor};
8
9impl<O: OffsetSizeTrait> GeozeroGeometry for GenericWkbArray<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 WkbViewArray {
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}