top of page

Getting Started with PyProj in Python

  • Writer: Anvita Shrivastava
    Anvita Shrivastava
  • 14 hours ago
  • 4 min read

Accurate coordinate transformations, map projections, and spatial reference systems are critical to geospatial applications. Whether you are developing GIS software, processing satellite imagery, or creating location-based analytics, you must have some understanding of coordinate systems.


One of the most powerful libraries for this purpose is PyProj, which is based on the industry-standard library PROJ and allows developers and GIS Engineers to perform precise coordinate conversions, calculate geodetic distances, and manage CRSs (Coordinate Reference Systems) directly in Python.


PyProj in Python
PyProj in Python

What is PyProj?


The PyProj library is the Python interface to the PROJ cartographic projections and coordinate transformation software library.


With the PyProj library, developers can:


  • Convert coordinates between projected coordinate systems.

  • Convert latitude/longitude to projected coordinate systems.

  • Calculate geodesic distances

  • Manage CRS definitions

  • Perform datum transformations

  • Perform tasks related to modern geospatial workflows.


Common uses of the PyProj library include:


  • GIS (Geographical Information Systems) Software

  • Remote Sensing Software

  • Navigation Systems

  • Spatial Data Engineering

  • Climate Analysis and Environmental Applications

  • Map Creation

  • Geospatial Machine Learning Applications


Why PyProj Matters in Geospatial Engineering


Different Coordinate Systems Cannot Be Used Alternately.


GPS coordinates in WGS84 cannot directly be converted for use within a local engineering projection without first transforming. Using inaccurate CRS leads to:


  • Spatial Offsets

  • Incorrect Distance Measurements

  • Problems Rendering Maps

  • Misalignment of Data

  • Invalid Analytics


PyProj helps prevent all of these problems through the use of strong CRS Transform and Use functionality via PROJ.


Installing PyProj


You can install PyProj using pip:

pip install pyproj

For Conda users:

conda install -c conda-forge pyproj

Verify installation:

import pyprojprint(pyproj.__version__)

Importing PyProj


Start by importing the required classes:

from pyproj import CRS, Transformer, Geod

These classes provide:

  • CRS → Coordinate system definitions

  • Transformer → Coordinate conversions.

  • Geod → Geodesic calculations


Creating CRS Objects


You can create CRS definitions using EPSG codes.


Example: WGS84

from pyproj import CRScrs_wgs84 = CRS.from_epsg(4326)print(crs_wgs84)

Example: Web Mercator

crs_mercator = CRS.from_epsg(3857)print(crs_mercator)

Transforming Coordinates with PyProj


Coordinate transformation is the core feature of PyProj.


Example: Latitude/Longitude to Web Mercator

from pyproj import Transformertransformer = Transformer.from_crs(    "EPSG:4326",    "EPSG:3857",    always_xy=True)lon, lat = -74.0060, 40.7128x, y = transformer.transform(lon, lat)print(x, y)

Output:

-8238310.235647004 4970071.579142427

This converts geographic coordinates into projected Web Mercator coordinates.


Understanding the Transformation Process


The transformation pipeline mathematically converts coordinates between systems.

For Web Mercator, the projection is approximately represented as:


x=Rλx = R\lambdax=Rλ

and

y=Rln⁡(tan⁡(π4+ϕ2))y = R\ln\left(\tan\left(\frac{\pi}{4}+\frac{\phi}{2}\right)\right)y=Rln(tan(4π​+2ϕ​))


Where:

  • RRR = Earth radius

  • λ\lambdaλ = longitude in radians

  • ϕ = latitude in radians


.PyProj internally handles these complex calculations through PROJ.


Geodesic Distance Calculations


PyProj also supports highly accurate geodesic computations.


Example: Distance Between Two Coordinates

from pyproj import Geodgeod = Geod(ellps="WGS84")lon1, lat1 = -74.0060, 40.7128lon2, lat2 = -118.2437, 34.0522azimuth1, azimuth2, distance = geod.inv(    lon1, lat1,    lon2, lat2)print(distance)

Output:

3944422.231

Distance is returned in meters.


Forward Geodesic Calculations


You can also calculate destination coordinates.


Example

from pyproj import Geodgeod = Geod(ellps="WGS84")lon, lat = -74.0060, 40.7128new_lon, new_lat, _ = geod.fwd(    lon,    lat,    az=90,    dist=100000)print(new_lon, new_lat)

This computes a point 100 km east.


Working with UTM Projections


Universal Transverse Mercator (UTM) projections are widely used for engineering and surveying.


Example: Convert WGS84 to UTM

from pyproj import Transformertransformer = Transformer.from_crs(    "EPSG:4326",    "EPSG:32618",    always_xy=True)x, y = transformer.transform(-74.0060, 40.7128)print(x, y)

Advanced Transformation Pipelines

PyProj supports complex transformation pipelines.


Example

from pyproj import Transformerpipeline = """    +proj=pipeline    +step +proj=unitconvert +xy_in=deg +xy_out=rad    +step +proj=merc"""transformer = Transformer.from_pipeline(pipeline)x, y = transformer.transform(-74.0060, 40.7128)print(x, y)

This allows custom geospatial workflows.


Batch Coordinate Transformations


PyProj efficiently handles vectorized operations.


Example with NumPy

import numpy as np from pyproj import Transformer transformer = Transformer.from_crs(    "EPSG:4326",    "EPSG:3857",    always_xy=True)lons = np.array([-74.0, -118.2])lats = np.array([40.7, 34.0])x, y = transformer.transform(lons, lats)print(x)print(y)

This is significantly faster for large datasets.


Integrating PyProj with GeoPandas


PyProj integrates seamlessly with geospatial Python libraries like:



Example:

import geopandas as gpdgdf = gpd.read_file("data.geojson")gdf = gdf.to_crs(epsg=3857)

GeoPandas internally uses PyProj for CRS transformation.


Common PyProj Errors and Solutions

Invalid Projection Error

CRSError: Invalid projection

Solution:

  • Verify EPSG code

  • Ensure the PROJ database is installed correctly.


Axis Order Problems


Symptoms:

  • Coordinates appear flipped

  • Spatial offsets occur

Solution:

always_xy=True

Missing Datum Grid Files


Some transformations require external grid shift files.

Update PROJ data packages if needed.


PyProj vs Other GIS Libraries

Library

Primary Use

PyProj

CRS and transformations

GeoPandas

Vector spatial analysis

Rasterio

Raster processing

Shapely

Geometry operations

GDAL

Geospatial data conversion

PyProj specializes in coordinate mathematics and geodesy.


Real-World Use Cases


PyProj is commonly used for:


  • GPS tracking

  • Mapping for UAVs

  • Navigation for autonomous vehicles

  • Spatial ETL processes

  • Aligning satellite images

  • Modeling climate trends

  • Analyzing urban planning data.


PyProj is a required library for serious geospatial engineering work using Python. When used in conjunction with PROJ, it delivers enterprise-level coordinate conversion capabilities that can be used for both scientific research and engineering, as well as producing GIS applications.


With knowledge of:


  • Coordinate Reference System Management (CRS)

  • EPSG code systems

  • Projection transformation processes

  • Geodesic calculations

  • Vectorized service delivery


You will be able to develop high-quality, large-scale geospatial applications.


If you work as a developer in GIS, mapping, remote sensing, or spatial analysis, then you need to use PyProj as part of your implementation into the modern Python-based geospatial ecosystems.


For more information or any questions regarding the LizardTech suite of products, please don't hesitate to contact us at:



USA (HQ): (720) 702–4849


(A GeoWGS84 Corp Company)



Comments


bottom of page