php - 使用 SQL 查询根据地理编码之间的距离选择位置

标签 php mysql sql google-maps

我有一个包含酒店信息的 SQL 数据库,其中一些是 Google 地理编码器生成的地理编码纬度/经度。

我希望能够选择(直接使用 SQL 查询)特定范围内的所有酒店。这个范围永远不会超过 50 公里,所以我不需要像这里很多答案建议的那样详细(考虑到地球曲率以及它不是一个完美的球体这一事实在我搜索的距离上不是问题)。

我认为一个简单的毕达哥拉斯公式就足够了,但我不知道纬度和经度数字代表什么(因此如何转换为米),并且我还阅读了一些针对我的问题的“简单”解决方案,其中有他们的公式和计算子午线两侧两个位置之间的距离存在问题(因为我住在伦敦,这对我来说将是一个大问题!!)

任何帮助都会很棒,谢谢!

----有用信息-----

我的数据库以以下格式存储地理编码数据:

geo_lat: 51.5033630,
geo_lon; -0.1276250

最佳答案

这是一个选择子句,会将您的距离转换为公里。从那里您可以使用 where 子句将其过滤到小于 25 公里或任何您想要的距离。如果您想要以英里为单位,只需去掉 * 1.609344 转换即可。


$latitude = [current_latitude];
$longitude = [current_longitude];

SELECT
    ((((acos(sin((".$latitude."*pi()/180)) * sin((`geo_lat`*pi()/180))+cos((".$latitude."*pi()/180)) * cos((`geo_lat`*pi()/180)) * cos(((".$longitude."- `geo_lon`)* pi()/180))))*180/pi())*60*1.1515) * 1.609344) as distance 
FROM
    [table_name]
WHERE distance 

关于php - 使用 SQL 查询根据地理编码之间的距离选择位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886213/

相关文章:

php - Symfony 中的树

mysql - mysql中group_concat列之间的关系

python3.5 + MySQLdb : 'charset' is an invalid keyword argument

使用 For 循环的 Javascript 和 PHP

java - "LIKE ?"比 LIKE '%' 更有效吗 ||?| |'%'

php - 添加多个sql查询的结果

php:删除Windows上的共享内存

sql - 根据模式获取特定字符串

c# - LINQ lambda表达式子查询查找同一表中的父记录

php - mysqli 不能与 apache 一起使用,但可以在 PHP 控制台上使用