Задать вопрос
@Kassymbekoff

Как определить, входит ли координаты пользователя в заданный квадрат(круг)?

Добрый день. Сценарий: Пользователь1 на яндекс карте отмечает широту и долготу(получается центральная точка) и задает радиус в метрах(отдельно в input). Пользователь2 отправляет свою геолокацию(широту и долготу).
Вопрос: Как определить, входит ли Пользователь2 в заданный круг(квадрат) Пользователя2?
  • Вопрос задан
  • 536 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
bask
@bask
Писал лет десять назад, достал из чулана...

Вариант для квадрата:

double lat1 = 55.77;
double lon1 = 37.77;
double lat2 = 55.66;
double lon2 = 37.66;
double d = 0.300; // - проверяемое расстояние в километрах
double dx1km = 1.0f / (108.307 * Math.Cos(lon1 * 3.14159 / 180.0));// 108.307 - км между 1 градусом по долготе на широте Москвы
double dy1km = 1.0 / 111; // 111 км - расстояние между 1 градусом по широте
double dx = d * dx1km/2;
double dy = d * dy1km;
if (lat2 >= lat1 - dx && lat2 <= lat1 + dx && lon2 >= lon1 - dy && lon2 <= lon1 + dy) {
	//we are together!
}


Для окружности Измеряем расстояние между двумя точками и сверяем его с заданным радиусом. Если это расстояние меньше радиуса, то точки находятся рядом.

Здесь предполагается, что расстояние небольшое и вычисления происходят вдали от полюсов, т.к. там придётся учитывать искажения, т.к. квадрат превратится в параллелограмм, а окружность - в эллипс, вписанный в такой параллелограмм.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Moskus
@Moskus
Перестать заниматься ерундой и использовать БД с пространственными функциями - SpatiaLite/SQLite, PostGIS/PostgreSQL.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы