2013-03-27 3 views
1

Я использую этот SQL-запрос для получения данных, ближайших к GPS-координатам.Как получить ближайшие данные из mysql с помощью 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 миль. Как я могу достичь этого?

+0

какое расстояние дает вам? расстояние на километры? –

ответ

2

Есть два пути, которые я нашел. Один из способов - сделать прямой 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_latitude и geo_longitude, это должен быть быстрый вызов базы данных.

+0

Я мог понять первую идею !!! но ват у и означает, что x1, x2, x3, x4 в этой секунде? : wolfman joe –

+0

Я изменил ответ. Надеюсь, это поможет прояснить ситуацию? –

+0

И как вы вычисляете x1 = Коорды + 10 миль к северу – qub1n

Смежные вопросы