mysql - 查找 'X' 公里(或英里)内的城市

标签 mysql gis coordinates distance coordinate-systems

这可能清楚也可能不清楚,如果我不对,请给我留言,或者您需要更多信息。也许已经有一个解决方案可以满足我在 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)

我在 PHP 中工作,使用 MySql 数据库。

也欢迎任何建议! :)

最佳答案

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

$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");

关于mysql - 查找 'X' 公里(或英里)内的城市,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/808963/

相关文章:

mysql - 为什么我不能用 'goapp deploy' 部署到 GAE,我找不到导入 : "github.com/go-sql-driver/mysql"

java - 将 map 集成到 java 应用程序中

python - 用pyproj坐标转换

c++ - 其他列表的每个点与列表的最近点

php - MySQL 中的 SUM 函数问题

mysql - 哪些版本的 MySQL 支持表空间创建?

iphone - 转换点 :toView: Doesn't seem to be working

java - 转换为十进制格式时出错

java - 在主 Activity 上无法在 Android 中显示弹出窗口 Android 无法在未调用 Looper.prepare() 的线程内创建处理程序

postgresql - ST_contains 花费太多时间