For the definition of your ellipse, you will need
- The center longitude and latitude
- The length of the semi-major axis and semi-minor axis, in units of the spatial reference system
- The angle of rotation of your ellipse, in radians
To transform degrees to radians, remember that pi radians = 180°
- your angle in radians = (your angle in degree)*pi/180
For the spatial reference system we are going to use the EPSG:4326 lat/lon grid. To convert meters to units of this spatial reference system, I use the quick and dirty method from this GIS Stack Exchange post:
- 1 degree of latitude ≃ 111.111 km | that’s your y axis
- 1 degree of longitude ≃ 111,111 * cos(latitude) | that’s your x axis
The Query
Here is how a SELECT query looks like if you want to get an ellipse
SELECT ST_Translate( ST_Rotate( ST_Scale( ST_Buffer( ST_SetSRID(ST_Point(0,0), 4326), 1.0), 2, 1), 45*pi()/180), -73.4, 45.4 )
And this is the output you would get with PgAdmin
Explanation
- Take a point at (0,0) ST_Point(0,0)
- Set it to WGS84 (SRID 4326) ST_SetSRID(point, 4326)
- Add a buffer to make that point a circle, here I’ve added a buffer of 1 degree ST_Buffer(point, 1.0)
- Scale the circle differently in x and y to make it an ellipse ST_Scale(circle, 2, 1)
- Rotate your ellipse by the angle, here I am rotating by 45 degrees and turning it into radians ST_Rotate(ellipse, 45*pi()/180)
- Translate your ellipse to your its center in latitude/longitude ST_Translate(ellipse, -73.4, 45.4)