【问题标题】:Fetch records with 10km of distance in MYSQL在MYSQL中获取10km距离的记录
【发布时间】:2017-04-29 08:06:58
【问题描述】:

我在 MYSQL 中有表以及 lat & lon 值。

我想在当前纬度和经度的上下文中获取半径 10 公里内的用户。

我正在尝试以下查询,但它给了我空的输出。

SELECT
`id`,
`name`,
ACOS( SIN( RADIANS( `latitude` ) ) * SIN( RADIANS( $fLat ) ) + COS( RADIANS( `latitude` ) )
* COS( RADIANS( $fLat )) * COS( RADIANS( `longitude` ) - RADIANS( $fLon )) ) * 6380 AS `distance`
FROM `users`
WHERE
ACOS( SIN( RADIANS( `latitude` ) ) * SIN( RADIANS( $fLat ) ) + COS( RADIANS( `latitude` ) )
* COS( RADIANS( $fLat )) * COS( RADIANS( `longitude` ) - RADIANS( $fLon )) ) * 6380 < 10
ORDER BY `distance`

其中纬度和经度是列名,$fLat 和 $fLon 是当前的纬度和经度值。

【问题讨论】:

  • 你可以尝试在php中进行计算
  • 对一个距离 >= 10 和几个小于 10 的测试数据库进行一些测试。使用网络上的距离计算器来获得正确的距离。与没有 where 子句的 SQL 进行比较。找出问题所在。
  • 我很确定 6380 是错误的因素。关注 [latitude-longitude] 标签,了解有关该主题的许多讨论,以及许多公式(其中大部分是正确的)。

标签: mysql latitude-longitude


【解决方案1】:

使用此查询您的问题将得到解决:

SELECT `id`, `name`, `phone`, `latitude`, `longitude`, SQRT( POW(69.1 * (`latitude` - 24.900363), 2) + POW(69.1 * (67.099760 - `longitude`) * COS(`latitude` / 57.3), 2))
AS `distance`
FROM `users` HAVING `distance` < 25
ORDER BY `distance`

【讨论】:

  • 您好,欢迎来到 Stackoverflow,感谢您的回答!但是,恐怕您的答案格式不正确,使代码几乎无法阅读。您能否请edit您的问题并在您的代码周围包含```标签以将其格式化为代码以使其更易读?此外,仅代码答案不是最佳实践,您能否还包括一个简短的解释,说明您解决了什么问题以及您是如何解决的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多