geo
Coordinate primitives without a new scalar kind — geometries are ordinary CXDM elements. Covers construction of points, bounding boxes, and polygons; distance and bearing (Haversine by default, high-precision Vincenty on demand); bounding-box and polygon operations including area, centroid, and point-in-polygon; WKT and GeoJSON format I/O; and longitude/latitude normalization. All coordinates are WGS84 (EPSG:4326) latitude and longitude in decimal degrees, with no reprojection or alternate coordinate systems.
geo:point
[$geo:point] -> element — Construct a point from latitude and longitude; wraps out-of-range longitude and rejects bad latitude.
[?lib 'cx-stdlib/geo']
[?let [= $p [$geo:point 37.7749 -122.4194]] $p/lat]
37.7749
geo:bbox
[$geo:bbox] -> element — Construct the minimum bounding box enclosing a sequence of points.
[?lib 'cx-stdlib/geo']
[?let [= $bb [$geo:bbox ([$geo:point 37.7 -122.5], [$geo:point 37.85 -122.35])]] $bb/min-lat]
37.7
geo:polygon
[$geo:polygon] -> element — Construct a polygon from an outer ring of points, auto-closing the ring if open.
[?lib 'cx-stdlib/geo']
[$geo:polygon-is-closed [$geo:polygon ([$geo:point 37.7 -122.5], [$geo:point 37.7 -122.4], [$geo:point 37.8 -122.4], [$geo:point 37.8 -122.5])]]
true
geo:polygon-with-holes
[$geo:polygon-with-holes] -> element — Construct a polygon from an outer ring plus interior hole rings.
[?lib 'cx-stdlib/geo']
[$geo:polygon-is-closed [$geo:polygon-with-holes ([$geo:point 0.0 0.0], [$geo:point 0.0 10.0], [$geo:point 10.0 10.0], [$geo:point 10.0 0.0], [$geo:point 0.0 0.0]) (([$geo:point 2.0 2.0], [$geo:point 2.0 4.0], [$geo:point 4.0 4.0], [$geo:point 4.0 2.0], [$geo:point 2.0 2.0]))]]
true
geo:distance
[$geo:distance] -> float — Great-circle distance between two points by the Haversine formula, in the given unit.
[?lib 'cx-stdlib/geo']
[$geo:distance [$geo:point 40.7128 -74.0060] [$geo:point 33.9416 -118.4085] "km"]
3944.0
geo:distance-vincenty
[$geo:distance-vincenty] -> float — High-precision ellipsoidal distance by Vincenty; may fail to converge for near-antipodal points.
[?lib 'cx-stdlib/geo']
[$geo:distance-vincenty [$geo:point 40.7128 -74.0060] [$geo:point 33.9416 -118.4085] "km"]
3960.0
geo:bearing
[$geo:bearing] -> float — Initial bearing from one point to another in degrees, where 0 is north.
[?lib 'cx-stdlib/geo']
[$geo:bearing [$geo:point 0.0 0.0] [$geo:point 0.0 1.0]]
90.0
geo:destination
[$geo:destination] -> element — Compute the endpoint reached from an origin along a bearing for a given distance.
[?lib 'cx-stdlib/geo']
[?let [= $d [$geo:destination [$geo:point 0.0 0.0] 0.0 100.0 "km"]] $d/lon]
0.0
geo:bbox-of
[$geo:bbox-of] -> element — Compute the minimum bounding box covering a sequence of points.
[?lib 'cx-stdlib/geo']
[?let [= $bb [$geo:bbox-of ([$geo:point 37.7 -122.5], [$geo:point 37.85 -122.35], [$geo:point 37.8 -122.4])]] $bb/min-lat]
37.7
geo:bbox-of-polygon
[$geo:bbox-of-polygon] -> element — Compute the bounding box enclosing a polygon.
[?lib 'cx-stdlib/geo']
[?let [= $bb [$geo:bbox-of-polygon [$geo:polygon ([$geo:point 37.7 -122.5], [$geo:point 37.7 -122.4], [$geo:point 37.8 -122.4], [$geo:point 37.8 -122.5])]]] $bb/min-lon]
-122.5
geo:within-bbox
[$geo:within-bbox] -> bool — Report whether a point lies inside a bounding box, handling antimeridian crossing.
[?lib 'cx-stdlib/geo']
[$geo:within-bbox [$geo:point 37.75 -122.45] [$geo:bbox ([$geo:point 37.7 -122.5], [$geo:point 37.85 -122.35])]]
true
geo:bbox-intersects
[$geo:bbox-intersects] -> bool — Report whether two bounding boxes overlap.
[?lib 'cx-stdlib/geo']
[$geo:bbox-intersects [$geo:bbox ([$geo:point 0.0 0.0], [$geo:point 10.0 10.0])] [$geo:bbox ([$geo:point 5.0 5.0], [$geo:point 15.0 15.0])]]
true
geo:bbox-area
[$geo:bbox-area] -> float — Compute the area of a bounding box in the given unit.
[?lib 'cx-stdlib/geo']
[$geo:bbox-area [$geo:bbox ([$geo:point 5.0 5.0], [$geo:point 5.0 5.0])] "km2"]
0.0
geo:bbox-expand
[$geo:bbox-expand] -> element — Grow a bounding box outward by a distance in meters on every side.
[?lib 'cx-stdlib/geo']
[?let [= $bb [$geo:bbox-expand [$geo:bbox ([$geo:point 37.7 -122.5], [$geo:point 37.85 -122.35])] 0.0]] $bb/min-lat]
37.7
geo:bbox-center
[$geo:bbox-center] -> element — Compute the center point of a bounding box.
[?lib 'cx-stdlib/geo']
[?let [= $c [$geo:bbox-center [$geo:bbox ([$geo:point 0.0 0.0], [$geo:point 10.0 20.0])]]] $c/lat]
5.0
geo:polygon-area
[$geo:polygon-area] -> float — Compute geodesic polygon area on the WGS84 ellipsoid in the given unit; requires a valid polygon.
[?lib 'cx-stdlib/geo']
[$geo:polygon-area [$geo:polygon ([$geo:point 0.0 0.0], [$geo:point 0.0 1.0], [$geo:point 0.0 2.0], [$geo:point 0.0 0.0])] "km2"]
cx-err:CXER3602
geo:polygon-perimeter
[$geo:polygon-perimeter] -> float — Compute the perimeter length of a polygon's outer ring in the given unit.
[?lib 'cx-stdlib/geo']
[$geo:polygon-perimeter [$geo:polygon ([$geo:point 5.0 5.0], [$geo:point 5.0 5.0], [$geo:point 5.0 5.0], [$geo:point 5.0 5.0])] "km"]
0.0
geo:polygon-centroid
[$geo:polygon-centroid] -> element — Compute the centroid point of a polygon.
[?lib 'cx-stdlib/geo']
[?let [= $c [$geo:polygon-centroid [$geo:polygon ([$geo:point 0.0 0.0], [$geo:point 0.0 10.0], [$geo:point 10.0 10.0], [$geo:point 10.0 0.0], [$geo:point 0.0 0.0])]]] $c/lat]
5.0
geo:point-in-polygon
[$geo:point-in-polygon] -> bool — Report whether a point lies inside a polygon by ray-casting, accounting for holes.
[?lib 'cx-stdlib/geo']
[$geo:point-in-polygon [$geo:point 5.0 5.0] [$geo:polygon ([$geo:point 0.0 0.0], [$geo:point 0.0 10.0], [$geo:point 10.0 10.0], [$geo:point 10.0 0.0], [$geo:point 0.0 0.0])]]
true
geo:polygon-is-valid
[$geo:polygon-is-valid] -> bool — Report whether a polygon passes the full OGC Simple Features validity check.
[?lib 'cx-stdlib/geo']
[$geo:polygon-is-valid [$geo:polygon ([$geo:point 0.0 0.0], [$geo:point 0.0 10.0], [$geo:point 10.0 10.0], [$geo:point 10.0 0.0], [$geo:point 0.0 0.0])]]
true
geo:polygon-is-closed
[$geo:polygon-is-closed] -> bool — Report whether a polygon's rings are closed (each ring's first point equals its last).
[?lib 'cx-stdlib/geo']
[$geo:polygon-is-closed [$geo:polygon ([$geo:point 37.7 -122.5], [$geo:point 37.7 -122.4], [$geo:point 37.8 -122.4], [$geo:point 37.8 -122.5])]]
true
geo:normalize-lat
[$geo:normalize-lat] -> float — Clamp a latitude into [-90, 90] — an explicit, opt-in lossy clamp for raw numeric pipelines.
[?lib 'cx-stdlib/geo']
[$geo:normalize-lat 95.0]
90.0
geo:normalize-lon
[$geo:normalize-lon] -> float — Wrap a longitude losslessly into [-180, 180], since longitude is cyclic.
[?lib 'cx-stdlib/geo']
[$geo:normalize-lon 190.0]
-170.0
geo:normalize-point
[$geo:normalize-point] -> element — Normalize a point's coordinates — wrap longitude and clamp latitude into range.
[?lib 'cx-stdlib/geo']
[?let [= $p [$geo:normalize-point [$geo:point 45.0 190.0]]] $p/lon]
-170.0
geo:normalize-bbox
[$geo:normalize-bbox] -> element — Normalize a bounding box's coordinates into valid longitude and latitude ranges.
[?lib 'cx-stdlib/geo']
[?let [= $bb [$geo:normalize-bbox [$geo:bbox ([$geo:point 0.0 170.0], [$geo:point 10.0 190.0])]]] $bb/max-lon]
-170.0
geo:is-valid-lat
[$geo:is-valid-lat] -> bool — Report whether a latitude lies within [-90, 90].
[?lib 'cx-stdlib/geo']
[$geo:is-valid-lat 45.0]
true
geo:is-valid-lon
[$geo:is-valid-lon] -> bool — Report whether a longitude lies within [-180, 180].
[?lib 'cx-stdlib/geo']
[$geo:is-valid-lon 180.0]
true
geo:parse-wkt
[$geo:parse-wkt] -> element — Parse an OGC Well-Known Text string into a geometry element.
[?lib 'cx-stdlib/geo']
[?let [= $p [$geo:parse-wkt "POINT(-122.4194 37.7749)"]] $p/lat]
37.7749
geo:format-wkt
[$geo:format-wkt] -> string — Render a geometry element as an OGC Well-Known Text string.
[?lib 'cx-stdlib/geo']
[$geo:format-wkt [$geo:point 37.7749 -122.4194]]
'POINT(-122.4194 37.7749)'
geo:parse-geojson
[$geo:parse-geojson] -> element — Parse an RFC 7946 GeoJSON string into a geometry or feature element.
[?lib 'cx-stdlib/geo']
[?let [= $p [$geo:parse-geojson "{\"type\":\"Point\",\"coordinates\":[-122.4194,37.7749]}"]] $p/lat]
37.7749
geo:format-geojson
[$geo:format-geojson] -> string — Render a geometry or feature element as an RFC 7946 GeoJSON string.
[?lib 'cx-stdlib/geo']
[?let [= $p [$geo:parse-geojson [$geo:format-geojson [$geo:point 37.7749 -122.4194]]]] $p/lat]
37.7749