geoarrow_array/geozero/export/array/
polygon.rs1use geozero::{GeomProcessor, GeozeroGeometry};
2
3use crate::array::PolygonArray;
4use crate::geozero::export::scalar::process_polygon;
5use crate::{GeoArrowArray, GeoArrowArrayAccessor};
6
7impl GeozeroGeometry for PolygonArray {
8 fn process_geom<P: GeomProcessor>(&self, processor: &mut P) -> geozero::error::Result<()>
9 where
10 Self: Sized,
11 {
12 let num_geometries = self.len();
13 processor.geometrycollection_begin(num_geometries, 0)?;
14
15 for geom_idx in 0..num_geometries {
16 process_polygon(&self.value(geom_idx).unwrap(), true, geom_idx, processor)?;
17 }
18
19 processor.geometrycollection_end(num_geometries - 1)?;
20 Ok(())
21 }
22}
23
24#[cfg(test)]
25mod test {
26 use geoarrow_schema::{Dimension, PolygonType};
27 use geozero::ToWkt;
28
29 use crate::builder::PolygonBuilder;
30 use crate::test::polygon::{p0, p1};
31
32 #[test]
33 fn geozero_process_geom() -> geozero::error::Result<()> {
34 let typ = PolygonType::new(Dimension::XY, Default::default());
35 let geo_arr = PolygonBuilder::from_polygons(&[&p0(), &p1()], typ).finish();
36 let wkt = ToWkt::to_wkt(&geo_arr)?;
37 let expected = "GEOMETRYCOLLECTION(POLYGON((-111 45,-111 41,-104 41,-104 45,-111 45)),POLYGON((-111 45,-111 41,-104 41,-104 45,-111 45),(-110 44,-110 42,-105 42,-105 44,-110 44)))";
38 assert_eq!(wkt, expected);
39 Ok(())
40 }
41}