代码之家  ›  专栏  ›  技术社区  ›  Centurion

基于经纬度从mysql获取结果

  •  11
  • Centurion  · 技术社区  · 15 年前

    我有一个mysql数据库和两个表,比如说clients和schools。现在每个表都有纬度和经度列。我需要做一个选择,例如从第二个表中,学校在第一个表中给定半径的一个记录中。应根据纬度和经度进行计算。 PS:我在用PHP。

    1 回复  |  直到 11 年前
        1
  •  10
  •   Vitalii Fedorenko    13 年前

    可以使用 Spherical law of cosines :

    SELECT DEGREES(ACOS(SIN(RADIANS(clients.latitude)) * SIN(RADIANS(schools.latitude)) + 
                        COS(RADIANS(clients.latitude)) * COS(RADIANS(schools.latitude)) 
                                                       * COS(RADIANS(clients.longitude 
                                                                   – schools.longitude)))) 
           * 60 * 1.1515 * 1.609344 AS distance
    FROM clients, schools HAVING distance < $radius
    

    RADIANS(X) -度到弧度
    ACOS(X) -X的弧余弦,即余弦为X的值
    DEGREES(X)

    60分钟一度
    1.1515英里 nautical mile
    1.609344公里一英里