maps_js.blade.php 3.16 KB
<script>
    function setComplexMap(id, coords, caption) {

        if (document.querySelector('#' + id)) {

            // Дождёмся загрузки API и готовности DOM.
            ymaps.ready(init);

            function init() {
                const map = new ymaps.Map(id, {
                    // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования.
                    center: coords,
                    zoom: 16,
                    controls: []
                });

                // Создаём макет содержимого.
                const MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
                    '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>'
                );

                // Создание макета содержимого хинта.
                // Макет создается через фабрику макетов с помощью текстового шаблона.
                const HintLayout = ymaps.templateLayoutFactory.createClass("<div class='my-hint'>" +
                     caption + "</div>", {
                        // Определяем метод getShape, который
                        // будет возвращать размеры макета хинта.
                        // Это необходимо для того, чтобы хинт автоматически
                        // сдвигал позицию при выходе за пределы карты.
                        getShape: function () {
                            let el = this.getElement(),
                                result = null;
                            if (el) {
                                var firstChild = el.firstChild;
                                result = new ymaps.shape.Rectangle(
                                    new ymaps.geometry.pixel.Rectangle([
                                        [0, 0],
                                        [firstChild.offsetWidth, firstChild.offsetHeight]
                                    ])
                                );
                            }
                            return result;
                        }
                    }
                );

                // метка
                const placemark = new ymaps.Placemark(coords, {
                    // hintContent: caption,
                    // balloonContent: caption,
                    iconContent: '1',
                    // address: caption,
                    object: caption
                }, {
                    iconLayout: 'default#imageWithContent',
                    iconImageHref: "{{ asset('images/mark-complex.svg') }}",
                    iconImageSize: [52, 67],
                    iconImageOffset: [-26, -67],
                    iconContentOffset: [0, 17],
                    iconContentLayout: MyIconContentLayout,
                    hintLayout: HintLayout
                });

                map.geoObjects.add(placemark);

            }

        }

    }
</script>