PROJINFO(1) PROJ PROJINFO(1)
NAME
projinfo - Geodetic object and coordinate operation queries
SYNOPSIS
projinfo
[-o formats] [-k crs|operation|datum|ensemble|ellipsoid] [--summary] [-q]
[[--area name_or_code] | [--bbox west_long,south_lat,east_long,north_lat]]
[--spatial-test contains|intersects]
[--crs-extent-use none|both|intersection|smallest]
[--grid-check none|discard_missing|sort|known_available]
[--pivot-crs always|if_no_direct_transformation|never|{auth:code[,auth:code]*}]
[--show-superseded] [--hide-ballpark] [--accuracy {accuracy}]
[--allow-ellipsoidal-height-as-vertical-crs]
[--boundcrs-to-wgs84]
[--authority name]
[--main-db-path path] [--aux-db-path path]*
[--dump-db-structure]
[--identify] [--3d]
[--output-id AUTH:CODE]
[--c-ify] [--single-line]
--searchpaths | --remote-data |
--list-crs [list-crs-filter] |
--dump-db-structure [{object_definition} | {object_reference}] |
{object_definition} | {object_reference} | (-s {srs_def} -t {srs_def})
where {object_definition} or {srs_def} is one of the possibilities
accepted by proj_create()
• a proj-string,
• a WKT string,
• an object code (like "EPSG:4326", "urn:ogc:def:crs:EPSG::4326",
"urn:ogc:def:coordinateOperation:EPSG::1671"),
• an Object name. e.g "WGS 84", "WGS 84 / UTM zone 31N". In that
case as uniqueness is not guaranteed, heuristics are applied to
determine the appropriate best match.
• a OGC URN combining references for compound coordinate reference
systems (e.g "urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717" or
custom abbreviated syntax "EPSG:2393+5717"),
• a OGC URN combining references for references for projected or de-
rived CRSs e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)":
"-
urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOpera-
tion:EPSG::16031" (added in 6.2)
• a OGC URN combining references for concatenated operations (e.g.
"-
urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,co-
ordinateOperation:EPSG::1618")
• a PROJJSON string. The jsonschema is at
https://proj.org/schemas/v0.4/projjson.schema.json (added in 6.2)
• a compound CRS made from two object names separated with " + ".
e.g. "WGS 84 + EGM96 height" (added in 7.1)
{object_reference} is a filename preceded by the '@' character. The
file referenced by the {object_reference} must contain a valid {ob-
ject_definition}.
DESCRIPTION
projinfo is a program that can query information on a geodetic object,
coordinate reference system (CRS) or coordinate operation, when the -s
and -t options are specified, and display it under different formats
(PROJ string, WKT string or PROJJSON string).
It can also be used to query coordinate operations available between
two CRS.
The program is named with some reference to the GDAL gdalsrsinfo that
offers partly similar services.
The following control parameters can appear in any order:
-o formats
formats is a comma separated combination of: all, default, PROJ,
WKT_ALL, WKT2:2015, WKT2:2019, WKT1:GDAL, WKT1:ESRI, PROJJSON,
SQL.
Except all and default, other formats can be preceded by - to
disable them.
NOTE:
WKT2_2019 was previously called WKT2_2018.
NOTE:
Before PROJ 6.3.0, WKT1:GDAL was implicitly calling --bound-
crs-to-wgs84. This is no longer the case.
NOTE:
When SQL is specified, --output-id must be specified.
-k crs|operation|datum|ensemble|ellipsoid
When used to query a single object with a AUTHORITY:CODE, deter-
mines the (k)ind of the object in case there are CRS, coordinate
operations or ellipsoids with the same CODE. The default is
crs.
--summary
When listing coordinate operations available between 2 CRS, re-
turn the result in a summary format, mentioning only the name of
the coordinate operation, its accuracy and its area of use.
NOTE:
only used for coordinate operation computation
-q Turn on quiet mode. Quiet mode is only available for queries on
single objects, and only one output format is selected. In that
mode, only the PROJ, WKT or PROJJSON string is displayed, with-
out other introduction output. The output is then potentially
compatible of being piped in other utilities.
--area name_or_code
Specify an area of interest to restrict the results when re-
searching coordinate operations between 2 CRS. The area of in-
terest can be specified either as a name (e.g "Denmark - on-
shore") or a AUTHORITY:CODE (EPSG:3237) This option is exclusive
of --bbox.
NOTE:
only used for coordinate operation computation
--bbox west_long,south_lat,east_long,north_lat
Specify an area of interest to restrict the results when re-
searching coordinate operations between 2 CRS. The area of in-
terest is specified as a bounding box with geographic coordi-
nates, expressed in degrees in a unspecified geographic CRS.
west_long and east_long should be in the [-180,180] range, and
south_lat and north_lat in the [-90,90]. west_long is generally
lower than east_long, except in the case where the area of in-
terest crosses the antimeridian.
NOTE:
only used for coordinate operation computation
--spatial-test contains|intersects
Specify how the area of use of coordinate operations found in
the database are compared to the area of use specified explic-
itly with --area or --bbox, or derived implicitly from the area
of use of the source and target CRS. By default, projinfo will
only keep coordinate operations whose are of use is strictly
within the area of interest (contains strategy). If using the
intersects strategy, the spatial test is relaxed, and any coor-
dinate operation whose area of use at least partly intersects
the area of interest is listed.
NOTE:
only used for coordinate operation computation
--crs-extent-use none|both|intersection|smallest
Specify which area of interest to consider when no explicit one
is specified with --area or --bbox options. By default (small-
est strategy), the area of use of the source or target CRS will
be looked, and the one that is the smallest one in terms of area
will be used as the area of interest. If using none, no area of
interest is used. If using both, only coordinate operations
that relate (contain or intersect depending of the
--spatial-test strategy) to the area of use of both CRS are se-
lected. If using intersection, the area of interest is the in-
tersection of the bounding box of the area of use of the source
and target CRS
NOTE:
only used for coordinate operation computation
--grid-check none|discard_missing|sort|known_available
Specify how the presence or absence of a horizontal or vertical
shift grid required for a coordinate operation affects the re-
sults returned when researching coordinate operations between 2
CRS. The default strategy is sort (if PROJ_NETWORK is not de-
fined). In that case, all candidate operations are returned,
but the actual availability of the grids is used to determine
the sorting order. That is, if a coordinate operation involves
using a grid that is not available in the PROJ resource directo-
ries (determined by the PROJ_LIB environment variable, it will
be listed in the bottom of the results. The none strategy com-
pletely disables the checks of presence of grids and this re-
turns the results as if all the grids where available. The dis-
card_missing strategy discards results that involve grids not
present in the PROJ resource directories. The known_available
strategy discards results that involve grids not present in the
PROJ resource directories and that are not known of the CDN.
This is the default strategy is PROJ_NETWORK is set to ON.
NOTE:
only used for coordinate operation computation
--pivot-crs always|if_no_direct_transforma-
tion|never|{auth:code[,auth:code]*}
Determine if intermediate (pivot) CRS can be used when research-
ing coordinate operation between 2 CRS. A typical example is the
WGS84 pivot. By default, projinfo will consider any potential
pivot if there is no direct transformation ( if_no_direct_trans-
formation). If using the never strategy, only direct transforma-
tions between the source and target CRS will be used. If using
the always strategy, intermediate CRS will be considered even if
there are direct transformations. It is also possible to re-
strict the pivot CRS to consider by specifying one or several
CRS by their AUTHORITY:CODE.
NOTE:
only used for coordinate operation computation
--show-superseded
When enabled, coordinate operations that are superseded by oth-
ers will be listed. Note that supersession is not equivalent to
deprecation: superseded operations are still considered valid
although they have a better equivalent, whereas deprecated oper-
ations have been determined to be erroneous and are not consid-
ered at all.
NOTE:
only used for coordinate operation computation
--hide-ballpark
New in version 7.1.
Hides any coordinate operation that is, or contains, a Ballpark
transformation
NOTE:
only used for coordinate operation computation
--accuracy {accuracy}
New in version 8.0.
Sets the minimum desired accuracy for returned coordinate opera-
tions.
NOTE:
only used for coordinate operation computation
--allow-ellipsoidal-height-as-vertical-crs
New in version 8.0.
Allows exporting a geographic or projected 3D CRS as a compound
CRS whose vertical CRS represents the ellipsoidal height.
NOTE:
only used for CRS, and with WKT1:GDAL output format
--boundcrs-to-wgs84
When specified, this option researches a coordinate operation
from the base geographic CRS of the single CRS, source or target
CRS to the WGS84 geographic CRS, and if found, wraps those CRS
into a BoundCRS object. This is mostly to be used for
early-binding approaches.
--authority name
Specify the name of the authority into which to restrict looks
up for objects, when specifying an object by name or when coor-
dinate operations are computed. The default is to allow all au-
thorities.
When used with SQL output, this restricts the authorities to
which intermediate objects can belong to (the default is EPSG
and PROJ). Note that the authority of the --output-id option
will also be implicitly added.
--main-db-path path
Specify the name and path of the database to be used by pro-
jinfo. The default is proj.db in the PROJ resource directories.
--aux-db-path path
Specify the name and path of auxiliary databases, that are to be
combined with the main database. Those auxiliary databases must
have a table structure that is identical to the main database,
but can be partly filled and their entries can refer to entries
of the main database. The option may be repeated to specify
several auxiliary databases.
--identify
When used with an object definition, this queries the PROJ data-
base to find known objects, typically CRS, that are close or
identical to the object. Each candidate object is associated
with an approximate likelihood percentage. This is useful when
used with a WKT string that lacks a EPSG identifier, such as
ESRI WKT1. This might also be used with PROJ strings. For exam-
ple, +proj=utm +zone=31 +datum=WGS84 +type=crs will be identi-
fied with a likelihood of 70% to EPSG:32631
--dump-db-structure
New in version 8.1.
Outputs the sequence of SQL statements to create a new empty
valid auxiliary database. This option can be specified as the
only switch of the utility. If also specifying a CRS object and
the --output-id option, the definition of the object as SQL
statements will be appended.
--list-crs [list-crs-filter]
New in version 8.1.
Outputs a list (authority name:code and CRS name) of the fil-
tered CRSs from the database. If no filter is provided all au-
thority names and types of non deprecated CRSs are dumped.
list-crs-filter is a comma separated combination of: allow_dep-
recated,geodetic,geocentric, geographic,geographic_2d,geo-
graphic_3d,vertical,projected,compound. Affected by options
--authority, --area, --bbox and --spatial-test
--3d New in version 6.3.
"Promote" the CRS(s) to their 3D version. In the context of re-
searching available coordinate transformations, explicitly spec-
ifying this option is not necessary, because when one of the
source or target CRS has a vertical component but not the other
one, the one that has no vertical component is automatically
promoted to a 3D version, where its vertical axis is the ellip-
soidal height in metres, using the ellipsoid of the base geo-
detic CRS.
--output-id=AUTH:NAME
New in version 8.1.
Identifier to assign to the object (for SQL output).
It is strongly recommended that new objects should not be added
in common registries, such as EPSG, ESRI, IAU, etc. Users
should use a custom authority name instead. If a new object
should be added to the official EPSG registry, users are invited
to follow the procedure explained at
https://epsg.org/dataset-change-requests.html.
Combined with --dump-db-structure, users can create auxiliary
databases, instead of directly modifying the main proj.db data-
base. See the example how to export to an auxiliary database.
Those auxiliary databases can be specified through proj_con-
text_set_database_path() or the PROJ_AUX_DB environment vari-
able.
--c-ify
For developers only. Modify the string output of the utility so
that it is easy to put those strings in C/C++ code
--single-line
Output PROJ, WKT or PROJJSON strings on a single line, instead
of multiple indented lines by default.
--searchpaths
New in version 7.0.
Output the directories into which PROJ resources will be looked
for (if not using C API such as proj_context_set_search_paths()
that will override them.
--remote-data
New in version 7.0.
Display information regarding if network is enabled, and the re-
lated URL.
EXAMPLES
1. Query the CRS object corresponding to EPSG:4326
projinfo EPSG:4326
Output:
PROJ.4 string:
+proj=longlat +datum=WGS84 +no_defs +type=crs
WKT2:2019 string:
GEOGCRS["WGS 84",
DATUM["World Geodetic System 1984",
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
USAGE[
SCOPE["unknown"],
AREA["World"],
BBOX[-90,-180,90,180]],
ID["EPSG",4326]]
2. List the coordinate operations between NAD27 (designed with its CRS
name) and NAD83 (designed with its EPSG code 4269) within an area of
interest
projinfo -s NAD27 -t EPSG:4269 --area "USA - Missouri"
Output:
DERIVED_FROM(EPSG):1241, NAD27 to NAD83 (1), 0.15 m, USA - CONUS including EEZ
PROJ string:
+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert \
+xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=conus \
+step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
WKT2:2019 string:
COORDINATEOPERATION["NAD27 to NAD83 (1)",
SOURCECRS[
GEOGCRS["NAD27",
DATUM["North American Datum 1927",
ELLIPSOID["Clarke 1866",6378206.4,294.978698213898,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]]]],
TARGETCRS[
GEOGCRS["NAD83",
DATUM["North American Datum 1983",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]]]],
METHOD["CTABLE2"],
PARAMETERFILE["Latitude and longitude difference file","conus"],
OPERATIONACCURACY[0.15],
USAGE[
SCOPE["unknown"],
AREA["USA - CONUS including EEZ"],
BBOX[23.81,-129.17,49.38,-65.69]],
ID["DERIVED_FROM(EPSG)",1241]]
3. Export an object as a PROJJSON string
projinfo GDA94 -o PROJJSON -q
Output:
{
"type": "GeographicCRS",
"name": "GDA94",
"datum": {
"type": "GeodeticReferenceFrame",
"name": "Geocentric Datum of Australia 1994",
"ellipsoid": {
"name": "GRS 1980",
"semi_major_axis": 6378137,
"inverse_flattening": 298.257222101
}
},
"coordinate_system": {
"subtype": "ellipsoidal",
"axis": [
{
"name": "Geodetic latitude",
"abbreviation": "Lat",
"direction": "north",
"unit": "degree"
},
{
"name": "Geodetic longitude",
"abbreviation": "Lon",
"direction": "east",
"unit": "degree"
}
]
},
"area": "Australia - GDA",
"bbox": {
"south_latitude": -60.56,
"west_longitude": 93.41,
"north_latitude": -8.47,
"east_longitude": 173.35
},
"id": {
"authority": "EPSG",
"code": 4283
}
}
4. Exporting the SQL statements to insert a new CRS in an auxiliary
database.
# Get the SQL statements for a custom CRS
projinfo "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs" --output-id HOBU:MY_CRS -o SQL -q > my_crs.sql
cat my_crs.sql
# Initialize an auxiliary database with the schema of the reference database
echo ".schema" | sqlite3 /path/to/proj.db | sqlite3 aux.db
# Append the content of the definition of HOBU:MY_CRS
sqlite3 aux.db < my_crs.db
# Check that everything works OK
projinfo --aux-db-path aux.db HOBU:MY_CRS
or more simply:
# Create an auxiliary database with the definition of a custom CRS.
projinfo "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs" --output-id HOBU:MY_CRS --dump-db-structure | sqlite3 aux.db
# Check that everything works OK
projinfo --aux-db-path aux.db HOBU:MY_CRS
Output:
INSERT INTO geodetic_crs VALUES('HOBU','GEODETIC_CRS_MY_CRS','unknown','','geographic 2D','EPSG','6424','EPSG','6326',NULL,0);
INSERT INTO usage VALUES('HOBU','USAGE_GEODETIC_CRS_MY_CRS','geodetic_crs','HOBU','GEODETIC_CRS_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');
INSERT INTO conversion VALUES('HOBU','CONVERSION_MY_CRS','unknown','','EPSG','9805','Mercator (variant B)','EPSG','8823','Latitude of 1st standard parallel',5,'EPSG','9122','EPSG','8802','Longitude of natural origin',0,'EPSG','9122','EPSG','8806','False easting',0,'EPSG','9001','EPSG','8807','False northing',0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO usage VALUES('HOBU','USAGE_CONVERSION_MY_CRS','conversion','HOBU','CONVERSION_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');
INSERT INTO projected_crs VALUES('HOBU','MY_CRS','my_crs','','EPSG','4400','HOBU','GEODETIC_CRS_MY_CRS','HOBU','CONVERSION_MY_CRS',NULL,0);
INSERT INTO usage VALUES('HOBU','USAGE_PROJECTED_CRS_MY_CRS','projected_crs','HOBU','MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');
PROJ.4 string:
+proj=merc +lat_ts=5 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +type=crs
WKT2:2019 string:
PROJCRS["my_crs",
BASEGEOGCRS["unknown",
ENSEMBLE["World Geodetic System 1984 ensemble",
MEMBER["World Geodetic System 1984 (Transit)"],
MEMBER["World Geodetic System 1984 (G730)"],
MEMBER["World Geodetic System 1984 (G873)"],
MEMBER["World Geodetic System 1984 (G1150)"],
MEMBER["World Geodetic System 1984 (G1674)"],
MEMBER["World Geodetic System 1984 (G1762)"],
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]],
ENSEMBLEACCURACY[2.0]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
ID["HOBU","GEODETIC_CRS_MY_CRS"]],
CONVERSION["unknown",
METHOD["Mercator (variant B)",
ID["EPSG",9805]],
PARAMETER["Latitude of 1st standard parallel",5,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8823]],
PARAMETER["Longitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8802]],
PARAMETER["False easting",0,
LENGTHUNIT["metre",1],
ID["EPSG",8806]],
PARAMETER["False northing",0,
LENGTHUNIT["metre",1],
ID["EPSG",8807]]],
CS[Cartesian,2],
AXIS["(E)",east,
ORDER[1],
LENGTHUNIT["metre",1]],
AXIS["(N)",north,
ORDER[2],
LENGTHUNIT["metre",1]],
ID["HOBU","MY_CRS"]]
5. Get the WKT representation of EPSG:25832 in the WKT1:GDAL output
format and on a single line
projinfo -o WKT1:GDAL --single-line EPSG:25832
Output:
WKT1:GDAL string:
PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","25832"]]
SEE ALSO
cs2cs(1), cct(1), geod(1), gie(1), proj(1), projsync(1)
BUGS
A list of known bugs can be found at
https://github.com/OSGeo/PROJ/issues where new bug reports can be sub-
mitted to.
HOME PAGE
https://proj.org/
AUTHOR
Even Rouault
COPYRIGHT
1983-2021
8.2.1 Jan 1, 2022 PROJINFO(1)
Generated by dwww version 1.14 on Sat Jun 13 12:06:12 CEST 2026.