Клуб API Карт

Метка по центру полигона

iormark
27 января 2014, 14:30

Здравствуйте, сделал вывод карты в Вологде и полигон,

http://jsfiddle.net/B7FtM/

 

Я так понимаю у метки должны быть собственные координаты, которых у меня нет. У меня есть только координаты полигонов.

Можно ли вывести метку ровно по центру полигона? 

 

Картинка того что я хочу сделать:

18 комментариев
Подписаться на комментарии к посту

Можно. Для этого нужно расчитать координаты центра полигона по алгоритму вычисления центра масс например. Или взять центр ограничивающего его прямоугольника (poly.geometry.getBounds()).

Понятие центра многоугольника довольно "растяжимое"...
 

Встроенных средств для получение центра полигона нет.

Но не сложно расчитать центр его прямоугольной проекции на карте.

Обновил ваш пример на jsfiddle

Благодарю)

Скажите пожалуйста, метки метками но они не изменяются даже при zoom:1 и это логично. Можно ли в полигон вставить нумерованный круг вот как на картинке который будет нумеровать каждый полигон и изменяться с размерами карты?

Тогда надо делать не метками, а рисовать такой круг, например на canvas и использовать опцию заливки полигона fillImageHref для его размещения

Я попробовал сделать Circle  http://jsfiddle.net/B7FtM/5/

а потом вспомнил, что я не смогу вставить в него нумерацию.

Про canvas искал информацию в API, но ненашел. Не могли бы вы мне помочь в этом?

Геообъект "круг" тут не при чем

 

Canvas он не в АПИ, он сам по себе.

Вы создаете такой какой вам надо и передаете в опцию fillImageHref вашего полигона результат вызова myCanvas.toDataURL()

 

Сделал как вы посоветовали http://jsfiddle.net/B7FtM/6/, однако в доках прочитал следующее:


fillMethod:

stretch - Фоновое изображение растягивается по размеру оверлея.

tile - Фоновое изображение повторяется без изменений размера. Аналог background-repeat в css. Можно использовать для заливки фигуры неким шаблоном.


Следовательно картику можно либо растянуть (в моем случае криво выходит) либо повторять...

размер канваса должен быть таким же как у полигона

круг надо нарисовать в центре

Нарисовал, но не то, и много заморочек его нужно при зуме кликах перерисовывать жесть(

Метки лучше) 

Приветствую еще раз. Вот Вы разместили метку по центру. все хорошо все гуд. Но если задача стоит в том что у меня несколько полигонов и в каждом из них несколько меток.
Задача в том что бы скрыть все эти метки, предварительно посчитав их количество в каждом полигоне., и в каждом полигоне метку такую нужно поставить по центру с надписью(колл-во скрытых меток). Я уже два дня юзаю, не могу решения найти. вот пример моей карты с несколькими полигонами и метками внутри них. А вот примерная картинка, результат того к чему я хочу придти:

что именно неполучается?

Ну вот допустим что у меня сейчас есть... http://jsfiddle.net/nikoniki/vfZtL/7/ там ставятся метки при клике на полигон. А сделать так что бы при загрузке все расставилось, не смекну...
http://jsfiddle.net/nikoniki/vfZtL/8/ - вот нажал упдейт

зачем вам создавать метки, если вы хотите их скрывать?

что бы посчитать их колличество и вывести в единой метке. НО! при нажатии на полигон вытащить ид всех меток(скрытых)... вот такой двоякий смысл)) ... по идее все это делается, только вот "единые" метки при клике показываются а не сразу при загрузке

Кажется что задача достаточно простая, нужно лишь системно подойти к ее решению, например, с использованием ООП.

 

Создать класс, например, "Area" или "District", принимающий на вход полигон и объект с описанием точек.

В конструкторе класса сохранить ссылки на полигон и объект-описание.

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

В конструкторе можно вызвать метод,

который переберет объект-описание меток и создаст в центре полигона метку с нужным числом.

 

Для каждого полигона создаем экземпляр такого класса и добавляем его в массив districts

 

Перебирая этот массив можно управлять поведением всех полигонов нужным образом.

 

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

Сделал вот так... http://jsfiddle.net/nikoniki/M4MEH/1/