Клуб API Карт

Проверка на вхождение координат в Circle

jea-lous
24 мая 2013, 07:24

Создаю сервис позволяющий определять ближайшие объекты от определённой точки.

Точка эта задаётся адресом и координаты получаются через "ymaps.geocode".

Точно также получаются объекты которые нужно определить.

Делаю так:


mcircle = new ymaps.geometry.base.Circle([[55.029941, 82.920691], 50000]);

пробегаемся циклом по объектам
mcircle.contains([55.035235, 83.00259]); /*смотрим координаты объекта возвращает false*/
mcircle.contains([55.029941, 82.920691]); /* смотрим сам центр круга - возвращает false*/

 

Может я чего то не так делаю? видел пример через poligon но мне он не подходит т.к. области поиска могут быть разными и не возможно задать эти области координатами. 

 

upd: нашел еще в блоге пример, но хотелось бы сделать без добавления на карту т.к. карта на странице используется для других целей. С "geometry.base.Circle" как я понимаю - это возможно.

4 комментария
Подписаться на комментарии к посту
vadim.zhiltsov
24 мая 2013, 08:43

 Вот вам javascript функция, которая по координатам считает расстояние в метрах между двумя точками, не напрягайте клиента кругами. Свойственно найдёте минимальную дистанцию между точкой отсчёта и одной из ваших точек.

    function calculateDistance(latA, longA, latB, longB) {        var EARTH_RADIUS = 6372795;        lat1 = latA * Math.PI / 180;        lat2 = latB * Math.PI / 180;        long1 = longA * Math.PI / 180;        long2 = longB * Math.PI / 180;        cl1 = Math.cos(lat1);        cl2 = Math.cos(lat2);        sl1 = Math.sin(lat1);        sl2 = Math.sin(lat2);        delta = long2 - long1;        cdelta = Math.cos(delta);        sdelta = Math.sin(delta);        y = Math.sqrt(Math.pow(cl2 * sdelta, 2) + Math.pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2));        x = sl1 * sl2 + cl1 * cl2 * cdelta;        ad = Math.atan2(y, x);        dist = Math.ceil(ad * EARTH_RADIUS);        return dist;    }
Не надо использовать Base-геометрии
http://ymapsapi.ya.ru/replies.xml?item_no=744

Вы можете добавить на карту объект с опцией visible:false, просто чтобы расчеты шли корректно

Мне нужен пример с полигонами, не могли бы вы поделиться?