Problema directo-inverso de la Geodesia con PostGIS

Con la incorporación de los métodos ST_Project y ST_Azimuth más el ya estudiado ST_Distance es posible resolver el problema directo e inverso de la Geodesia de forma sencilla con PostGIS.

With the incorporation of the ST_Project and ST_Azimuth methods plus the already studied ST_Distance it is possible to solve the direct and inverse Geodesy problem in a simple way with PostGIS.

A partir de la versión 2.2.-2.4, PostGIS utiliza la biblioteca GeographicLib [1]  para los cálculos sobre el esferoide en algunos de sus métodos como: ST_Area, ST_Project, ST_Azimuth, ST_Distance, etc. Esta biblioteca aporta más precisión y fiabilidad a PostGIS en este tipo de cálculos sobre el esferoide.

As of version 2.2.-2.4, PostGIS uses the GeographicLib library [1] for calculations on the spheroid in some of its methods such as ST_Area, ST_Project, ST_Azimuth, ST_Distance, etc. This library provides more precision and reliability to PostGIS in this type of calculations on the spheroid.

Resuelve el problema directo de la Geodesia. A partir de un punto A de coordenadas Longitud = 40.5º y Latitud = -60.4º en el esferoide WGS84, calcula las coordenadas de un punto B situado a 500000 m de distancia del A y con un azimut (AB) de 24.6º.

Solve the direct problem of Geodesy. From a point A of coordinates Longitude = 40.5º and Latitude = -60.4º on the spheroid WGS84, calculate the coordinates of a point B located at 500000m distance from A and with an azimuth (AB) of 24.6º.

s1=# select st_astext(st_project ('SRID=4326;POINT (-60.4 40.5)'::geography, 500000, radians (24.6)));
-----------------------------------------
 POINT(-57.78175880527 44.5639942127339)

 

El problema inverso de la geodesia vendría dado por el cálculo del azimut (AB y BA) y la distancia sobre el esferoide entre dos puntos A y B.

The inverse problem of geodesy would be given by the calculation of the azimuth (AB and BA) and the distance on the spheroid between two points A and B.

s1=# select st_distance (g1, g2),
       degrees(st_azimuth (g1,g2)) azab, degrees(st_azimuth (g2,g1)) azba 
  from (select
    'SRID=4326;POINT (-60.4 40.5)'::geography as g1,
    'SRID=4326;POINT (-57.78175880527 44.5639942127339)'::geography as g2
  ) as tabla;
 st_distance |     dazab         |      azba
-------------+------------------+-------------------
      500000 | 24.5999999999998 | -153.628779967326

 

[1] La biblioteca GeographicLib ( https://geographiclib.sourceforge.io/ ) implementa cálculos fiables sobre el esferoide. El autor Charles Karney aporta versiones en C, Python, Java, Matlab, etc. así como ejemplos y una buena documentación. Además el sitio web incorpora herramientas online como una muy buena calculadora geodésica: https://geographiclib.sourceforge.io/cgi-bin/GeoConvert

 [1] The GeographicLib library (https://geographiclib.sourceforge.io/) implements reliable calculations on the spheroid. The author Charles Karney provides versions in C, Python, Java, Matlab, etc. as well as examples and good documentation. In addition, the website incorporates online tools such as a very good geodetic calculator: https://geographiclib.sourceforge.io/cgi-bin/GeoConvert

Este artículo ha sido extraido de libro del cual soy autor: PostGIS: Análisis Espacial Avanzado