一尘不染

在“ X”公里(或英里)内查找城市

mysql

这可能不清楚,也可能不清楚,如果我不在基地或您需要更多信息,请给我评论。也许对于我想要的PHP已经有了解决方案。

我正在寻找一个函数,该函数将从经度或纬度值中增加或减去一个距离。

原因:我有一个包含所有纬度和经度的数据库,并且想要形成一个查询以提取X公里(或英里)内的所有城市。我的查询看起来像这样…

Select * From Cities Where (Longitude > X1 and Longitude < X2) And (Latitude > Y1 and Latitude < Y2)

 Where X1 = Longitude - (distance)
 Where X2 = Longitude + (distance)

 Where Y1 = Latitude - (distance)
 Where Y2 = Latitude + (distance)

我正在使用MySql数据库使用PHP。

也欢迎任何建议!:)


阅读 241

收藏
2020-05-17

共1个答案

一尘不染

这是一个MySQL查询,可以完全满足您的要求。请记住,像这样的事情通常是近似值,因为地球不是完美的球形,也不考虑山脉,丘陵,山谷等。我们在带有PHP和MySQL的AcademicHomes.com上使用此代码,它返回$内的记录$ latitude,$ longitude的半径英里。

$res = mysql_query("SELECT
    * 
FROM
    your_table
WHERE
    (
        (69.1 * (latitude - " . $latitude . ")) * 
        (69.1 * (latitude - " . $latitude . "))
    ) + ( 
        (69.1 * (longitude - " . $longitude . ") * COS(" . $latitude . " / 57.3)) * 
        (69.1 * (longitude - " . $longitude . ") * COS(" . $latitude . " / 57.3))
    ) < " . pow($radius, 2) . " 
ORDER BY 
    (
        (69.1 * (latitude - " . $latitude . ")) * 
        (69.1 * (latitude - " . $latitude . "))
    ) + ( 
        (69.1 * (longitude - " . $longitude . ") * COS(" . $latitude . " / 57.3)) * 
        (69.1 * (longitude - " . $longitude . ") * COS(" . $latitude . " / 57.3))
    ) ASC");
2020-05-17