Может ли MySql определить "направление" между двумя записями с широтой и долготой

Я пытаюсь найти / сохранить "азимут" улиц в моей таблице. Я могу предоставить для каждой улицы первый адрес здания, широту и долготу, и то же самое для последнего здания. Может ли MySql каким-то образом обработать компасный подшипник?

1 ответ

Решение

Здесь хранится функция, которая вычисляет начальный курс компаса (также известный навигаторам как прямой азимут) для перемещения из одной точки (lat1,lon1) в другой момент (lat2, lon2) на (предполагаемом сферическом) земном шаре.

Он основан на формулах на этой веб-странице. http://www.movable-type.co.uk/scripts/latlong.html

DELIMITER $$

DROP FUNCTION IF EXISTS `initial_bearing`$$

CREATE FUNCTION `initial_bearing`(
        lat1 DOUBLE, lon1 DOUBLE, 
        lat2 DOUBLE, lon2 DOUBLE
     ) RETURNS DOUBLE
    NO SQL
    DETERMINISTIC
    COMMENT 'Returns the initial bearing, in degrees, to follow the great circle route
             from point (lat1,lon1), to point (lat2,lon2)'
    BEGIN

    RETURN (360.0 + 
      DEGREES(ATAN2(
       SIN(RADIANS(lon2-lon1))*COS(RADIANS(lat2)),
       COS(RADIANS(lat1))*SIN(RADIANS(lat2))-SIN(RADIANS(lat1))*COS(RADIANS(lat2))*
            COS(RADIANS(lon2-lon1))
      ))
     ) % 360.0;
END$$

DELIMITER ;

Если у вас есть таблица, содержащая столбцы типа FLOAT с именем lat1,lon1,lat2, lon2,bearingВы можете использовать эту функцию, чтобы установить bearing столбец от других с этим запросом.

UPDATE table name SET bearing = initial_bearing(lat1,lon1,lat2,lon2)

Этот запрос, в котором отсутствует предложение WHERE, обновит каждую строку таблицы.

Другие вопросы по тегам