PostGIS ST_Distance_Spheroid или Haversine

Я использовал ST_Distance_Spheroid в PostgreSQL (с Postgis) для расчета расстояния между Уокингом и Эдинбургом следующим образом:

CREATE TABLE pointsTable (
    id serial NOT NULL,
    name varchar(255) NOT NULL,
    location Point NOT NULL,
    PRIMARY KEY (id)
);

INSERT INTO pointsTable (name, location) VALUES 
( 'Woking', '(51.3168, -0.56)' ),
( 'Edinburgh', '(55.9533, -3.1883)' );

SELECT ST_Distance_Spheroid(geometry(a.location), geometry(b.location), 'SPHEROID["WGS 84",6378137,298.257223563]')
FROM pointsTable a, pointsTable b
WHERE a.id=1 AND b.id=2;

Я получил результат 592 км (592 053,100454442 метра).

К сожалению, когда я использовал различные источники в Интернете, чтобы сделать один и тот же расчет, я постоянно получал отметку в 543 км, которая отличается на 8,2%.

К счастью, третий источник пояснил, что они использовали формулу гаверсинуса. Я не уверен в двух других источниках.

Я сделал что-то не так в своих запросах или это связано с разницей в используемых формулах? Если да, то какой расчет ближе всего к кратчайшему расстоянию, на которое может пролететь ворона, сохраняя постоянную высоту?


person Programster    schedule 22.07.2018    source источник


Ответы (1)


Вы поменяли местами широту и долготу. Если вы поставите их в правильном порядке, вы получите 544 430 м. Для вычисления расстояния используются дуги большого круга, которые являются истинным кратчайшим расстоянием между точками на сфере.

WITH src AS (
  select st_geomfromtext('POINT(-0.56 51.3168)',4326) pt1,
         st_geomfromtext('POINT(-3.1883 55.9533)',4326) pt2)
SELECT 
   ST_DistanceSpheroid(pt1, pt2, 'SPHEROID["WGS 84",6378137,298.257223563]') Dist_sphere,
   ST_Distance(pt1::geography, pt2::geography) Dist_great_circle
FROM src;

   dist_sphere    | dist_great_circle
------------------+-------------------
 544430.941199621 |   544430.94119962
(1 row)

Кстати, есть предупреждение

Подпись ST_Distance_Spheroid устарела в версии 2.2.0. Пожалуйста, используйте ST_DistanceSpheroid

person JGH    schedule 27.07.2018
comment
Это лучшее решение, на которое я мог надеяться. Меня поймали, думая, что все это широта, долгота, но, конечно, точки в формате x, y. - person Programster; 28.07.2018