Geospatial
Nucleus includes built-in geospatial support with R-tree indexing, Haversine distance, and polygon operations — no PostGIS extension needed.
Distance Calculations
Geographic Distance (Haversine)
Calculate great-circle distance between two points on Earth:
-- Distance between San Francisco and New York (in meters)
SELECT GEO_DISTANCE(37.7749, -122.4194, 40.7128, -74.0060);
-- → 4,129,086.0 (~4,129 km)
-- PostGIS-compatible alias
SELECT ST_DISTANCE(37.7749, -122.4194, 40.7128, -74.0060);
Parameters: (lat1, lon1, lat2, lon2) — coordinates in degrees.
Euclidean Distance
For Cartesian coordinate systems:
SELECT GEO_DISTANCE_EUCLIDEAN(0, 0, 3, 4);
-- → 5.0
-- PostGIS-compatible alias
SELECT ST_DISTANCE_EUCLIDEAN(0, 0, 3, 4);
Proximity Queries
Check if two points are within a given distance:
-- Are these two points within 5,000,000 meters (5,000 km)?
SELECT GEO_WITHIN(37.7749, -122.4194, 40.7128, -74.0060, 5000000);
-- → true
-- PostGIS-compatible alias
SELECT ST_DWITHIN(37.7749, -122.4194, 40.7128, -74.0060, 5000000);
Finding Nearby Locations
Combine with SQL queries to find nearby points:
-- Find all stores within 10km of a user
SELECT name, address,
GEO_DISTANCE(lat, lon, 37.7749, -122.4194) AS distance_m
FROM stores
WHERE GEO_WITHIN(lat, lon, 37.7749, -122.4194, 10000)
ORDER BY distance_m
LIMIT 10;
Polygon Area
Calculate the area of a polygon using the Shoelace formula:
-- Area of a triangle
SELECT GEO_AREA(0, 0, 4, 0, 2, 3);
-- → 6.0
-- Area of a quadrilateral
SELECT ST_AREA(0, 0, 4, 0, 4, 3, 0, 3);
-- → 12.0
Pass coordinate pairs as alternating x, y values. Requires at least 3 points (6 arguments).
R-Tree Index
The spatial engine uses a custom R-tree index for efficient spatial queries:
- Max 16 entries per node — balanced tree structure
- Bounding box queries — O(log N) for intersection and containment tests
- Point-in-polygon — Ray casting algorithm
PostGIS Compatibility
All functions have PostGIS-compatible aliases:
| Nucleus | PostGIS Alias |
|---------|--------------|
| GEO_DISTANCE | ST_DISTANCE |
| GEO_DISTANCE_EUCLIDEAN | ST_DISTANCE_EUCLIDEAN |
| GEO_WITHIN | ST_DWITHIN |
| GEO_AREA | ST_AREA |
Use Cases
- Store locators — Find nearest locations
- Delivery zones — Check if an address is within a service area
- Fleet tracking — Monitor vehicle positions and distances
- Geofencing — Trigger actions when entering/leaving areas
- Mapping — Calculate routes and distances