Вход

Просмотр полной версии : Поиск ближайших метро


ilyamegatron3000
12.06.2019, 11:17
Может кто помочь с реализацией вот такой программы: Пользователь должен ставить метку на карте, после чего ему должны быть представлены ближайшие станции метро. На данный момент я добавил карту и возможность установления метки с получением ее координат, дальше ступор, хелпплз

Alexandroppolus
12.06.2019, 13:41
Допустим, юзер жмякнул карту по координатам {lat, lon}
Ты в цикле перебираешь массив станций метро с их координатами (у тебя ведь есть такой массив, да?), для каждой вычисляешь расстояние от точки, если расстояние меньше некоторого значения, добавляешь в результат.

Для Москвы (широта примерно 60 гр) расстояние вычисляется так:

function distance60(c1, c2) {
return Math.pow(c1.lat - c2.lat, 2) * 4 + Math.pow(c1.lon - c2.lon, 2);
}


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

Malleys
12.06.2019, 14:10
в неких абстрактных единицах
В градусах в квадрате

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

Очевидно же, чем меньше угол, тем меньше путь до неё!

Alexandroppolus
12.06.2019, 14:36
Но вы могли просто вычислить угол между двумя прямыми, обе из которых проходят через центр земли, и одна из них через проверяемую станцию, а другая через ваше местоположение.
Это "честный" способ, так надо делать, если расстояние сотни км и больше. Но там формула сложнее, с тригонометрией, я как-то решал, теперь сходу даже не вспомню. Для маленьких расстояний можно по простому считать.

рони
12.06.2019, 14:55
https://tech.yandex.ru/maps/jsbox/2.1/reverse_geocode

// Ищем только станции метро.
kind: 'metro',
// Запрашиваем не более 20 результатов.
results: 20