Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск ближайших метро (https://javascript.ru/forum/misc/77731-poisk-blizhajjshikh-metro.html)

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
в неких абстрактных единицах

В градусах в квадрате

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

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

Alexandroppolus 12.06.2019 14:36

Цитата:

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

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

рони 12.06.2019 14:55

https://tech.yandex.ru/maps/jsbox/2.1/reverse_geocode

Цитата:

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


Часовой пояс GMT +3, время: 12:16.