Клуб API Карт

Документация по API

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

Никак не могу понять как в документации ориентироваться. Кроме примеров ничего не помогает. Подскажите алогоритм? 

Вот, например, мне нужно при клике на маркер вывести координаты точки, которой соответствует кликнутый маркер. 

Как добавить событие клику по placemark я еще худо-бедно разобрался, но вот как из объекта-события вытащить координаты, я не могу вкурить. Ну то есть смотрю на документацию в разделе Event и не могу понять из нее, что вообще делать надо? 

Какая должна быть последовательность просмотра, чтобы понять как это делать?

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

последовательность следующая - ты повесил обработчик на событие и пишешь функцию обработчик? у которой параметром является событие.

myPlacemark.events.add("click", function(e){

// внутри этой функции, чтобы узнать координаты точки тебе нужно заполучить эту точку. поскольку точка та, по которой кликают, то получить её можно так:

var  placemark = e.get('target');

// а дальше находим в документации метод для получения координат для плейсмарк. но метод получения координат не у плейсмарка, а у объекта его геометрии:

console.log(placemark.geometry.getCoordinates());

}

Кажется, я начал вкуривать. Надо чаще смотреть в раздел "Интерфейсы"

Дмитрий Куртеев
28 января 2016, 04:31

Хорошо, допустим, у нас нет console.log, а есть просто документация — то есть подсмотреть не можем, какие методы есть у объекта. В обработчике события мы получаем таргет, который является объектом ymaps.Placemark. У объекта есть поле geometry типа iGeometry. Заходим в интерфейс iGeometry и находим методы:

getBounds()

getMap()

getPixelGeomerty()

getType()

setMap()

 

Метода getCoordinates() нет. Видим, что IGeometry расширяет IBaseGeomerty. В интерфейсе IBaseGeometry тоже такого метода нет. Метод getCoordinates есть у интерфейса IBaseCircleGeometry, о котором нет упоминания ни в Placemark, ни в IGeometry. Вопрос — как мне нужно догадаться о его существовании?

 

Следующий пример: мне нужно сделать полностью кастомный шаблон балуна. Нахожу пример http://api.yandex.ru/maps/doc/jsapi/2.x/examples/balloonlayout.html. В примере в options передаются опции для балуна:

balloonContentSize

balloonLayout

и т.д.

 

Упоминания этих опций я не нашел ни в Placemark (там вообще ни одной опции нет), ни в geoObject.Balloon, ни в GeoObject. Опять-таки не ясно, где мне их найти и каков алгоритм поиска.

 

Метода getCoordinates() нет. Видим, что IGeometry расширяет IBaseGeomerty. В интерфейсе IBaseGeometry тоже такого метода нет. Метод getCoordinates есть у интерфейса IBaseCircleGeometry, о котором нет упоминания ни в Placemark, ни в IGeometry. Вопрос — как мне нужно догадаться о его существовании?

IGeometry - интерфейс абстрактной геометрии

для плейсмарка нужно смотреть геометрию Point

 

 

В примере в options передаются опции для балуна:

balloonContentSize

balloonLayout

и т.д.

 

Упоминания этих опций я не нашел ни в Placemark (там вообще ни одной опции нет), ни в geoObject.Balloon, ни в GeoObject. Опять-таки не ясно, где мне их найти и каков алгоритм поиска.

Опции балуна есть в балуне =)

Дмитрий Куртеев
28 января 2016, 04:31

Спасибо за быстрый ответ ) Буду внимательнее курить доки

как мы заметили из чтения клуба -

часто присутствует путаница между понятиями properties и options

 

На самом деле всё просто - properties это просто объект-источник данных для геообъектов, т.е. там могут быть совсем произвольные поля.

 

В опциях же  передаются настройки отображения и поведения геообъектов.

Поля этого объекта имеют срого определенные названия.

Опции, например, типа Layout могут использовать какие-то поля из properties,

например стандартный лайаут балуна карты берет данные для контента балуна из

properties.content. Если создать свой лайаут, то можно брать контент из другого произвольного поля.

И еще - опции наследуются.

Т.е. вы можете указать опции для балуна как самому балуну, так и геообъекту (метка, полилиния, полигон), и даже карте. В каждом из этих случаев опция будет иметь специальный префикс

для балуна: contentLayout

для балуна геообъекта: balloonContentLayout,

для балунов всех геообъектов на карте: geoObjectBalloonContentLayout

пример кода:

 

// опции балуна для всех геообъектов на карте выставляем для картыmyMap.options.set('geoObjectBalloonCloseButton', false);// опции балуна геообъекта устанавливаем для геообъекта (перекрывают опции бля геообъектов балуна выставленные карте)placemark.options.set('balloonCloseButton', true);// опции балуна выставленные самому балуну имеют самый высокий приоритет    placemark.balloon.open()    .options.set('closeButton', false);