Needed to buffer a polygon (rectangle) that was listed in lat/lng (4326) projection to world mercator (3857) by a defined limit 10KM.  Problem is that 4326 is expecting decimal degrees 3857 is expecting meters.  However PostGIS understands both and has functions to convert between the two.

In this case I have the following coordinates that define the bounding box

(-179,1)
(-179,65)
(-103,65)
(-103,1)

Remember that PostGIS expects that the coordinates are listed as (longitude, latitude) when using WKT as the input format.

select st_astext(ST_Transform(st_expand(ST_Transform(ST_MakePolygon(ST_GeomFromText('LINESTRING(-179 1,-179 65 ,-103 65 ,-103 1 , -179 1)', 4326)), 3857), 10000), 4326));

Here I add the first point again at the end to make sure the polygon is closed.

  • Create the geometry from the points (as a linestring) with SRID of 4326
  • Turn the geometry into a  Polygon
  • Transform the polygon from 4326 to 3857
  • Expand the polygon by 10000 meters (using the unit of reference of the projection)
  • Transform the polygon back to 4326
  • Print out the polygon as WKT

The results will look like this

POLYGON((-179.089831528412 0.910180961305166,-179.089831528412 65.0379374814058,-102.910168471588 65.0379374814058,-102.910168471588 0.910180961305166,-179.089831528412 0.910180961305166))