2010-08-30 2 views
1

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

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

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

Спасибо!

ответ

1

Вы можете вычислить great-circle distance между двумя точками. К счастью, это относительно легко с haversine formula, предполагая сферическое представление земли. Вы можете прочитать далее и проверить реализацию JavaScript на Calculate distance, bearing and more between Latitude/Longitude points Крисом Винессом.

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

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

0

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

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

+0

Обратите внимание, что метод 'distanceFrom()' доступен только в API v2, который теперь устарел. API v3 не реализует эквивалентный метод и должен сам реализовать его: http://code.google.ком/APIs/карты/документы/JavaScript/reference.html # LatLng. К счастью, это непростая реализация. –

0

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

, не будучи слишком научной, asuming

  • Земля является сферой (я знаю, что это не так, но ...)
  • окружность на aequator является ca. 40.000km - так 100ая часть (по долготе) является aequivalent до 0,9 угловых градусов
  • пренебрегая тот факт, что для широты это изменяющийся ближе вы подходите к полюсам
  • округление 0,9 до 1 степени

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

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

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

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

+0

Как предложил @Brendan, API Карт Google также предоставляет «LatLngBounds». содержит() 'метод для проверки, находится ли координата в прямоугольных границах: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds –

+0

правильно ... и если вы разрешаете пользователям масштабируйте карту в & out, вы можете динамически отображать более или менее фотографии, поэтому ваш прямоугольный регион изменяется. Метод GMap2.getBounds() сообщит вам точную область, на которую в данный момент смотрит пользователь (http://code.google.com/apis/maps/documentation/javascript/v2/reference.html#GMap2.getBounds) - так в любом случае - если цель состоит в том, чтобы отобразить что-то в прямоугольном окне, запрос БД можно сформулировать, глядя на lon/lat без сложных сферических вычислений. – MikeD

+0

Спасибо, что помогли мне, я думаю, что нашел решение для своих проблем: http://spinczyk.net/blog/2009/10/04/radius-search-with-google-maps-and-mysql/ И: http://sa-action.blogspot.com/2009/09/google-map-advance-search-by-radius.html – Lucifix

Смежные вопросы