Google maps - Ближайшие позиции - PullRequest
1 голос
/ 30 августа 2010

На моем сайте участники отмечают положение фотографии в Google maps API. Долгота и широта сохраняются в базе данных (SQL).

Кто-нибудь знает, как найти отмеченные фотографии, которые находятся в радиусе 100 км от отмеченной фотографии?

Допустим, широта и долгота равны 46.03765154061627 | +14,5404052734375. Есть ли математическая формула, которая проверяет положение радиуса в 100 км или каким-либо другим способом?

Спасибо!

Ответы [ 3 ]

1 голос
/ 30 августа 2010

Вы можете рассчитать расстояние по большому кругу между двумя точками. К счастью, это относительно легко с формулой haversine , предполагающей сферическое представление Земли. Вы можете прочитать далее и проверить реализацию JavaScript на Рассчитать расстояние, направление и многое другое между точками широты / долготы от Chris Veness.

Если у вас будет только несколько фотографий, вы можете просто рассчитать расстояние по большому кругу от отправленной пользователем точки до каждой точки фотографии. Затем просто отсортируйте список результатов по расстоянию и отфильтруйте только фотографии с расстоянием ниже порога в 100 км.

Однако, если у вас будет много фотографий, вам, вероятно, следует подумать об их фильтрации из базы данных. Вы можете использовать базу данных с возможностями геопространственной индексации . Например, MySQL , PostgreSQL и SQL Server 2008 имеют геопространственные функции (изначально или с помощью расширений), которые включают пространственную индексацию и реализации haversine формула.

0 голосов
/ 30 августа 2010

определить круг с радиусом 100 км может быть немного сложным (расчет большого круга, расстояние между двумя точками и т. Д.) ... проще определить "квадратную форму" длиной 100 км (или 200 км) с вашей точкой (M) посередине:

не будучи слишком научным, принимая

  • Земля - ​​это сфера (я знаю, что это не так, но ...)
  • длина окружности в экваторе составляет ок. 40 000 км - таким образом, участок в 100 км (долготы) эквивалентен 0,9 градусам угла
  • пренебрегая тем фактом, что для широты это меняется по мере приближения к полюсам
  • округление от 0,9 до 1 градуса

Можно сказать, что вы хотите искать изображения в области, где их координаты изображения (P) соответствуют критериям

lon(M)-1 <= lon(P) <= lon(M)+1

lat(M)-1 <= lat(P) <= lat(M)+1

(все в градусах). Я думаю, что для веб-службы это достаточно точно и очень просто реализовать.

0 голосов
/ 30 августа 2010

Google Maps API включает методы для обработки координат широты и долготы. Если вы имеете дело с небольшим количеством координат, было бы легко использовать его класс GLatLng и вызвать метод distanceFrom .

Вы также можете использовать GLatLngBounds , который предназначен для определения, находятся ли определенные координаты в пределах определенной прямоугольной границы.

...