summaryrefslogtreecommitdiff
path: root/doc/src/sgml/earthdistance.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/earthdistance.sgml')
-rw-r--r--doc/src/sgml/earthdistance.sgml133
1 files changed, 133 insertions, 0 deletions
diff --git a/doc/src/sgml/earthdistance.sgml b/doc/src/sgml/earthdistance.sgml
new file mode 100644
index 0000000000..2d08bb829d
--- /dev/null
+++ b/doc/src/sgml/earthdistance.sgml
@@ -0,0 +1,133 @@
+<sect1 id="earthdistance">
+ <title>earthdistance</title>
+
+ <indexterm zone="earthdistance">
+ <primary>earthdistance</primary>
+ </indexterm>
+
+ <para>
+ This module contains two different approaches to calculating
+ great circle distances on the surface of the Earth. The one described
+ first depends on the contrib/cube package (which MUST be installed before
+ earthdistance is installed). The second one is based on the point
+ datatype using latitude and longitude for the coordinates. The install
+ script makes the defined functions executable by anyone.
+ </para>
+ <para>
+ A spherical model of the Earth is used.
+ </para>
+ <para>
+ Data is stored in cubes that are points (both corners are the same) using 3
+ coordinates representing the distance from the center of the Earth.
+ </para>
+ <para>
+ The radius of the Earth is obtained from the earth() function. It is
+ given in meters. But by changing this one function you can change it
+ to use some other units or to use a different value of the radius
+ that you feel is more appropiate.
+ </para>
+ <para>
+ This package also has applications to astronomical databases as well.
+ Astronomers will probably want to change earth() to return a radius of
+ 180/pi() so that distances are in degrees.
+ </para>
+ <para>
+ Functions are provided to allow for input in latitude and longitude (in
+ degrees), to allow for output of latitude and longitude, to calculate
+ the great circle distance between two points and to easily specify a
+ bounding box usable for index searches.
+ </para>
+ <para>
+ The functions are all 'sql' functions. If you want to make these functions
+ executable by other people you will also have to make the referenced
+ cube functions executable. cube(text), cube(float8), cube(cube,float8),
+ cube_distance(cube,cube), cube_ll_coord(cube,int) and
+ cube_enlarge(cube,float8,int) are used indirectly by the earth distance
+ functions. is_point(cube) and cube_dim(cube) are used in constraints for data
+ in domain earth. cube_ur_coord(cube,int) is used in the regression tests and
+ might be useful for looking at bounding box coordinates in user applications.
+ </para>
+ <para>
+ A domain of type cube named earth is defined.
+ There are constraints on it defined to make sure the cube is a point,
+ that it does not have more than 3 dimensions and that it is very near
+ the surface of a sphere centered about the origin with the radius of
+ the Earth.
+ </para>
+ <para>
+ The following functions are provided:
+ </para>
+
+ <table id="earthdistance-functions">
+ <title>EarthDistance functions</title>
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><literal>earth()</literal></entry>
+ <entry>returns the radius of the Earth in meters.</entry>
+ </row>
+ <row>
+ <entry><literal>sec_to_gc(float8)</literal></entry>
+ <entry>converts the normal straight line
+ (secant) distance between between two points on the surface of the Earth
+ to the great circle distance between them.
+ </entry>
+ </row>
+ <row>
+ <entry><literal>gc_to_sec(float8)</literal></entry>
+ <entry>Converts the great circle distance
+ between two points on the surface of the Earth to the normal straight line
+ (secant) distance between them.
+ </entry>
+ </row>
+ <row>
+ <entry><literal>ll_to_earth(float8, float8)</literal></entry>
+ <entry>Returns the location of a point on the surface of the Earth given
+ its latitude (argument 1) and longitude (argument 2) in degrees.
+ </entry>
+ </row>
+ <row>
+ <entry><literal>latitude(earth)</literal></entry>
+ <entry>Returns the latitude in degrees of a point on the surface of the
+ Earth.
+ </entry>
+ </row>
+ <row>
+ <entry><literal>longitude(earth)</literal></entry>
+ <entry>Returns the longitude in degrees of a point on the surface of the
+ Earth.
+ </entry>
+ </row>
+ <row>
+ <entry><literal>earth_distance(earth, earth)</literal></entry>
+ <entry>Returns the great circle distance between two points on the
+ surface of the Earth.
+ </entry>
+ </row>
+ <row>
+ <entry><literal>earth_box(earth, float8)</literal></entry>
+ <entry>Returns a box suitable for an indexed search using the cube @>
+ operator for points within a given great circle distance of a location.
+ Some points in this box are further than the specified great circle
+ distance from the location so a second check using earth_distance
+ should be made at the same time.
+ </entry>
+ </row>
+ <row>
+ <entry><literal><@></literal> operator</entry>
+ <entry>gives the distance in statute miles between
+ two points on the Earth's surface. Coordinates are in degrees. Points are
+ taken as (longitude, latitude) and not vice versa as longitude is closer
+ to the intuitive idea of x-axis and latitude to y-axis.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <para>
+ One advantage of using cube representation over a point using latitude and
+ longitude for coordinates, is that you don't have to worry about special
+ conditions at +/- 180 degrees of longitude or near the poles.
+ </para>
+</sect1>
+