El módulo earthdistance proporciona dos enfoques diferentes
para calcular distancias de círculo máximo en la superficie de la Tierra. El que se
describe primero depende del módulo cube.
El segundo se basa en el tipo de datos incorporado point,
utilizando la longitud y la latitud para las coordenadas.
En este módulo, se asume que la Tierra es perfectamente esférica. (Si eso es demasiado inexacto para ti, es posible que desees consultar el proyecto PostGIS).
El módulo cube debe estar instalado
antes de que se pueda instalar earthdistance
(aunque puedes usar la opción CASCADE
de CREATE EXTENSION para instalar ambos en un solo comando).
Se recomienda encarecidamente que earthdistance
y cube se instalen en el mismo esquema, y que
ese esquema sea uno para el cual no se haya otorgado ni se otorgue el
privilegio CREATE a ningún usuario no confiable.
De lo contrario, existen riesgos de seguridad en el momento de la instalación
si el esquema de earthdistance contiene objetos definidos
por un usuario hostil.
Además, al usar las funciones de earthdistance
después de la instalación, la ruta de búsqueda (search path) completa debe
contener únicamente esquemas confiables.
Los datos se almacenan en cubos que son puntos (ambas esquinas son iguales) utilizando 3
coordenadas que representan la distancia x, y, y z desde el centro de la
Tierra. Se proporciona un dominio
earth sobre el tipo cube, el cual
incluye comprobaciones de restricciones de que el valor cumple con estas restricciones y
está razonablemente cerca de la superficie real de la Tierra.
El radio de la Tierra se obtiene de la función earth().
Se expresa en metros. Pero al cambiar esta única función, puedes modificar
el módulo para usar otras unidades, o para usar un valor de radio diferente
que consideres más apropiado.
Este paquete también tiene aplicaciones en bases de datos astronómicas.
Los astrónomos probablemente querrán cambiar earth() para que devuelva un
radio de 180/pi() para que las distancias estén en grados.
Se proporcionan funciones para admitir la entrada en latitud y longitud (en grados), para admitir la salida de latitud y longitud, para calcular la distancia de círculo máximo entre dos puntos y para especificar fácilmente una caja delimitadora (bounding box) utilizable para búsquedas de índices.
Las funciones proporcionadas se muestran en la Table F.4.
Table F.4. Funciones de earthdistance basadas en Cube
La segunda parte del módulo se basa en representar las ubicaciones de la Tierra como
valores de tipo point, en los que se considera que la primera componente
representa la longitud en grados y la segunda componente representa la latitud en
grados. Los puntos se toman como (longitud, latitud) y no al revés porque la longitud
está más cerca de la idea intuitiva del eje x y la latitud del eje y.
Se proporciona un único operador, mostrado en la Table F.5.
Table F.5. Operadores de earthdistance basados en puntos
Operador Descripción |
|---|
Calcula la distancia en millas terrestres (statute miles) entre dos puntos en la superficie de la Tierra. |
Ten en cuenta que, a diferencia de la parte basada en cube del módulo,
las unidades están fijas (hardwired) aquí: cambiar la función earth()
no afectará los resultados de este operador.
Una desventaja de la representación de longitud/latitud es que
debes tener cuidado con las condiciones límite cerca de los polos
y cerca de +/- 180 grados de longitud. La representación basada en
cube evita estas discontinuidades.