【问题标题】:How to retrieve nearest data from mysql using GPS coordinates? [duplicate]如何使用 GPS 坐标从 mysql 中检索最近的数据? [复制]
【发布时间】:2013-03-17 13:08:56
【问题描述】:

我正在使用这个 SQL 查询来获取最接近 GPS 坐标的数据。

SELECT geo_latitude, geo_longitude, geo_name, geo_country_code AS country, 
  (DEGREES(
    ACOS(
      SIN(RADIANS(47.470779)) * SIN(RADIANS(geo_latitude)) + 
      COS(RADIANS(47.470779)) * COS(RADIANS(geo_latitude)) * 
      COS(RADIANS(-87.890699 - geo_longitude))
    ) 
  ) * 60 * 1.1515)
  AS distance FROM `MyDatabase`.`allCountries` ORDER BY distance ASC LIMIT 20 ;

此查询检索所有数据,而不考虑距离。我希望它只显示 10 英里半径内的数据。我怎样才能做到这一点?

【问题讨论】:

  • 什么距离给你?以英里为单位的距离?

标签: php jquery mysql geospatial


【解决方案1】:

我找到了两种方法。一种方法是在“where”部分使用大量数学进行直接 SQL 查询,就像您为 SQL 的 AS distance 部分标记的一样。本质上 - 概念上 - '距离

但是,我发现这会减慢我的请求速度......所以我所做的另外就是从数据库中拉出正方形而不是圆形。简单地说:找出“西/北/东/南十英里”的坐标,然后输入WHERE geo_latitude < X1 AND geo_latitude > x2 AND geo_longitude < x3 AND geo_longitude > x4 对我返回的内容进行严格限制。然后,如果你真的需要那么精确,只显示if( result.distance < 10 ){ 来剪掉角落

或者换一种说法:

x1 = Coords + 10 miles north  
x2 = Coords + 10 miles south  
x3 = Coords + 10 miles east  
x4 = Coords + 10 miles west  

无论你用什么方法来表示“北 10 英里”,然后用它从中心点拉出一个北、南、西和东 10 英里的“正方形”。只要您的 geo_latitudegeo_longitude 列被索引,这应该是一个快速的数据库调用。

【讨论】:

  • 我能理解第一个想法!但是你说的那个 x1,x2,x3,x4 是什么意思? : 狼人乔
  • 我已经修改了答案。我希望这有助于澄清事情?
  • 你如何计算 x1 = 坐标 + 10 英里北
  • @qub1n 原始帖子有一个可以用来计算基于纬度/经度的距离的公式。
  • @WolfmanJoe:原始方程在没有任何知识的情况下比较两个/几个 gps 点,结果数字是多少英里。我只是问,如何实现英里/公里到那个方程。
猜你喜欢
  • 1970-01-01
  • 2018-02-06
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
相关资源
最近更新 更多