mysql - 在MySQL中查询经纬度

标签 mysql geolocation geospatial geo

在询问具体的代码示例之前,我只是想问一下是否可以进行类似以下伪代码的查询:

从 lat/lon = -在某个 lat/lon 点的 x 英里范围内的表中选择项目-

这可行吗?还是我必须跳过一些箍? 任何可以推荐的好方法都会很棒!

最佳答案

您应该搜索 Haversine 公式,但一个好的开始可能是:

引用第一个网址:

下面的 SQL 语句将找到距离 37, -122 坐标 25 英里半径范围内最近的 20 个位置。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅询问距离值小于 25 的行,按距离对整个查询进行排序,并将其限制为 20 个结果。要按公里而不是英里搜索,请将 3959 替换为 6371。

SELECT
    id,
    ( 3959
      * acos( cos( radians(37) )
              * cos(  radians( lat )   )
              * cos(  radians( lng ) - radians(-122) )
            + sin( radians(37) )
              * sin( radians( lat ) )
            )
    )
    AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;

关于mysql - 在MySQL中查询经纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4687312/

相关文章:

mysql - 在mysql中合并2个表

mysql - 导入数据库备份返回#1064

mysql - 如何将多个列与MySql中的其他表进行比较

php - 使用 PHP HTML 表单的 MySQL 表更新不起作用

javascript - 使用 Javascript 地理定位 API,语法错误 : Unexpected Identifier in Chrome's Javascript console

MongoDB 'unable to find index for $geoNear query'

python - 转换 osmnx 投影 map 的经纬度坐标

google-maps - 获取 Google Maps JavaScript API v3 中的当前位置并在无需用户交互的情况下获取关注点

mysql - 为什么我不能插入到MySQL?

entity-framework - DbGeography 多边形获得点数