geoarrow_wasm/array/
polygon.rs

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