Найти места в пределах ограничительной рамки широта / долгота - PullRequest
2 голосов
/ 25 марта 2011

У меня есть 4 переменные:

$ southwest_lat, $ southwest_lng, $ northeast_lat, $ northeast_lng

У меня также есть таблица базы данных с полями: Имя, Широта и Долгота.

// First attempt, likely terribly wrong
$sql = "SELECT * FROM items WHERE
(Latitude >= '$southwest_lat' AND Latitude <= '$northeast_lat') AND
(Longitude >= '$southwest_lng' AND Longitude <= '$northeast_lng')";

Как мне найти элементы БД в граничной рамке, образованной координатами?

РЕДАКТИРОВАТЬ: Спасибо, ребята, исправили долготу часть запроса.

Ответы [ 3 ]

6 голосов
/ 25 марта 2011

Вы сравниваете широту и долготу в базе данных с ПРОСТО широтой представленных значений.

Кроме того, вам не нужны круглые скобки в запросе, это только делает его загроможденным и более сложным.

Вы хотите что-то вроде:

SELECT 
    *
FROM 
    items
WHERE
    Latitude >= $southwest_lat AND
    Latitude <= $northeast_lat AND
    Longitude >= $southwest_long AND
    Longitude <= $northeast_long;
3 голосов
/ 25 марта 2011

Если ваше приложение может иметь $southwest_lng> $northeast_lng (180 градусов, например, при использовании Google Maps), вы можете проверить это и использовать NOT BETWEEN $northeast_lng AND $southwest_lng в этом случае.

1 голос
/ 25 марта 2011

будет

SELECT * FROM items 
WHERE Latitude BETWEEN $southwest_lat AND $northeast_lat 
AND Longitude BETWEEN $southwest_lng AND $northeast_lng

работать лучше?

...