Список точек в определенном радиусе от местоположения?

Я делаю API для приложения для iPhone. Проще говоря, у меня есть местоположения, хранящиеся в базе данных (широта/долгота). Когда пользователь отправляет запрос на точки, скажем, в радиусе пяти (5) миль, мне нужно использовать алгоритм, чтобы получить только эти точки из базы данных MySQL.

  1. Как я могу преобразовать мили в минуты в координатах? IE, учитывая сужающийся характер долготы, сколько мне добавить к координатам, которые я ищу, чтобы сравнить с местоположением пользователей?

2 Какая хорошая формула для учета изменений долготы/широты по мере того, как вы перемещаетесь в разные точки Земли?

Спасибо :)


person Damian    schedule 23.07.2014    source источник
comment
Я бы сказал: остановитесь и посмотрите на Google Maps API. Я имею в виду, что это не просто так.   -  person Darren    schedule 24.07.2014
comment
Что касается геокоординат, то наиболее точным способом определения расстояния является не какое-то евклидово расстояние, а расстояние по большому кругу: en.wikipedia.org/wiki/Great-circle_distance   -  person Codor    schedule 24.07.2014


Ответы (1)


Вы никогда не упоминали, как вы хранили данные, поэтому я не могу дать вам фактический код. Вот только что придумал:

  1. Импортируйте все данные в какую-нибудь эффективную базу данных. Оптимизируйте его, чтобы он был эффективен при подтягивании координат в пределах определенного диапазона X/Y.
  2. Выберите все координаты в пределах квадрата 10x10 миль. Импортируйте их в массив
  3. Используйте foreach, чтобы просмотреть этот массив и использовать формулу расстояния (distance=sqrt((x-x)^2+(y-y)^2)). Если в пределах 5 миль, добавьте его в другой массив. Если нет, игнорируйте это.

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

Я должен согласиться с Дарреном в том, что Google Maps API может подойти лучше, хотя раньше я им не пользовался.

person Anonymous Penguin    schedule 24.07.2014