geoarrow_wasm/array/
multipolygon.rs

1use crate::array::ffi::FFIArrowArray;
2use crate::array::point::PointArray;
3use crate::array::polygon::PolygonArray;
4use crate::array::primitive::BooleanArray;
5use crate::array::primitive::FloatArray;
6use crate::array::CoordBuffer;
7use crate::array::GeometryArray;
8use crate::broadcasting::{BroadcastableAffine, BroadcastableFloat};
9use crate::error::WasmResult;
10use crate::impl_geometry_array;
11use crate::log;
12#[cfg(feature = "geodesy")]
13use crate::reproject::ReprojectDirection;
14use crate::utils::vec_to_offsets;
15use crate::TransformOrigin;
16use arrow2::datatypes::Field;
17use geoarrow::GeometryArrayTrait;
18use wasm_bindgen::prelude::*;
19
20#[wasm_bindgen]
21pub struct MultiPolygonArray(pub(crate) geoarrow::array::MultiPolygonArray);
22
23impl_geometry_array!(MultiPolygonArray);
24
25#[wasm_bindgen]
26impl MultiPolygonArray {
27    #[wasm_bindgen(constructor)]
28    pub fn new(
29        coords: CoordBuffer,
30        geom_offsets: Vec<i32>,
31        polygon_offsets: Vec<i32>,
32        ring_offsets: Vec<i32>,
33        validity: Option<BooleanArray>,
34    ) -> Self {
35        Self(geoarrow::array::MultiPolygonArray::new(
36            coords.0,
37            vec_to_offsets(geom_offsets),
38            vec_to_offsets(polygon_offsets),
39            vec_to_offsets(ring_offsets),
40            validity.map(|validity| validity.0.values().clone()),
41        ))
42    }
43}
44impl From<&MultiPolygonArray> for geoarrow::array::GeometryArray {
45    fn from(value: &MultiPolygonArray) -> Self {
46        geoarrow::array::GeometryArray::MultiPolygon(value.0.clone())
47    }
48}