6. Functions

The functions described below are implemented without having an operator. If you are missing some functions, see Section 5 and use the operators.

6.1. Area function

The area function returns the area of a spherical object in square radians. Supported data types are: scircle, spolygon (if the polygon is convex), and sbox.

Example 36. Area of a spherical circle as a multiple of π


sql> SELECT area( scircle '<(0d,90d),60d>' ) / pi() AS area;
 area
------
 1
(1 row)
              

6.2. spoint functions

6.2.1. Longitude and latitude

The functions

long(spoint p);

lat(spoint p);

returns the longitude or latitude value of a spherical position p in radians.

Example 37. Get the longitude and latitude of a spherical point in degrees


sql> SELECT long ( spoint '(10d,20d)' ) * 180.0 / pi() AS longitude;
 longitude
------------
 10
(1 row)

sql> SELECT lat ( spoint '(10d,20d)' ) * 180.0 / pi() AS latitude;
 latitude
----------
 20
(1 row)
              

6.2.2. Cartesian coordinates

The functions

x(spoint p);

y(spoint p);

z(spoint p);

return the Cartesian x, y or z value of a spherical position p. The returned values are always between -1.0 and +1.0.

Example 38. Get the Cartesian z-value of a spherical point


sql> SELECT z ( spoint '(10d,-90d)' ) AS z;
 z
----
 -1
(1 row)
              

You can get a float8 array of Cartesian values using the function

xyz(spoint p);

Example 39. Get the Cartesian values of a spherical point


sql> SELECT xyz ( spoint '(0d,0d)' ) AS cart;
  cart
---------
 {1,0,0}
(1 row)
              

6.3. strans functions

6.3.1. Converting to ZXZ

Using the function strans_zxz(strans), you can convert an Euler transformation to ZXZ axes transformation.

Example 40. Change the transformation axes to ZXZ

Convert the transformation strans '20d, -270d, 70.5d, XZY' to a ZXZ transformation.


sql> SELECT strans_zxz ( strans '20d, -270d, 70.5d, XZY' );
                  

6.3.2. Angles and axes

It is possible to get the components of an Euler transformation.

Table 4. Getting Euler transformation attributes

function description
phi first angle of a transformation
theta second angle of a transformation
psi third angle of a transformation
axes transformation axes as a three letter code

The angles will always returned as a float8 value in radians. The axes are returned as a three letter code.

Example 41. Get the second axis and its rotation angle


sql> SELECT theta( strans '20d,30d,40d,XZY' ) * 180 / pi() AS theta;
 theta
-------
 30
(1 row)
sql> SELECT substring ( axes ( strans '20d,30d,40d,XZY' ) from 2 for 1 ) AS axis;
 axis
------
  Z
(1 row)
                  

6.4. scircle functions

You can get the radius of a spherical circle in radians using the radius function. The center of the circle is available with the operator @@ (Section 5.7).

Example 42. Radius of a spherical circle in degrees


sql> SELECT 180.0 * radius( scircle '<(0d,90d),60d>' ) / pi() AS radius;
 radius
--------
     60
(1 row)
              

6.5. sellipse functions

pgSphere provides 4 functions to get the parameters of a spherical ellipse:

Table 5. Getting spherical ellipse attributes

function description
lrad the major radius of the ellipse
srad the minor radius of the ellipse
center the center of the ellipse
inc the inclination of the ellipse

To get the ellipse center, you can use the operator @@ (Section 5.7) instead of using the function center(sellipse).

Example 43. Get the minor radius of an ellipse


sql> SELECT srad ( sellipse '< { 10d, 5d }, ( 20d, 0d ), 90d >' )
        * 180.0/ pi() AS srad ;
 srad
------
  5
(1 row)
              

6.6. sline functions

6.6.1. Begin and end

To get the beginning and the end of a line, pgSphere provides two functions:

sl_beg(sline line);

sl_end(sline line);

Example 44. Get the beginning of a line


sql> SELECT sl_beg( sline '(10d, 90d, 270d, ZXZ ), 20d';
                

6.6.2. Create a meridian

You can create a meridian as a line using the function

meridian(float8 lng);

The function returns a line starting at a latitude of -90° and ending at a latitude of 90°. The line goes along the given longitude lng in radians.

Example 45. A meridian for longitude 20°


sql> SELECT set_sphere_output('DEG');
 set_sphere_output 
-------------------
 SET DEG
(1 row)

sql> SELECT meridian (20.0 *pi() / 180.0 );
             sline             
-------------------------------
 ( 270d, 90d, 20d, ZXZ ), 180d
(1 row)
                  

6.7. spath functions

6.7.1. Count of points

You can get the count of points of a spherical path using the function:

npoints(spath path);

Example 46. Count of spath's points


sql> SELECT npoints ( spath '{(0,0),(1,0)}' );
 npoints
---------
       2
 (1 row)

              

6.7.2. Positions at a path

pgSphere provides two functions to get points at a path.

spoint(spath path, int4 i);

spoint(spath path, float8 f);

The first function returns the i-th point of a path. If i is less than 1 or larger than the count of spath points, the function returns NULL. The second function does nearly the same, but does linear interpolation between edge positions.

Example 47. Get the “center” of a one segment spath


sql> SELECT spoint ( spath '{(0d,0d),(30d,0d)}', 1.5 );
  spoint
------------
 (15d , 0d)
(1 row)
              

6.8. spoly functions

6.8.1. Count of edges

Similar to an spath (Section 6.7.1), you can get the count of edges of a spherical polygon using the function:

npoints(spoly polygon);

Example 48. Count of edges of a spherical polygon


sql> SELECT npoints ( spoly '{(0,0),(1,0),(1,1)}' );
 npoints
---------
       3
 (1 row)
              

6.9. sbox functions

The functions

sw(sbox box);

ne(sbox box);

se(sbox box);

nw(sbox box);

return the corresponding southwest, northeast, southeast, or northwest edge. The returned value will be a spherical point.

Example 49. The southwest edge of a box


sql> SELECT sw ( sbox '( (0d,0d), (90d,0d) )' ) ;