MySQL вычисляет расстояние между всеми географическими местоположениями в результате - PullRequest
0 голосов
/ 09 ноября 2011

Я хочу вычислить расстояние между всеми географическими местоположениями (представленными как широта и долгота) в результате

таблица MySQL выглядит следующим образом:

  • Местоположение 1, Широта:x, долгота: y
  • местоположение 2, широта: a, долгота: b
  • местоположение 3, широта: c, долгота: d
  • ...

Выходными данными должно быть расстояние от Места 1 до Места 2, суммированное с расстоянием между Местом 2 и Местом 3 и т. Д.

Я знаю, как рассчитать расстояние между двумя точками, но яне знаю, как суммировать расстояния и как всегда вычислять расстояние между двумя последовательными местоположениями / строками

Спасибо за вашу помощь!

Редактировать: я планирую использовать следующую функциюрассчитать расстояние между двумя точками

CREATE FUNCTION `GeoDistance`(  
 latitude1  numeric (9,6),  
 longitude1  numeric (9,6),  
 latitude2  numeric (9,6),  
 longitude2  numeric (9,6)  
) RETURNS decimal(10,5)  
    READS SQL DATA  
BEGIN  

DECLARE  x  decimal (20,20);  
DECLARE  pi  decimal (21,20);  
SET  pi = 3.14159265358979323846;  
SET  x = sin( lat1 * pi/180 ) * sin( lat2 * pi/180 ) 
       + cos( lat1 * pi/180 ) * cos( lat2 * pi/180 ) 
       * cos( abs( (lon2 * pi/180) - (lon1 *pi/180)));  
  SET  x = acos( x );  
  RETURN ( 1.852 * 60.0 * ((x/pi)*180) );
END

1 Ответ

2 голосов
/ 09 ноября 2011

Предполагается, что таблица LOCATIONS (ID, LAT, LON), для упрощения:

SELECT SUM(SQRT(POW(A.LAT - B.LAT, 2)+POW(A.LON - B.LON, 2)))
FROM LOCATIONS A
JOIN LOCATIONS B ON (A.ID = B.ID - 1)

По сути, мы сами объединяем местоположения со смещением 1 между местоположениями (я свободно предполагаю, что идентификаторы назначаются без пробелов), затем для каждой пары точек мы вычисляем расстояние (формула довольно проста, подробно объяснил в гугле), а затем суммируйте все эти расстояния.

...