PostGIS - Buffer a Polygon
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))