База данных запросов с условиями на отрицательной долготе - PullRequest
1 голос
/ 25 августа 2011

Небольшая проблема с Google Maps и хранением / получением координат.Я запускаю БД на MySql, где храню долготу / широту точек в 2-х отдельных полях с плавающей точкой.Я хотел бы выполнить запросы, чтобы найти точки, соответствующие границам данного объекта карты Google.

Я получаю min / max lng / lat из текущей карты Google и выполняю запрос через PHP.Все работает отлично, за исключением случаев, когда у меня есть отрицательные значения для долготы.Который не возвращает никакого результата, пока существуют значения, соответствующие минимальному / максимальному lng ... Мой запрос выглядит так:

SELECT * FROM points WHERE ((lng BETWEEN :lng_min AND :lng_max) AND (lat BETWEEN :lat_min AND :lat_max))

Я проверил каждую переменную, отправленную в запрос / сохраненную в базе данных, и каждыйодин является действительным поплавком.Это не имеет никакого смысла.Я что-то упустил?

1 Ответ

0 голосов
/ 25 августа 2011

Проблема здесь в том, что в вашем запросе отрицательное значение вызывает проблемы. Например, если lng_min <0 и lng_max> 0, вы должны получать данные, как обычно. Однако, если lng_max <0 и lng_min> 0 (это может произойти, поскольку Земля круглая и переход от -180 градусов к +180 градусам долготы находится всего в нескольких шагах), то для базы данных имеет смысл не извлекать какие-либо данные. ценности на всех. Если последнее имеет место, то вы должны предварительно проверить, имеют ли lng_max <0 и lng_min> 0, и сделать начальный сдвиг (например, (+ 180)% 360) для всех долгот в запросе. В любом случае, несколько примеров пар lng_min / lng_max, где запрос не выполняется, были бы полезны.

...