Quantcast
Channel: Клуб API Карт
Viewing all 7380 articles
Browse latest View live

Как добавить на карту geometry.pixel.MultiLineString ?


Не растягивается в высоту islands#StretchyIcon

$
0
0

В старом API при использовании twirl#redstretchyIcon можно было в названии выводить текст в несколько строк. В новом API (islands#StretchyIcon) содержимое обрезается по высоте. Как можно вывести текст внутри метки в несколько строк не используя HTML макеты? 

Спасибо

Как получить доступ к опциям маркера?

$
0
0

Я задаю свойства и опции для маркера так:

        var opt = {
            id: prop,
            hintContent: points[prop]['hint_text'] ? points[prop]['hint_text'] : '',
            balloonContent: points[prop]['baloon_text'] ? points[prop]['baloon_text'] : ''
        };

        var opt2 = {
            hasHint: true,
            balloonCloseButton: points[prop]['baloon_close_icon'] ? points[prop]['baloon_close_icon'] : true
        };

        var placemark = new ymaps.Placemark([points[prop]['lat'], points[prop]['lng']], opt, opt2);   

Затем получаю свойства так:

    collectionMarkers.events.add('contextmenu', function(e) {
        var target = e.get('target');
        var id = target.properties.get('id');
        var baloonText = target.properties.get('balloonContent');
        var hintText = target.properties.get('hintContent');

Всё ок. Но я пытаюсь получить опции так:

var baloon_close_icon = target.properties.get('balloonCloseButton');

И здесь не ОК. Получаю значение undefined. Подскажите пожалуйста как получить значение опции.

Тут аже вопрос не в том как решить проблему, а в том что я не могу в документации найти где описаны эти методы для объекта placemark. Покажите пожалуйста где

Вращение картинки у Placemark

$
0
0

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

Я создаю менеджер, указывая параметры по умолчанию:

myObjectManager2 = new ymaps.ObjectManager(
{
	geoObjectIconLayout: "default#image",
	geoObjectIconImageHref: "pages/data/images/dot.png",
	geoObjectIconImageSize: [11, 11],
	geoObjectIconImageOffset: [-6, -6]
});

После чего добавляю точки:

myObjectManager2.add(
{
	type: 'Feature',
	id: ID,
	geometry:
	{
		type: 'Point',
		coordinates: [X, Y]
	},
	options:
	{

	},
	properties:
	{

	}
});

В домументации ничего подходящего не нашёл :(

Математические действия в ymaps.templateLayoutFactory

$
0
0

Здравствуйте! Как производить математические действия в шаблоне ymaps.templateLayoutFactory? Пытаюсь сделать так:

{{ geoObject.options.opacity * 100 }}

Вообще ничего не выводит.

И так:

{{ 1 + 1 }}

Тоже самое - пусто.

Смена цвета метки при клике и возврат на изначальный цвет при повторном клике

$
0
0

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

function addplacemarkrs(coord1, coord2, iContent, hContent) {
	placemark = new ymaps.Placemark([coord1, coord2], {
		iconContent: iContent,
		hintContent: hContent
		}, {
		preset: 'islands#redCircleIcon'
		})
		placemarkcollection.add(placemark);

        placemark.events.add('click', function (e) {
        // Меняем цвет текущей метки
        e.get('target').options.set('preset', 'islands#darkGreenCircleIcon');
        });
}

Не могу сделать фильтр меток

$
0
0

Есть готовый код пытаюсь в него вставить фильтр , но ничего не выходит. Данные формируются geoObjects = [] как сделать самый простой фильтр не пойму

<script type="text/javascript">
	ymaps.ready(init);
	var myMap2,
		myPlacemark,
		default_coord = [44.131553, 43.450316],
		default_zoom = 12;

	function init(){
		myMap2 = new ymaps.Map("map", {
			center: default_coord,
			zoom: default_zoom,
			controls: ["typeSelector", "zoomControl", "fullscreenControl"]
		}, {
			buttonMaxWidth: 150
		});

		myMap2.geoObjects.options.set({balloonAutoPanMargin: [70, 0, 0, 0]});

		clusterer = new ymaps.Clusterer({
			zoomMargin: 50
		}),



mapData = [{"num":"8","adres":"\u041f\u0440\u0438\u0432\u043e\u043b\u044c\u043d\u0430\u044f 25 \u043a\u0430\u043c\u0435\u0440\u0430 8","stream":"https:\/\/cam.serdi.ru\/Privolbnaya_25_8\/index.m3u8","access":"","coord":["44.140102090298","43.451210393182"],"available":true,"metka":"facetime-video","typeObgect":"\u041f\u0440\u0438\u0432\u043e\u043b\"},..еще код..}],        geoObjects = [];

		var i = 0;
		$(mapData).each(function(){
			var color;

			if(this.access){
				color = "gray";
			} else if(!this.available){
				color = "red";
			} else {
				color = "blue";
			}

			geoObjects[i] = new ymaps.Placemark([this.coord[0], this.coord[1]], {

                             balloonContentSize: [270, 99], // размер нашего кастомного балуна в пикселях
	balloonLayout: "default#imageWithContent", // указываем что содержимое балуна кастомная херь
	balloonImageHref: '/files/markers/wifiufanet.png', // Картинка заднего фона балуна
				balloonContent: this.num,
				hintContent: this.adres
            }, {
				   preset: 'islands#glyphIcon',
      iconGlyph: this.metka,
      iconGlyphColor: color,

                                iconColor: color,
				stream: this.stream,
				adres: this.adres,
				access: this.access,
				available: this.available
			});
			i++;
		});

		myMap2.geoObjects.events.add('balloonopen', function (e) {
            var stream = e.get('target').options.get("stream"),
				adres = e.get('target').options.get("adres"),
				access = e.get('target').options.get("access"),
				available = e.get('target').options.get("available");

			var content;
			if(access){
				content = '<h3>'+adres+'</h3><p>Доступ к камере ограничен</p>';
				e.get('target').properties.set("balloonContent", content);
			} else if(!available){
				content = '<h3>'+adres+'</h3><p>Извините данная камера не доступна, ведутся работы по восстановлению доступа</p>';
				e.get('target').properties.set("balloonContent", content);
			} else {
				content = '<h3>'+adres+'</h3><div id="fpplayer" style="width:400px;height:250px"></div>';

				e.get('target').properties.set("balloonContent", content);

				flowplayer("#fpplayer", {
					clip: { sources: [
						{ type: 'application/x-mpegurl', src: stream, suffix: 'm3u8' }
					]
					},
					autoplay: true,
					live: true,
					embed: false,
					facebook: false
				}).play();
			}

        });

		clusterer.add(geoObjects);
		myMap2.geoObjects.add(clusterer);


  var listBoxItems = ['параметр1', 'параметр2']
        .map(function(title) {
            return new ymaps.control.ListBoxItem({
                data: {
                    content: title
                },
                state: {
                    selected: true
                }
            })
        }),
        // Теперь создадим список, содержащий 5 пунктов.
        listBoxControl = new ymaps.control.ListBox({
            data: {
                content: 'Фильтр',
                title: 'Фильтр'
            },
            items: listBoxItems,
            state: {
                // Признак, развернут ли список.
                expanded: true,
                filters: listBoxItems.reduce(function(filters, filter) {
                    filters[filter.data.get('content')] = filter.isSelected();
                    return filters;
                }, {})
            }
        });
    myMap2.controls.add(listBoxControl);

    // Добавим отслеживание изменения признака, выбран ли пункт списка.
    listBoxControl.events.add(['select', 'deselect'], function(e) {
        var listBoxItem = e.get('target');
        var filters = ymaps.util.extend({}, listBoxControl.state.get('filters'));
        filters[listBoxItem.data.get('content')] = listBoxItem.isSelected();
        listBoxControl.state.set('filters', filters);
    });

    var filterMonitor = new ymaps.Monitor(listBoxControl.state);
    filterMonitor.add('filters', function(filters) {
        // Применим фильтр.
        myMap2.geoObjects.setFilter(getFilterFunction(filters));
    });

    function getFilterFunction(categories){
        return function(obj){
            var content = obj.properties.typeObgect;
            return categories[content]
        }
    }

		myMap2.setBounds(myMap2.geoObjects.getBounds(), {
			zoomMargin: [60, 0, 0, 0],
			checkZoomRange:true
		});

		$("#filter_map_block_wrap #filter button").click(function(){
			var cur = $(this);
			if(cur.data("type")=="all"){
				myMap2.setBounds(myMap2.geoObjects.getBounds(), {
					zoomMargin: [60, 0, 0, 0],
					checkZoomRange:true
				});
			} else {
				myMap2.panTo([cur.data("c1"), cur.data("c2")], {
					flying: 1
				}).then(function () {
					myMap2.setZoom(cur.data("z"));
				});
			}
		});

	}



	$(function(){
		$("#filter_map_block_wrap #filter button").click(function(){
			$("#filter_map_block_wrap #filter button").removeClass("active");
			$(this).addClass("active");
		});
	});
</script>
	

Запретить перетаскивание карты (яндекс конструктор)

$
0
0

Здравствуйте!

Собственно сабж


<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3A5455376b0c2ad44513405d6a4a9893c93005eb3a69484ddc37bf0aeb4aaee536&amp;width=100%25&amp;height=532&amp;lang=ru_RU&amp;scroll=false&amp;drag=false"></script>


Через get параметр drag=false, несработало


При клике на карту, как определить что клик был на гео объекте а не на пустом месте карты где нет меток?

$
0
0
    // Вешаем слушателя клика на коллекцию для меток
    placemarkcollection.events.add('click', function (e) {
        // Метка, на которой сработало событие
        var target = e.get('target');
        // Проверяем пресет метки - если его нет, ставим зелёный, если есть - делаем unset
        if(target.options.get('preset')) {
         target.options.unset('preset');
        } else {
         target.options.set('preset', 'islands#darkGreenCircleIcon');
        }
        document.getElementById("placemarkID").value = target.properties.get('iconContent');
        document.getElementById("placemarkPreset").value = target.options.get('preset');
    });

При клике на метку, получаю id метки. Но если просто кликнуть по карте, то снова получаю id метки по которой кликнул в последний раз. Как игнорировать такое событие?

Выборка по регионам для определенного маршрута

$
0
0

Доброго времени суток. Интересует возможно ли реализовать такой функционал:

 Проложить маршрут от А до Б, и использовать сервис "Регионы" для того, чтобы в конечном итоге отобразить на карте через какие регионы проходит данный маршрут. Вот примерно, чтобы был такой результат. Если возможно напишите затратно ли это по времени, чтобы я мог оценить стоит ли мне решать задачу таким способом. Спасибо за внимание!

Вот примерно так

Как кластеризовать свои метки

$
0
0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MyMap</title>
<link href="style.css" rel="stylesheet">
<!-- Подключаем API  карт 2.x  -->
<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
<script>
ymaps.ready(init);
        function init () {
            var myMap = new ymaps.Map('m_scr', {
                    center: [57.920669, 59.975301],
                    zoom: 12
                });

	         // собственный макет выпадающего списка.
        ListBoxLayout = ymaps.templateLayoutFactory.createClass(
            "<button id='my-listbox-header' class='btn btn-success dropdown-toggle' data-toggle='dropdown'>" +
                "{{data.title}} <span class='caret'></span>" +
            "</button>" +
            "<ul id='my-listbox'" +
                " class='dropdown-menu' role='menu' aria-labelledby='dropdownMenu'" +
                " style='display: {% if state.expanded %}block{% else %}none{% endif %};'></ul>", {

            build: function() {

                ListBoxLayout.superclass.build.call(this);

                this.childContainerElement = $('#my-listbox').get(0);

                this.events.fire('childcontainerchange', {
                    newChildContainerElement: this.childContainerElement,
                    oldChildContainerElement: null
                });
            },

            getChildContainerElement: function () {
                return this.childContainerElement;
            },

            clear: function () {

                this.events.fire('childcontainerchange', {
                    newChildContainerElement: null,
                    oldChildContainerElement: this.childContainerElement
                });
                this.childContainerElement = null;
                ListBoxLayout.superclass.clear.call(this);
            }
        }),

        ListBoxItemLayout = ymaps.templateLayoutFactory.createClass(
            "<li><a>{{data.content}}</a></li>"
        ),

        // Создадим 2 пункта выпадающего списка
        listBoxItems = [
            new ymaps.control.ListBoxItem({
                data: {
                    content: 'Нижний Тагил',
                    center: [57.920669, 59.975301],
                    zoom: 12
                }
            }),
            new ymaps.control.ListBoxItem({
                data: {
                    content: 'Качканар',
                    center: [58.697931, 59.498605],
                    zoom: 13
                }
            })
        ],

        //список, содержащий 2 пункта.
        listBox = new ymaps.control.ListBox({
                items: listBoxItems,
                data: {
                    title: 'Выбрать пункт'
                },
                options: {

                    itemLayout: ListBoxItemLayout
                }
            });

        listBox.events.add('click', function (e) {
            var item = e.get('target');
            // Клик на заголовке выпадающего списка обрабатывать не надо.
            if (item != listBox) {
                myMap.setCenter(
                    item.data.get('center'),
                    item.data.get('zoom')
                );
            }
        });


				// Создание метки
		var	myPlacemarkDRAM = new ymaps.Placemark([57.907594, 59.969703], {
            balloonContentHeader: "<b>Драмматический Театр</b>",
            balloonContentBody: '<br><p>Нижнетагильский Драматический театр имени Д. Мамина-Сибиряка — драматический театр в городе Нижний Тагил Свердловской области России, один из четырёх театров, самый большой и старейший театр Нижнего Тагила. Расположен в Ленинском районе.</p><br>' +
                '<br><img  src="http://i12.pixs.ru/storage/9/5/9/teatr1jpg_9861923_28205959.jpg">' + '<br><p>Предшественниками Нижнетагильского драматического были любительский театр, открытый служащими демидовских заводов в 1862 году и проработавший с некоторыми перерывами около 60 лет, полупрофессиональные ТРАМ, драматическая труппа «Ансамбль» и театр Наркомпроса, созданные энтузиастами в 20-30 годы. Государственный театр открылся в Нижнем Тагиле 8 мая 1946 года спектаклем «Оптимистическая трагедия». В его афише были лучшие пьесы того времени — «История одной любви» К. Симонова, «Таня» А. Арбузова и мировая классика — «Анна Каренина» Л. Толстого, «Маскарад» М. Лермонтова, «Тартюф» Мольера, «Мария Тюдор» В. Гюго. В 1955 году переехал в новое здание, специально построенное на Театральной площади.</p>' +
				'<br><img  src="http://i12.pixs.ru/storage/0/0/1/teatr2jpg_4854995_28206001.jpg">' + '<br><p>В первые десятилетия в театре работали будущий кинорежиссёр В. Мотыль, известная французская пианистка В. Лотар-Шевченко, заслуженные деятели искусств РСФСР Б. Гронский, Е. Островский, заслуженный артист ТАССР В.Добронравов, художники В. Гартунг, М. Медведь, заслуженные артисты РСФСР Д. Черкасов, З. Бестужев, М. Полетаева, Н. Будагов, актеры И. Кашников, Н. Серебренникова — единственная артистка, проработавшая на тагильской сцене ровно полвека, именем которой названо одно из театральных фойе. В золотой фонд театра вошли в 50-60 годы спектакли «Угрюм-река» В.Шишкова, «Иркутская история» А.Арбузова (режиссёр В.Демин), «На дне» М.Горького, «Гроза» А.Островского.</p>',
            hintContent: "ТЕАТР"
        }, {
            balloonMaxWidth: 800
        });

		var	myPlacemarkMUSEUM = new ymaps.Placemark([57.906252, 59.955023], {
            balloonContentHeader: "<b>Музей изобразительных искусств</b>",
            balloonContentBody: '<br><p>Нижнетагильский музей изобразительных искусств — музей живописи, один из двух самых больших музеев города Нижнего Тагила и второй по величине и значимости музей изобразительных искусств в Свердловской области (после Екатеринбургского музея живописи). Находится в Нижнем Тагиле, в Ленинском районе города, в историческом центре города, на улице Уральской, 7, 4 и 5, в центре города.</p><br>' +
                '<br><img  src="http://i12.pixs.ru/storage/5/0/1/800pxOtdel_4191927_28213501.jpg">' + '<br><p>Музей изобразительных искусств Нижнего Тагила разместился в трёх старинных зданиях исторического центра города. Главный корпус музея — это здание 1865 года в Русском Городском Купеческом стиле, некогда принадлежавшем тагильскому купцу П. Т. Аксёнову. Там расположено большинство выставочных залов. В этом же здании находится и администрация музея. Возле здания за забором имеется небольшой садик с несколькими парковыми скульптурами. Здание имеет три этажа. На крыше над главным выставочным залом для дополнительного освещения оборудован стеклянный призмообразный купол с окнами. После войны здание было перестроено. Площадь здания была увеличена в полтора раза за счёт большой двухэтажной пристройки. На крыше пристройки музея так же, как и на основной части здания, находится стеклянный призмообразный купол с окнами, но немного меньшего размера.</p>',
            hintContent: "Музей"
        }, {
            balloonMaxWidth: 800
        });

		// Добавление метки на карту
		myMap.geoObjects.add(myPlacemarkDRAM);
		myMap.geoObjects.add(myPlacemarkMUSEUM);
		myMap.controls.add(listBox, { right: 151, top: 5 });
        myMap.controls.add('zoomControl', { right: 5, top: 5 });
	    myMap.controls.add('mapTools', { right: 45, top: 5 });
		myMap.behaviors.enable('scrollZoom'); //Скроллинг


        }
</script>

<style>
        #my-listbox {
            top: auto;
            left: auto;
        }

        body {
        font-family: "Tahoma";
        font-size: 10pt;
    }
	p {
    text-indent: 20px;
   }
    </style>
</head>

<body>
<div id="m_scr" style="width:900px; height:700px"></div>
</body>
</html>

Доброго времени суток. 

Никак не могу разобраться, как можно кластеризовать свои метки.

ObjectManager, установка preset в конструкторе

$
0
0

Добрый день!

Можно ли пояснить причину поведения при переносе установки preset из функций objectManager.objects.options.set и objectManager.clusters.options.set в конструктор на примере из песочницы

Было

ymaps.ready(init);

function init () {
    var myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 10
        }, {
            searchControlProvider: 'yandex#search'
        }),
        objectManager = new ymaps.ObjectManager({
            // Чтобы метки начали кластеризоваться, выставляем опцию.
            clusterize: true,
            // ObjectManager принимает те же опции, что и кластеризатор.
            gridSize: 32,
            clusterDisableClickZoom: true
        });

    // Чтобы задать опции одиночным объектам и кластерам,
    // обратимся к дочерним коллекциям ObjectManager.
    objectManager.objects.options.set('preset', 'islands#greenDotIcon');
    objectManager.clusters.options.set('preset', 'islands#greenClusterIcons');
    myMap.geoObjects.add(objectManager);

    $.ajax({
        url: "data.json"
    }).done(function(data) {
        objectManager.add(data);
    });

}

Стало

ymaps.ready(init);

function init () {
    var myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 10
        }, {
            searchControlProvider: 'yandex#search'
        }),
        objectManager = new ymaps.ObjectManager({
            // Чтобы метки начали кластеризоваться, выставляем опцию.
            clusterize: true,
            // ObjectManager принимает те же опции, что и кластеризатор.
            gridSize: 32,
            clusterDisableClickZoom: true,
            preset: 'islands#greenDotIcon'
        });

    // Чтобы задать опции одиночным объектам и кластерам,
    // обратимся к дочерним коллекциям ObjectManager.
    // objectManager.objects.options.set('preset', 'islands#greenDotIcon');
    // objectManager.clusters.options.set('preset', 'islands#greenClusterIcons');
    myMap.geoObjects.add(objectManager);

    $.ajax({
        url: "data.json"
    }).done(function(data) {
        objectManager.add(data);
    });

}

Получается что опция preset при создании OM полностью игнорируется?

Платное АПИ и статистика запросов к геокодеру, маршрутизатору и панорамам

$
0
0

Добрый день.

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

Проще говоря, есть ли у кабинета разработчика своё АПИ, по которому мы сможем программно получатьстатистику, за текущие сутки?

Центрирование карты со смещением

$
0
0

Всем привет

Карта растянута на всю доступную область, поверх неё находятся полупрозрачные элементы, в том числе список объектов, связанный со списком placemark'ов карты.

При клике на объект, placemark центрируется.

Вопрос такой - как при таком центрировании учитывать смещение центра карты?

Пробовал после наведения на PlaceMark делать фикс центра через getGlobalPixelCenter и setGlobalPixelCenter, но, при происходит лишнее "дёргание". Сначала центрируется на объекте относительно всей карты, а потом добавляется смещение.

Есть ли более правильные способы изменить центр карты, куда будут центрироваться объекты при событии panTo?

найти ближайщию метку относительно другой метки

$
0
0

Здравствуйте, интересует следующее на карте есть множество меток, возможно ли их перебрать и найти ближайщию до необходимой мне ?


Открытие изображения в балуне

$
0
0

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

Ошибка 404 при добавления слоя с тайлами

$
0
0

Добрый день.

Добавляю собственный слой на карту. все хорошо отрисовывается и за пределами идет куча запросов к несуществующим тайлам.

Читал про метод restrict у слоя но не понял как реализовать. Есть у кого пример реализации метода или как то можно по другому обыграть эти ошибки?

Карты для доставки и другие возможности API в примерах

$
0
0

Панель маршрутов

В версии API 2.1.56 появился новый элемент управления для добавления несворачиваемой панели маршрутов на карту. Она подойдёт для проектов, где построение маршрутов — основной сценарий, например, для расчета стоимости доставки.
Также появилась возможность настроить виды транспорта, которые доступны в панели.

Примеры:
Как настроить панель маршрута
Карта для расчета стоимости доставки

Анализ данных на карте

GeoQuery — это набор вспомогательных методов API для работы с геообъектами. 
Мы добавили прикладные примеры использования geoQuery для задач доставки: API Карт поможет определять тарифную зону по адресу пользователя или проанализировать треки водителей. 
Также появился пример работы с редактором круга.

Примеры:
Как определить попадание адреса в зону доставки
Как сравнить фактический трек водителя с планом
Как рисовать и редактировать круг на карте

Маркеры на панорамах

На панорамах Яндекса объекты могут быть отмечены маркерами: так обозначены адреса домов и станции метро. Кроме того, можно добавить собственную метку на панораму. 
События маркеров можно использовать в логике сайта, например, отмечать, где находится выбранный адрес на карте.

Примеры:
Как добавить свою метку на панораму
Как обрабатывать клик по маркеру панорамы

Команда API Яндекс.Карт

Возможно ли указать населенный пункт вместо координат в Json`e?

$
0
0

Возможно ли при создании json массива вместо координат передовать название населенного пункта? Сейчас работает только с координатами((  Задача необходимо чтобы точки в json массиве были на карте при загрузке

Hover для custom balloon маршрута

$
0
0

Добрый день! 

Возможно ли у route при установке  своего содержимого routeBalloonContentLayout, вызывать его при ховере?

что-то типо того:

var paths = route.getActiveRoute().getPaths(i);
route.events.add('mouseenter', function (e) {
   paths.balloon.open()
});

Viewing all 7380 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>