geoarrow_array/test/
multipolygon.rs

1use geo_types::{MultiPolygon, polygon};
2use geoarrow_schema::{CoordType, Dimension, MultiPolygonType};
3use geoarrow_test::raw;
4
5use crate::array::MultiPolygonArray;
6use crate::builder::MultiPolygonBuilder;
7
8pub(crate) fn mp0() -> MultiPolygon {
9    MultiPolygon::new(vec![
10        polygon![
11            (x: -111., y: 45.),
12            (x: -111., y: 41.),
13            (x: -104., y: 41.),
14            (x: -104., y: 45.),
15        ],
16        polygon!(
17            exterior: [
18                (x: -111., y: 45.),
19                (x: -111., y: 41.),
20                (x: -104., y: 41.),
21                (x: -104., y: 45.),
22            ],
23            interiors: [
24                [
25                    (x: -110., y: 44.),
26                    (x: -110., y: 42.),
27                    (x: -105., y: 42.),
28                    (x: -105., y: 44.),
29                ],
30            ],
31        ),
32    ])
33}
34
35pub(crate) fn mp1() -> MultiPolygon {
36    MultiPolygon::new(vec![
37        polygon![
38            (x: -111., y: 45.),
39            (x: -111., y: 41.),
40            (x: -104., y: 41.),
41            (x: -104., y: 45.),
42        ],
43        polygon![
44            (x: -110., y: 44.),
45            (x: -110., y: 42.),
46            (x: -105., y: 42.),
47            (x: -105., y: 44.),
48        ],
49    ])
50}
51
52pub(crate) fn mp_array(coord_type: CoordType) -> MultiPolygonArray {
53    let geoms = vec![Some(mp0()), None, Some(mp1()), None];
54    let typ = MultiPolygonType::new(Dimension::XY, Default::default()).with_coord_type(coord_type);
55    MultiPolygonBuilder::from_nullable_multi_polygons(&geoms, typ).finish()
56}
57
58pub fn array(coord_type: CoordType, dim: Dimension) -> MultiPolygonArray {
59    let typ = MultiPolygonType::new(dim, Default::default()).with_coord_type(coord_type);
60    let geoms = match dim {
61        Dimension::XY => raw::multipolygon::xy::geoms(),
62        Dimension::XYZ => raw::multipolygon::xyz::geoms(),
63        Dimension::XYM => raw::multipolygon::xym::geoms(),
64        Dimension::XYZM => raw::multipolygon::xyzm::geoms(),
65    };
66    MultiPolygonBuilder::from_nullable_multi_polygons(&geoms, typ).finish()
67}