---
name: "pj_init"
section: "3"
platform: "linux"
package: "libproj-dev"
version: "5.2.0-1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/pj_init"
---

# pj\_init(3)

initialize cartographic projection pj\_init\_plus - initialize cartographic projection pj\_fwd - forward cartographic projection pj\_inv - inverse cartographic projection pj\_transform - transform between coordinate systems pj\_free - de-initialize projection

## NAME

pj\_init - initialize cartographic projection\
 pj\_init\_plus - initialize cartographic projection\
 pj\_fwd - forward cartographic projection\
 pj\_inv - inverse cartographic projection\
 pj\_transform - transform between coordinate systems\
 pj\_free - de-initialize projection

## SYNOPSIS

```
#include <proj_api.h>
projPJ pj_init(int argc, char **argv)
projPJ pj_init_plus(const char *defn)
projUV pj_fwd(projUV val, projPJ proj)
projUV pj_inv(projUV val, projPJ proj)
int pj_transform(projPJ src_cs, projPJ dst_cs, long point_count,
                 int point_offset, double *x, double *y, double *z)
void pj_free(projPJ proj)
```

## DESCRIPTION

Procedure **pj\_init** selects and initializes a cartographic projection with its argument control parameters. **Argc** is the number of elements in the array of control strings **argv** that each contain individual cartographic control keyword assignments (`+` **proj** arguments). The list must contain at least the **proj=***projection* and Earth's radius or elliptical parameters. If the initialization of the projection is successful a valid address is returned otherwise a NULL value.

The **pj\_init\_plus** function operates similarly to **pj\_init** but takes a single string containing the definition, with each parameter prefixed with a plus sign.  For example "+proj=utm +zone=11 +ellps=WGS84".

Once initialization is performed either forward or inverse projections can be performed with the returned value of **pj\_init** used as the argument **proj**. The argument structure **projUV** values **u** and **v** contain respective longitude and latitude or x and y. Latitude and longitude are in radians. If a projection operation fails, both elements of **projUV** are set to HUGE\_VAL (defined in *math.h*).

**Note:** all projections have a forward mode, but some do not have an inverse projection. If the projection does not have an inverse the projPJ structure element *inv* will be NULL.

The **pj\_transform** function may be used to transform points between the two provided coordinate systems.  In addition to converting between cartographic projection coordinates and geographic coordinates, this function also takes care of datum shifts if possible between the source and destination coordinate system.  Unlike **pj\_fwd** and **pj\_inv** it is also allowable for the coordinate system definitions (**PJ \***) to be geographic coordinate systems (defined as +proj=latlong).  The **x**, **y** and **z** arrays contain the input values of the points, and are replaced with the output values.  The **point\_offset** should indicate the spacing the of **x,y,z** arrays, normally 1.  The function returns zero on success, or the error number (also in pj\_errno) on failure.

Memory associated with the projection may be freed with **pj\_free**.

## EXAMPLE

The following program reads latitude and longitude values in decimal degrees, performs Mercator projection with a Clarke 1866 ellipsoid and a 33° latitude of true scale and prints the projected cartesian values in meters:

```
#include <proj_api.h>
main(int argc, char **argv) {
	char *args[] = { "proj=merc", "ellps=clrk66", "lat_ts=33" };
	projUV p;
	projPJ pj;
	if (!(pj = pj_init(3, args)))
	   exit(1);
	while (scanf("%lf %lf", &p.v, &p.u) == 2) {
	   p.u *= DEG_TO_RAD;
	   p.v *= DEG_TO_RAD;
	   p = pj_fwd(p, pj);
	   printf("%.2f\t%.2f\n", p.u, p.v);
	}
	exit(0);
}
```

## LIBRARY

libproj.a - library of projections and support procedures

## SEE ALSO

**https://github.com/OSGeo/proj.4/wiki/ProjAPI, [proj(1)](/proj/1.md),**\
 *Cartographic Projection Procedures for the UNIX Environment—A User's Manual,* (Evenden, 1990, Open-file report 90-284).

## BUGS

A list of known bugs can found at https://github.com/OSGeo/proj.4/issues where new bug reports can be submitted too.

## HOME PAGE

https://proj4.org/
