MySql可以确定'承载'在纬度和经度的两个记录之间

时间:2014-06-07 17:18:51

标签: mysql gis latitude-longitude bearing

我正在努力寻找/存储'轴承'我有一张桌子上的街道。我可以为每条街道提供第一个建筑地址latiutude和经度,并为最后一个建筑物提供相同的服务。 MySql可以用某种方式处理指南针吗?

1 个答案:

答案 0 :(得分:3)

这是一个存储函数,用于计算初始罗盘方向(导航器也称为前向方位角),以便从(假定的球形)球体上的一个点(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 ;

如果您有一个包含名为lat1lon1lat2lon2bearing的FLOAT类型列的表格,您可以使用此功能使用此查询设置其他列的bearing列。

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

此查询缺少WHERE子句,将更新表的每一行。