geoarrow_array/test/
multilinestring.rs

1use geo_types::{MultiLineString, line_string};
2use geoarrow_schema::{CoordType, Dimension, MultiLineStringType};
3use geoarrow_test::raw;
4
5use crate::array::MultiLineStringArray;
6use crate::builder::MultiLineStringBuilder;
7
8pub(crate) fn ml0() -> MultiLineString {
9    MultiLineString::new(vec![line_string![
10        (x: -111., y: 45.),
11        (x: -111., y: 41.),
12        (x: -104., y: 41.),
13        (x: -104., y: 45.),
14    ]])
15}
16
17pub(crate) fn ml1() -> MultiLineString {
18    MultiLineString::new(vec![
19        line_string![
20            (x: -111., y: 45.),
21            (x: -111., y: 41.),
22            (x: -104., y: 41.),
23            (x: -104., y: 45.),
24        ],
25        line_string![
26            (x: -110., y: 44.),
27            (x: -110., y: 42.),
28            (x: -105., y: 42.),
29            (x: -105., y: 44.),
30        ],
31    ])
32}
33
34pub(crate) fn ml_array(coord_type: CoordType) -> MultiLineStringArray {
35    let geoms = vec![Some(ml0()), None, Some(ml1()), None];
36    let typ =
37        MultiLineStringType::new(Dimension::XY, Default::default()).with_coord_type(coord_type);
38    MultiLineStringBuilder::from_nullable_multi_line_strings(&geoms, typ).finish()
39}
40
41pub fn array(coord_type: CoordType, dim: Dimension) -> MultiLineStringArray {
42    let typ = MultiLineStringType::new(dim, Default::default()).with_coord_type(coord_type);
43    let geoms = match dim {
44        Dimension::XY => raw::multilinestring::xy::geoms(),
45        Dimension::XYZ => raw::multilinestring::xyz::geoms(),
46        Dimension::XYM => raw::multilinestring::xym::geoms(),
47        Dimension::XYZM => raw::multilinestring::xyzm::geoms(),
48    };
49    MultiLineStringBuilder::from_nullable_multi_line_strings(&geoms, typ).finish()
50}