загрузить координаты из базы данных, которые находятся в пределах карты - PullRequest
2 голосов
/ 27 октября 2011

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

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

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

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

1 Ответ

3 голосов
/ 30 октября 2011

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

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

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

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

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

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

...