Клуб API Карт

Принадлежность точки полигону.

Пост в архиве.

Приветствую!

Подскажите, если ли во второй версии апи аналог метода .contains() из первого апи?

8 комментариев

К объектам какого класса вы хотите применять аналог этого метода?

Если честно, то еще не знаю. Только осваиваюсь с новой версией API. 

Задача в общем выглядет так: есть некая область на карте (например район доставки товара) и нужно определить входят ли данные координаты в эту область (куда кликнул пользователь).

Раньше это решалось методом contains если не ошибаюсь.

Задачу решать за меня само собой не надо, тут скорее именно вопрос по документации к АПИ. Я просто не нахожу подобного метода нигде, где ищу.

В новой версии нет классов, эквивалентных YMaps.GeoPoint и YMaps.GeoBounds. Вместо них используются обычные массивы.

[33.5, 56.7] - геоточка

массив из вух точек - прмоугольная область.

 

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

Спасибо за ответы. 

В новой версии нет классов, эквивалентных YMaps.GeoPoint и YMaps.GeoBounds.

Именно поэтому не акцентировал внимания на определенных классах.

 

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

В случае прямоугольной области - вообще без проблем. В случае окружности, тоже впринципе легко. А в случае произвольной области - например, как говорилось, район доставки - алгоритм уже по сложнее, чем "сравнить с границами области". 

Я могу этот алгоритм написать, но предполагал, что его реализация уже может быть в API 2, если была в api 1.

Sergey Konstantinov
28 января 2016, 05:02

Если у вас есть геообъект с геометрией Polygon (или, что почти то же самое, экземпляр класса ymaps.Polygon), Вы можете проверить попадание через geoObject.geometry.contains(point).

Спасибо! То, что доктор прописал.

Странно, но до сих пор не могу найти описание этого метода в документации по апи=))) 

Sergey Konstantinov
28 января 2016, 05:02

Забыли продокументировать. В ближайшем апдейте выкатится.

Спасибо за репорт. Некоторые методы геометрии действительно забыли описать. Исправимся в ближайшее время. Для того чтобы проверить визуально вхождение точки в полигон нужно работать с пиксельной геометрией.

Для этого надо вызывать так geoObject.geometry.getPixelGeometry().contains(globalPixelPoint)

Метод contains самой геометрии пока не умеет учитывать особенности геокоординат, работает также как и для пикселей, поэтому пока от него мало толку. Это тоже будет скоро исправлено.