Skip to main content

vortex_geo/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use std::sync::Arc;
5
6use vortex_array::arrow::ArrowSessionExt;
7use vortex_array::dtype::session::DTypeSessionExt;
8use vortex_array::scalar_fn::session::ScalarFnSessionExt;
9use vortex_session::VortexSession;
10
11use crate::extension::LineString;
12use crate::extension::MultiLineString;
13use crate::extension::MultiPoint;
14use crate::extension::MultiPolygon;
15use crate::extension::Point;
16use crate::extension::Polygon;
17use crate::extension::WellKnownBinary;
18use crate::scalar_fn::distance::GeoDistance;
19
20pub mod extension;
21pub mod scalar_fn;
22#[cfg(test)]
23mod test_harness;
24#[cfg(test)]
25mod tests;
26
27/// Set up a session with support for geospatial extension types, encodings and layouts.
28pub fn initialize(session: &VortexSession) {
29    // Register the geospatial extension types.
30    session.dtypes().register(WellKnownBinary);
31    session.arrow().register_exporter(Arc::new(WellKnownBinary));
32    session.arrow().register_importer(Arc::new(WellKnownBinary));
33    session.dtypes().register(Point);
34    session.arrow().register_exporter(Arc::new(Point));
35    session.arrow().register_importer(Arc::new(Point));
36    session.dtypes().register(LineString);
37    session.arrow().register_exporter(Arc::new(LineString));
38    session.arrow().register_importer(Arc::new(LineString));
39    session.dtypes().register(MultiPoint);
40    session.arrow().register_exporter(Arc::new(MultiPoint));
41    session.arrow().register_importer(Arc::new(MultiPoint));
42    session.dtypes().register(Polygon);
43    session.arrow().register_exporter(Arc::new(Polygon));
44    session.arrow().register_importer(Arc::new(Polygon));
45    session.dtypes().register(MultiLineString);
46    session.arrow().register_exporter(Arc::new(MultiLineString));
47    session.arrow().register_importer(Arc::new(MultiLineString));
48    session.dtypes().register(MultiPolygon);
49    session.arrow().register_exporter(Arc::new(MultiPolygon));
50    session.arrow().register_importer(Arc::new(MultiPolygon));
51
52    // Register the geometry scalar functions.
53    session.scalar_fns().register(GeoDistance);
54}