загрузить координаты из базы данных, которые находятся в пределах карты

Мне нужно вернуть набор отфильтрованных записей из базы данных, координаты которых находятся в пределах текущих границ карты (map.getBounds())

В соответствии с Google Maps API v3 это можно сделать на стороне клиента, используя их API и функцию «containsLatLng (latlng: GLatLng)», но я хочу сделать эту реализацию на стороне сервера, а затем просто вернуть записи, которые находятся в этих координатах. .

Моя текущая реализация работает, если карта сосредоточена в Африке, но если карта показывает Китай и Канаду в одном и том же представлении, моя реализация не работает, потому что долгота меняется с положительной на отрицательную в Тихом океане.

Любые предложения о том, как реализовать это точно?


person byte_slave    schedule 27.10.2011    source источник
comment
Не эксперт в этом, поэтому я скорее прокомментирую, чем отвечу, проблема в том, что долгота меняется с положительной на отрицательную в Тихом океане? Тогда это сбило бы границы.   -  person Rob Haupt    schedule 27.10.2011
comment
@РобХаупт. Собственно, в этом и проблема! Я буду использовать полилинию, чтобы увидеть, действительно ли она сбрасывает границы.   -  person byte_slave    schedule 27.10.2011


Ответы (1)


В Картах Google конструктор объекта LatLngBounds берет юго-западный и северо-восточный углы прямоугольных границ.

Знание того, что одна точка является юго-западным, а не юго-восточным углом, имеет решающее значение для решения проблемы.

Если вы знаете, что одна точка является юго-западным углом, а другая — северо-восточным, то сравните долготы двух углов. Ваш алгоритм будет работать следующим образом:

  • Если долгота юго-западного угла меньше, чем долгота северо-восточного угла, то точка находится в пределах границ, если она имеет долготу между этими двумя долготами и широту между двумя широтами углов. . (Это, вероятно, то, что вы делаете для всего, поэтому это работает в Африке, где условие верно, но не в чем-то, что охватывает Тихий океан.)

  • Если долгота юго-западного угла больше, чем долгота северо-восточного угла, то ваши границы пересекают 0 долготы, и вам нужно обратить условие: точка находится в границах, если ее долгота равна не численно между долготой юго-западного угла и долготой северо-восточного угла.

Для простоты и потому, что это почти наверняка верно, я предполагаю, что у вас никогда не будет границ, охватывающих Северный полюс или Южный полюс. (В Картах Google я даже не знаю, может ли быть такая граница.)

person Trott    schedule 30.10.2011