如何使用GPS坐标从mysql中检索最近的数据?

时间:2013-03-27 12:43:07

标签: php jquery mysql geospatial

我正在使用此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英里半径范围内显示数据。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

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

然而,我发现这减慢了我的请求...所以我所做的另外就是从数据库中取出方形而不是圆形。简单地说:弄清楚“十英里西/北/东/南”坐标,然后放入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列被编入索引,就应该是一个快速的数据库调用。

相关问题