Как сделать поиск по координатам

D
На сайте с 20.09.2010
Offline
175
648

Есть такая задача:

В таблице лежат данные в ячейках (город, широта, долгота), например:

Минск/53.9061/27.5549

И куча других городов в таком формате

Как сделать поиск по городам которые расположены в радиусе 50км от заданного города?

Z0
На сайте с 03.09.2009
Online
823
#1

https://toster.ru/q/23016

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

yet_warm
На сайте с 26.05.2007
Offline
129
#2

Как вариант, зависит от необходимой точности.

Выбираешь из таблицы всех +- 50 км по долготе и считаешь:

S = 111,2×arccos(sin φ1 × sin φ2 + cos φ1 × cos φ2 × cos (L2-L1)),

где S - расстояние, км;

φ1 и L1 - широта и долгота точки 1 (для северной широты и восточной долготы со знаком плюс, для южной широты и западной долготы со знаком минус), градусы;

φ2 и L2 - широта и долгота точки 2, градусы;

константа 111,2 - средняя длина дуги в один градус на поверхности Земли, км.

Многие хотят попасть в рай, мало кто хочет для этого умирать.
D
На сайте с 20.09.2010
Offline
175
#3
yet_warm:
Как вариант, зависит от необходимой точности.

Выбираешь из таблицы всех +- 50 км по долготе и считаешь:

S = 111,2×arccos(sin φ1 × sin φ2 + cos φ1 × cos φ2 × cos (L2-L1)),

где S - расстояние, км;
φ1 и L1 - широта и долгота точки 1 (для северной широты и восточной долготы со знаком плюс, для южной широты и западной долготы со знаком минус), градусы;
φ2 и L2 - широта и долгота точки 2, градусы;
константа 111,2 - средняя длина дуги в один градус на поверхности Земли, км.

тоесть какой должен быть запрос исходя из моих входящих данных (например 53.9061 и 27.5549) ??

Joker-jar
На сайте с 26.08.2010
Offline
167
#4

Данный алгоритм неплохо реализован в Redis http://redis.io/commands/georadius

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий