Coordinate systems syntax

The coordinate systems syntax is a string representation of such a coordinate system.

The well-known text representation of spatial reference systems provides a standard textual representation for coordinate system information. The definitions of the well-known text representation are defined by the OGC Simple Features for SQL specification and the ISO SQL/MM Part 3: Spatial standard.

A coordinate system is a geographic (latitude-longitude), a projected (X,Y), or a geocentric (X,Y,Z) coordinate system. The coordinate system is composed of several objects. Each object has a keyword in uppercase (for example, DATUM or UNIT) followed by the comma-delimited defining parameters of the object in brackets. Some objects are composed of other objects, so the result is a nested structure.

Note: Implementations are free to substitute standard brackets ( ) for square brackets [ ] and should be able to read both forms of brackets.
The EBNF (Extended Backus Naur Form) definition for the string representation of a coordinate system using square brackets is as follows (see preceding note regarding the use of brackets):

<coordinate system> = <projected cs> | 
<geographic cs> | <geocentric cs>
<projected cs> = PROJCS["<name>", 
<geographic cs>, <projection>, {<parameter>,}*
<linear unit>]
<projection> = PROJECTION["<name>"]
<parameter> = PARAMETER["<name>", 
<value>]

<value> = <number>
The type of coordinate system is identified by the keyword used:
PROJCS
A data set's coordinate system is identified by the PROJCS keyword if the data is in projected coordinates
GEOGCS
A data set's coordinate system is identified by the GEOGCS keyword if the data is in geographic coordinates
GEOCCS
A data set's coordinate system is identified by the GEOCCS keyword if the data is in geocentric coordinates
The PROJCS keyword is followed by all of the pieces that define the projected coordinate system. The first piece of any object is always the name. Several objects follow the projected coordinate system name: the geographic coordinate system, the map projection, one or more parameters, and the linear unit of measure. All projected coordinate systems are based upon a geographic coordinate system, so this section describes the pieces specific to a projected coordinate system first. For example, UTM zone 10N on the NAD83 datum is defined:

PROJCS["NAD_1983_UTM_Zone_10N",
<geographic cs>,
PROJECTION["Transverse_Mercator"],
PARAMETER["False_Easting",500000.0],
PARAMETER["False_Northing",0.0],
PARAMETER["Central_Meridian",-123.0],
PARAMETER["Scale_Factor",0.9996],
PARAMETER["Latitude_of_Origin",0.0],
UNIT["Meter",1.0]]
The name and several objects define the geographic coordinate system object in turn: the datum, the prime meridian, and the angular unit of measure.

<geographic cs> = GEOGCS["<name>", <datum>, <prime meridian>, <angular unit>]
<datum> = DATUM["<name>", <spheroid>]
<spheroid> = SPHEROID["<name>", <semi-major axis>, <inverse flattening>]
<semi-major axis> = <number>
<inverse flattening> = <number>
<prime meridian> = PRIMEM["<name>", <longitude>]
<longitude> = <number>

The semi-major axis is measured in meters and must be greater than zero.

The geographic coordinate system string for UTM zone 10 on NAD83:

GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137,298.257222101]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.0174532925199433]]
The UNIT object can represent angular or linear unit of measures:

<angular unit> = <unit>
<linear unit> = <unit>
<unit> = UNIT["<name>", <conversion factor>]
<conversion factor> = <number>
 

The conversion factor specifies number of meters (for a linear unit) or number of radians (for an angular unit) per unit and must be greater than zero.

So the full string representation of UTM Zone 10N is as follows:

PROJCS["NAD_1983_UTM_Zone_10N",
GEOGCS["GCS_North_American_1983",
DATUM[ "D_North_American_1983",SPHEROID["GRS_1980",6378137,298.257222101]],
PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],
PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-123.0],
PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_of_Origin",0.0],
UNIT["Meter",1.0]]
A geocentric coordinate system is quite similar to a geographic coordinate system:

<geocentric cs> = GEOCCS["<name>", <datum>, <prime meridian>, <linear unit>]