geoarrow_array/geozero/export/scalar/
multilinestring.rs

1use geo_traits::{LineStringTrait, MultiLineStringTrait};
2use geozero::{GeomProcessor, GeozeroGeometry};
3
4use super::process_coord;
5use crate::scalar::MultiLineString;
6
7pub(crate) fn process_multi_line_string<P: GeomProcessor>(
8    geom: &impl MultiLineStringTrait<T = f64>,
9    geom_idx: usize,
10    processor: &mut P,
11) -> geozero::error::Result<()> {
12    processor.multilinestring_begin(geom.num_line_strings(), geom_idx)?;
13
14    for (line_idx, line) in geom.line_strings().enumerate() {
15        processor.linestring_begin(false, line.num_coords(), line_idx)?;
16
17        for (coord_idx, coord) in line.coords().enumerate() {
18            process_coord(&coord, coord_idx, processor)?;
19        }
20
21        processor.linestring_end(false, line_idx)?;
22    }
23
24    processor.multilinestring_end(geom_idx)?;
25    Ok(())
26}
27
28impl GeozeroGeometry for MultiLineString<'_> {
29    fn process_geom<P: GeomProcessor>(&self, processor: &mut P) -> geozero::error::Result<()>
30    where
31        Self: Sized,
32    {
33        process_multi_line_string(self, 0, processor)
34    }
35}