Как изменить значок маркера в Yandex maps?

Главные вкладки

Аватар пользователя Кришпер Кришпер 27 мая 2015 в 12:02

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

ВложениеРазмер
Иконка изображения 111.png2.37 КБ

Комментарии

Аватар пользователя Apuox Apuox 27 мая 2015 в 15:26

Чтобы получить доступ к маркеру и другим функциям необходимо создать карту программно. Для начала необходимо подключить сам скрипт карт:

 <script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>

Далее создаем карту по параметрам описанным ниже (более подробно описанные примеры и информацию можно найти здесь https://tech.yandex.ru/maps/jsbox/2.1/ ):

ymaps.ready(init);
  function init () {
    var myMap3 = new ymaps.Map("map3", {
    center: [55.77127434, 37.63492426],
    zoom:17,
    controls: ["zoomControl"]
  });
 
  myMap3.controls.add('fullscreenControl',{float: 'left'});
  // Создаем геообъект с типом геометрии "Точка".
  myGeoObject = new ymaps.GeoObject();
  myMap3.geoObjects
  .add(new ymaps.Placemark([55.77101400, 37.63209300], {
     balloonContent: 'Ул. Уличная,д. 22'
  }, {
     // Опции.
        // Необходимо указать данный тип макета.
        iconLayout: 'default#image',
        // Своё изображение иконки метки.
        iconImageHref: '/images/map_icon.png',
        // Размеры метки.
        iconImageSize: [203, 254],
        // Смещение левого верхнего угла иконки относительно
        // её "ножки" (точки привязки).
        iconImageOffset: [-80, -254]
  }));

Центр карты можно найти как из url на яндекс карте (там просто много чисел, и можно сразу не разобраться), так и сторонним способом, например: http://webmap-blog.ru/tools/getlonglat-ymap2.html

В функции init(), есть строка вида:

 var myMap3 = new ymaps.Map("map3", {

где "map3", указатель на блок вида:

<div id="map3"></div>

Соответственно по вышеуказанным параметрам скрипта можно сформировать:
- позицию центра карты, и отдельно позицию маркера (в случае когда он должен быть не по центру, и смещен, в углу например)
- кастомный маркер (необходимо указать его размер, можно настоящий а можно и смашстабированный + смещение относительно точки, предполагая, что маркер расположен справа внизу от указанной точки маркера)
- так же необходимо указать/подобрать необходимый масштаб карты
- можно добавить необходимые виджеты (фулскрин, линейку и т.п.)

upd: в последствии блоку map3 необходимо задать высоту+ширину, дабы его было видно.

Аватар пользователя Кришпер Кришпер 26 июня 2015 в 10:52

Пожалуй, выложу пример для работы с модулем. В общем, после установки яндекс модуля и появления поля для выбора позиции карты, нужно переопределить шаблон типа материала, где нужна карта, и прописать следующий код

<?php
                                                //
                                          $bb = $node;
                                          //
                                          $bb1 =  $bb->field_of_map['und'][0]['placemarks'] ;
                                          $bb5 =  $bb->field_of_map['und'][0]['placemarks'] ;
                                           //
                                          $bb2 = json_decode($bb1)[0]->params;
                                          //
                                          //print_r(  json_decode($bb1)[1]->coords );
                                          $bb1 = json_decode($bb1)[0]->coords;
                                                 
                                          //
                                          $bb = $bb->field_of_map['und'][0]['coords'];
                                          $bb = json_decode($bb);
?>

<div id="map" style="width: 100%; height: 400px"></div>

<script type="text/javascript">
                                                ymaps.ready(init);
                                                var myMap,
                                                        myPlacemark;

                                                function init(){
                                                        myMap = new ymaps.Map("map", {
                                                                center:  [ <?php print $bb->center[0]; ?>, <?php print $bb->center[1]; ?>]      <?php // print $bb->center; ?>,
                                                                zoom: <?php  print $bb->zoom; ?>
                                                        });
                                                        <?php
                                                                $arrY = '';
                                                                        //json_decode($bb1)[0]->coords;
                                                                foreach( json_decode($bb5) as $key => $e ){    
                                                                                $e1 = $e->coords;
                                                                                $e2 = $e->params->iconContent; //[params] => stdClass Object ( [color] => white [iconContent]
                                                                                $arrY .= '.add(new ymaps.Placemark(['.$e1[0].','.$e1[1].'], {'.
                                                                                        'hintContent: "'.$e2.'"'.
                                                                                '}, {'.
                                                                                        'iconLayout: "default#image",'.
                                                                                        'iconImageHref:"'.$base_url.'/themes/bartik/images/ikon_yand.png'.'",'.
                                                                                        'iconImageSize: [135, 79],'.
                                                                                        'iconImageOffset: [-62, -79]'.                                                                 
                                                                                '}))'; 
                                                                }
                                                                print 'myMap.geoObjects'.$arrY.';';
                                                        ?>
                                                }
</script>