protocol

crs_projections_protocol

Coordinate reference systems and coordinate transformation predicates protocol.

Availability:
logtalk_load(crs_projections(loader))
Author: Paulo Moura
Version: 1:0:0
Date: 2026-05-10
Compilation flags:
static
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

Public predicates

valid_crs/1

True when the argument is a supported coordinate reference system. Supported values are wgs84, wgs84_3d, web_mercator, world_mercator, ecef, enu(OriginCoordinate), lambert_azimuthal_equal_area(OriginCoordinate), and utm(Zone,Hemisphere) terms.

Compilation flags:
static
Template:
valid_crs(CRS)
Mode and number of proofs:
valid_crs(@term) - zero_or_one

crs_name/2

Maps a supported coordinate reference system to a human-readable name.

Compilation flags:
static
Template:
crs_name(CRS,Name)
Mode and number of proofs:
crs_name(+term,-atom) - zero_or_one

crs_kind/2

Classifies a supported coordinate reference system as geographic, projected, geocentric, or local_tangent_plane.

Compilation flags:
static
Template:
crs_kind(CRS,Kind)
Mode and number of proofs:
crs_kind(+term,-atom) - zero_or_one

crs_units/2

Returns the coordinate axis units used by a supported coordinate reference system. Supported values are degrees, meters, and [degrees,degrees,meters].

Compilation flags:
static
Template:
crs_units(CRS,Units)
Mode and number of proofs:
crs_units(+term,-term) - zero_or_one

crs_dimensions/2

Returns the coordinate dimensionality for a supported coordinate reference system.

Compilation flags:
static
Template:
crs_dimensions(CRS,Dimensions)
Mode and number of proofs:
crs_dimensions(+term,-positive_integer) - zero_or_one

crs_epsg/2

Maps a supported coordinate reference system to the corresponding EPSG code.

Compilation flags:
static
Template:
crs_epsg(CRS,EPSG)
Mode and number of proofs:
crs_epsg(+term,-positive_integer) - zero_or_one

epsg_crs/2

Maps a supported EPSG code to the corresponding coordinate reference system term.

Compilation flags:
static
Template:
epsg_crs(EPSG,CRS)
Mode and number of proofs:
epsg_crs(+positive_integer,-term) - zero_or_one

valid_coordinate/2

True when the coordinate is valid for the given coordinate reference system. wgs84 coordinates are represented as geographic(Latitude,Longitude) in degrees, wgs84_3d coordinates as geographic(Latitude,Longitude,EllipsoidalHeight) in degrees and meters, web_mercator, world_mercator, and lambert_azimuthal_equal_area(OriginCoordinate) coordinates as projected(X,Y) pairs in meters, ecef coordinates as ecef(X,Y,Z) triples in meters, enu(OriginCoordinate) coordinates as enu(East,North,Up) triples in meters, and utm(Zone,Hemisphere) coordinates as grid(Easting,Northing) pairs in meters.

Compilation flags:
static
Template:
valid_coordinate(CRS,Coordinate)
Mode and number of proofs:
valid_coordinate(+term,@compound) - zero_or_one

local_tangent_plane/3

Projects a WGS84 geographic coordinate to local enu(East,North,Up) coordinates in meters using an origin coordinate. For height-preserving 3D geodetic workflows, use transform/4 with wgs84_3d.

Compilation flags:
static
Template:
local_tangent_plane(Origin,Coordinate,LocalCoordinate)
Mode and number of proofs:
local_tangent_plane(+compound,+compound,-compound) - zero_or_one

local_tangent_plane_inverse/3

Converts local enu(East,North,Up) coordinates in meters back to a WGS84 geographic coordinate using an origin coordinate. For height-preserving 3D geodetic workflows, use transform/4 with wgs84_3d.

Compilation flags:
static
Template:
local_tangent_plane_inverse(Origin,LocalCoordinate,Coordinate)
Mode and number of proofs:
local_tangent_plane_inverse(+compound,+compound,-compound) - zero_or_one

lambert_azimuthal_equal_area/3

Projects a WGS84 geographic coordinate to a Lambert azimuthal equal-area plane centered on an origin coordinate, returning projected(X,Y) coordinates in meters.

Compilation flags:
static
Template:
lambert_azimuthal_equal_area(Origin,Coordinate,ProjectedCoordinate)
Mode and number of proofs:
lambert_azimuthal_equal_area(+compound,+compound,-compound) - zero_or_one

lambert_azimuthal_equal_area_inverse/3

Converts Lambert azimuthal equal-area projected(X,Y) coordinates back to a WGS84 geographic coordinate using an origin coordinate.

Compilation flags:
static
Template:
lambert_azimuthal_equal_area_inverse(Origin,ProjectedCoordinate,Coordinate)
Mode and number of proofs:
lambert_azimuthal_equal_area_inverse(+compound,+compound,-compound) - zero_or_one

utm_zone/2

Infers the UTM longitudinal zone for a WGS84 geographic(Latitude,Longitude) coordinate. Uses the standard Norway and Svalbard special-zone rules and only succeeds for coordinates within the UTM latitude coverage.

Compilation flags:
static
Template:
utm_zone(Coordinate,Zone)
Mode and number of proofs:
utm_zone(+compound,-integer) - zero_or_one

utm_crs/2

Infers the native UTM coordinate reference system term utm(Zone,Hemisphere) for a WGS84 geographic(Latitude,Longitude) coordinate.

Compilation flags:
static
Template:
utm_crs(Coordinate,CRS)
Mode and number of proofs:
utm_crs(+compound,-compound) - zero_or_one

transform/4

Transforms a coordinate between supported coordinate reference systems. Transformations between projected systems are computed by converting through wgs84.

Compilation flags:
static
Template:
transform(SourceCRS,TargetCRS,Coordinate,TransformedCoordinate)
Mode and number of proofs:
transform(+term,+term,+compound,-compound) - zero_or_one

Protected predicates

(none)

Private predicates

(none)

Operators

(none)