Запросы для поиска мест в пределах заданной широты / долготы

Итак, я пытаюсь отобразить списки мест в диапазоне заданных широт и долгих. У меня нет проблем с этим:

Места в пределах одной мили (список мест ...)

Используя что-то вроде

SELECT * FROM places WHERE lat < $latmax AND lat > $latmin AND lng < $lngmax AND lng > $lngmin

Но затем я хочу перечислить места в пределах двух миль, НО не в пределах одной мили - то есть я не хочу повторять результаты из первого запрос.

Вот одна из версий того, что я пробовал:

$milesperdegree = 0.868976242 / 60.0 * 1.2;

// 1 mile -- this works
$degrees = $milesperdegree * 1;
$latmin = $lat - $degrees;
$latmax = $lat + $degrees;
$lngmin = $lng - $degrees;
$lngmax = $lng + $degrees;

$query = "SELECT * FROM places WHERE lat < $latmax AND lat > $latmin AND lng < $lngmax AND lng > $lngmin";

// 2 miles -- this doesn't work
$degrees_2 = $milesperdegree * 2;
$latmin_2 = $lat - $degrees_2;
$latmax_2 = $lat + $degrees_2;
$lngmin_2 = $lat - $degrees_2;
$lngmax_2 = $lat + $degrees_2;

$query = "SELECT * FROM places WHERE ";
$query .= "lat BETWEEN $latmax AND $latmax_2 AND lng BETWEEN $lngmax AND $lngmax_2 OR ";
$query .= "lat BETWEEN $latmin AND $latmin_2 AND lng BETWEEN $lngmin AND $lngmin_2 OR ";
$query .= "lat BETWEEN $latmax AND $latmax_2 AND lng BETWEEN $lngmin AND $lngmin_2 OR ";
$query .= "lat BETWEEN $latmin AND $latmin_2 AND lng BETWEEN $lngmax AND $lngmax_2";

Это не работает. Я предполагаю, что это просто какая-то логика, которую я не могу понять в воскресенье днем, но я, вероятно, делаю еще что-то не так. Любой вклад приветствуется.

6
задан nickfindley 27 February 2011 в 19:53
поделиться