Возможный дубликат:
Самый быстрый поиск расстояния по широте / долготе?
У меня есть таблица местоположений, которая состоит из всех местоположений с их значениями широты и логарифма. Я получаю конкретные места lat. LOGN. и радиус. Теперь я хочу найти все рекодеры в этом радиусе и для этого, учитывая лат. и долго. значения. Я использую следующий запрос. Но я не уверен, дает ли он мне правильные результаты или нет.
Из данного лата и долго я обнаруживаю lat.min и max as –
$lng_min = $longitude - $radius / abs(cos(deg2rad($latitude)) * 69); $lng_max = $longitude + $radius / abs(cos(deg2rad($latitude)) * 69); $lat_min = $latitude - ($radius / 69); $lat_max = $latitude + ($radius / 69);
и затем используйте следующий запрос –
SELECT * FROM merchant_branches,locations where locations."coorX" BETWEEN $lng_min AND $lng_max AND locations."coorY" BETWEEN $lat_min AND $lat_max and merchant_branches.location_id = locations.id
где идентификатор местоположения является внешним ключом в таблице merchant_brach.
Я смущен результатами, которые я получаю. Плз помоги мне.
Благодарю.
Вы должны использовать что-то подобное, чтобы получить ближайшие результаты в определенном месте
$query = sprintf( "SELECT foo, 6371 * ACOS( Cos(RADIANS(lat)) * COS(RADIANS(%f)) * COS(RADIANS(%f) - RADIANS(lng)) + SIN(RADIANS(lat)) * SIN(RADIANS(%f)) ) * 1000 AS distance FROM `%s` ORDER BY distance", $lat, $lag, $lng, $table );
Вы должны установить $lat
, $lng
и $table
соответствии со структурой вашей таблицы и, возможно, установить предел для результата.
Вы получите подробное объяснение здесь Geo Distance Search с MySQL .