common_function/scalars/
geo.rs

1// Copyright 2023 Greptime Team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15mod geohash;
16mod h3;
17pub(crate) mod helpers;
18mod measure;
19mod relation;
20mod s2;
21mod wkt;
22
23use crate::function_registry::FunctionRegistry;
24
25pub(crate) struct GeoFunctions;
26
27impl GeoFunctions {
28    pub fn register(registry: &FunctionRegistry) {
29        // geohash
30        registry.register_scalar(geohash::GeohashFunction::default());
31        registry.register_scalar(geohash::GeohashNeighboursFunction::default());
32
33        // h3 index
34        registry.register_scalar(h3::H3LatLngToCell::default());
35        registry.register_scalar(h3::H3LatLngToCellString::default());
36
37        // h3 index inspection
38        registry.register_scalar(h3::H3CellBase::default());
39        registry.register_scalar(h3::H3CellIsPentagon::default());
40        registry.register_scalar(h3::H3StringToCell::default());
41        registry.register_scalar(h3::H3CellToString::default());
42        registry.register_scalar(h3::H3CellCenterLatLng::default());
43        registry.register_scalar(h3::H3CellResolution::default());
44
45        // h3 hierarchical grid
46        registry.register_scalar(h3::H3CellCenterChild::default());
47        registry.register_scalar(h3::H3CellParent::default());
48        registry.register_scalar(h3::H3CellToChildren::default());
49        registry.register_scalar(h3::H3CellToChildrenSize::default());
50        registry.register_scalar(h3::H3CellToChildPos::default());
51        registry.register_scalar(h3::H3ChildPosToCell::default());
52        registry.register_scalar(h3::H3CellContains::default());
53
54        // h3 grid traversal
55        registry.register_scalar(h3::H3GridDisk::default());
56        registry.register_scalar(h3::H3GridDiskDistances::default());
57        registry.register_scalar(h3::H3GridDistance::default());
58        registry.register_scalar(h3::H3GridPathCells::default());
59
60        // h3 measurement
61        registry.register_scalar(h3::H3CellDistanceSphereKm::default());
62        registry.register_scalar(h3::H3CellDistanceEuclideanDegree::default());
63
64        // s2
65        registry.register_scalar(s2::S2LatLngToCell::default());
66        registry.register_scalar(s2::S2CellLevel::default());
67        registry.register_scalar(s2::S2CellToToken::default());
68        registry.register_scalar(s2::S2CellParent::default());
69
70        // spatial data type
71        registry.register_scalar(wkt::LatLngToPointWkt::default());
72
73        // spatial relation
74        registry.register_scalar(relation::STContains::default());
75        registry.register_scalar(relation::STWithin::default());
76        registry.register_scalar(relation::STIntersects::default());
77
78        // spatial measure
79        registry.register_scalar(measure::STDistance::default());
80        registry.register_scalar(measure::STDistanceSphere::default());
81        registry.register_scalar(measure::STArea::default());
82    }
83}