geoarrow_array/test/
multipolygon.rs1use 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}