2013-03-27 90 views
1

我正在使用此SQL查询来获取最接近GPS坐标的数据。如何使用GPS坐标从mysql中检索最近的数据?

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

+0

什么距离给你?距离以英里为单位? – 2013-03-27 12:48:53

回答

2

我找到了两种方法。一种方法是在'where'部分进行大量数学操作直接进行SQL查询,就像您为您的AS distance部分标记了SQL一样。本质上 - 在概念上 - '距离< 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列被索引,这应该是一个快速的数据库调用。

+0

我能理解第一个想法!但在那一秒,你是否认为x1,x2,x3,x4? :wolfman joe – 2013-03-27 15:42:37

+0

我修改了答案。我希望这有助于澄清事情? – 2013-03-27 16:04:22

+0

而你如何计算x1 =坐标+北方10英里 – qub1n 2013-12-29 21:28:35