Здравствуйте! Такой вопрос, есть ли возможность проложить маршрут с несколькими точками на вашей карте из другого приложения. Используя вашу документацию можно проложить маршрут только из одной точки в другую ( https://tech.yandex.ru/yandex-apps-launch/maps/doc/concepts/yandexmaps-android-app-docpage/ ). А есть ли возможноть протянуть через пару точек ?
Есть такой вот код: http://jsfiddle.net/avdjbsn8/
Под него я настроил загрузку данных через ajax.
Работает всё идеально, единственное я хочу кое что поменять.
При первом клике на балун его не видно несколько секунд (на время загрузки).
Как сделать так, чтобы при этом первом клике моментально открывался балун с надписью "Идет загрузка данных...", а после того как данные были получены через ajax они внеслись в сам балун.
Это уже реализовано тут: https://tech.yandex.ru/maps/jsbox/2.1/balloon_ajax
Но я использую objectmanager, и у меня не получается прикрутить это к моему коду.
Всё что я смог сделать, это вот: http://jsfiddle.net/obLdkhh4/
Работает, но почему-то только для первой метки. Если загружать еще, то эффекта не даёт.
Всем привет!
Не нашел в документации, возможно ли прокручивать карту не одним, а двумя сдвоенными пальцами на мобильных устройствах?
Просто задисаблить или прокрутка одним пальцем не подходит...
Благодарю
Для searchControl устанавливаются опции:
var searchControl = myMap.controls.get('searchControl');
searchControl.options.set("width", "400px");
searchControl.options.set("useMapBounds", true);
Хочется, чтобы при поиске на первых местах были адреса, которые находятся в текущей видимой области (хорошо бы и ближайшие к области тоже).
Но мы видим следующее:
Почему на первом месте Екатеринбург, а не Нижний новгород?
Что надо сделать для желаемого результата?
Рассчитываю расстояние между двумя точками по формуле :
корень квадратный( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ), получаю расстояние между двумя точками, только не понятно в каких единицах,
по удаленности правильно рассчитывает формула. только в каких единицах мы получаем расстояние? Мне нужно это в км перевести ,
Как это сделать?
Подсмотрел как реализовывается Расчет стоимости доставки на постах раньше.
Все хорошо работает, но понадобилось добавить функцию, что конечный адрес можно было ввести с внешнего поля формы, а не на той что на карте или кликом по самой карте. Подскажите как можно такое сделать, пробовал совместить с SearchAddress, но как то не выходит.
Вот тестовый домен http://vartan.sstest.ru/dostavka
Мы используем платное API и наш клиент жалуется, что по Уссурийску маршруты строятся несколько странно.
Тут с ним сложно не согласиться. Вот типичный пример, который можно проверить в песочнице:
ymaps.ready(init); function init() { var myMap = new ymaps.Map("map", { center: [43.76, 131.8], zoom: 9 }); ymaps.route([ [43.83, 131.63], [43.8, 131.6], [43.76, 132] ]).then(function (route) { myMap.geoObjects.add(route); }); }
Здесь мы видим, что после второй точки маршрут уходит куда-то в дебри для разворота, что увеличивает маршрут на приличное количество километров.
Что это?
Кривой граф дорог? Не выставлены какие-то параметры маршрутизации?
Как нам избежать такой ситуации?
Здравствуйте.
Есть кластеры, у них, внутри balooncontentbody находится ссылка на страницу.
Пытался получить доступ к ней по id,
типа document.getElementById и $('#ссылка') - не получается.
Через какой объект нужно взаимодействовать и каким методом?
Есть метки где собраны несколько меток и они отображаются кружком http://prntscr.com/f4emh6
Как эту метку заменить на свою на эту http://prntscr.com/f4en7p
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="http://api-maps.yandex.ru/2.1/?load=package.standard&lang=ru-RU" type="text/javascript"></script> <div id="map" style="width:400px; height:300px"></div> <a href="#" class="goto" data-map="Москва">Москва</a><br> <a href="#" class="goto" data-map="Киев">Киев</a><br> <a href="#" class="goto" data-map="Екатеринбург">Екатеринбург</a><br> <a href="#" class="goto" data-map="Одесса">Одесса</a> <script> ymaps.ready(init); function init() { var myMap = new ymaps.Map('map', { center: [55.753994, 37.622093], zoom: 10, controls: [] }); destinations = { 'Москва': [55.753559, 37.609218], 'Санкт-Петербург': [59.938531, 30.313497], 'Екатеринбург': [56.829748, 60.617435], 'Одесса': [46.466444, 30.7058] }, $('.goto').on('click', function(e){ e.preventDefault(); var pos = $(this).data('map'); console.log(pos); // переходим по координатам myMap.panTo(destinations[pos], { flying: 1 }); }); var myPlacemark = new ymaps.Placemark(destinations['Москва'], { }, { iconLayout: 'default#image', iconImageHref: 'map-icon.png', iconImageSize: [79, 96], iconImageOffset: [0, -50], }); myMap.geoObjects .add(myPlacemark); } </script>
Есть карта и ссылки с data атрибутами, внутри которых записаны адреса. По клику на ссылку должен происходит переход (не обязательно плавный) или новая загрузка карты с этим самым адресом вн. дата атрибута данной ссылки.
destinations не подходит для данной цели, потому как редактирование адресов не через скрипт будет происходит, а с помощью задания этих самых адресов внутри data-map.
Вопрос: как можно поправить скрипт, чтобы формировалась карта с меткой (и маркером к ней) + по клику на ссылку происходил переход к адресу ссылки, с центрированием и отображением маркера у данного адреса?
Здравствуйте!
Имеется ли какое-либо ограничение на количество запросов к маршрутизатору, кроме 25000 в сутки для бесплатной версии js-API?
В моём проекте происходит построение большого количества маршрутов за раз, однако больше 1147 маршрутов (год основания Москвы? ;)) ни разу не удавалось получить за раз. При этом при повторном подключении маршруты снова строятся, но на каком-то моменте сервер перестает отвечать. Пробовал вводить таймауты и кликать руками — всё равно упираюсь в какой-то предел, 1147 или меньше.
Если убрать воду, то мой код выглядит следующимо бразом:
По клику на карту определяются координаты, для которых требуется построить маршрут, далее рекурсивно вызывается функция построения маршрута после того, как пришёл ответ от сервера для предыдущего маршрута. И так до тех пор, пока все координаты не будут обработаны.
function init () { var targetCoords = [55.848527, 37.583103], myMap = new ymaps.Map('map', { center: targetCoords, zoom: 11 }, { searchControlResults: 1, searchControlNoCentering: true }), currentRoute, sourceCoordsArr, targetPoint; routesArr = []; var sourceCoordsArrLength; myMap.events.add('click', onMapClick); function evalRoute(source, target){ var currentRoute = new ymaps.multiRouter.MultiRoute( { referencePoints: [source, target], params: { routingMode: 'masstransit'}, }); currentRoute.events.add("activeroutechange", function (event) { var routes = currentRoute.getRoutes(); for (var i = 0; i<routes.getLength(); i++){ // some code } routeArr.push(route); console.log('' + getCurrentTime() + '\t' + routeArr.length+' ' + route); if(routeArr.length == sourceCoordsArrLength){ // some code } else{ evalRoute(sourceCoordsArr[sourceCoordsArrIndex++], targetCoords); console.log('' + getCurrentTime() + '\t' +sourceCoordsArrIndex+' waitig..'); } }); } function evalCoordinates(targetCoords){ // some code return sourceCoordsArr; } function onMapClick (e) { metricArr = []; clearTargetPoint(); targetCoords = e.get('coords'); targetPoint = new ymaps.Placemark(targetCoords, { iconContent: '' }, { preset: 'islands#blueCircleIcon' }); myMap.geoObjects.add(targetPoint); // Generate source coordinates sourceCoordsArr = evalCoordinates(targetCoords); sourceCoordsArrLength = sourceCoordsArr.length; str = '' + sourceCoordsArrLength + ' точек'; evalRoute(sourceCoordsArr[sourceCoordsArrIndex++], targetCoords); } } ymaps.ready(init);
Добрый день!
Подскажите как имея полигон «А» построить полигон «Б» с вершинами +10км от каждой из вершин полигона «А»
Создал из исходного изображения разрешением 15000×10000 тайлы для масштабов с 3 до 6, и из них сделал собственную карту по примеру.
Моей целью было разместить начало координат в центре исходного изображения, правому верхнему углу его задать координаты (y, x): (5000, 7500), нижнему левому координаты (-5000, -7500). Протяжённость координат равна сторонам исходного изображения.
С помощью подсказки поддержки про использование размера мира на максимальном масштабе получилось задуманное через декартову систему координат:
/* до функции создания карты поместил вычисление размера мира для максимального масштаба*/
var MAX_ZOOM = 6;
var worldSize = Math.pow(2, MAX_ZOOM) * 256;
/* в функции же создания карты разместил проекцию так:*/
projection: new ymaps.projection.Cartesian([[5000-worldSize, -7500], [5000, worldSize-7500]], [false, false]))
Т. е. для координаты (y) нижнего левого угла исходного изображения из отрицательной желаемой координаты вычел размер мира, а для координаты (x) верхнего правого угла из размера мира вычел желаемую для него.
Для размещения начала координат в левом верхнем углу исходного изображения и совпадения мировых координат с пиксельными задание проекции будет таким:
projection: new ymaps.projection.Cartesian([[worldSize, 0], [0, worldSize]], [false, false])
А если есть желание сделать отрицательное значение (y) для нижнего края, то так:
projection: new ymaps.projection.Cartesian([[-worldSize, 0], [0, worldSize]], [false, false])
Собственно для совпадения мировых координат с размерами исходного изображения требуется лишь указание размера мира для максимального масштаба в качестве одной из координат: для нижней левой — y, для верхней правой — x. Оказывается довольно просто.
Добрый день, вопрос такой:
у меня есть маршрут
var multiRoute_1 = new ymaps.multiRouter.MultiRoute({ // Описание опорных точек мультимаршрута. referencePoints: [ "Москва","Тула" ], params: { results: 1 } }); myMap.geoObjects.add(multiRoute_1);
к этому маршруту, должна быть возможность, добавить или удалить статические точки, например хотим добавить к маршруту, Орел и Калугу.
Как это реализовать? Через удаление и новое добавление? Или есть возможность редактирвоания этого маршрута на карте?
И еще одно но, нужно получать километраж при удалении или добавлении.
Что то типа:
multiRoute_1.model.events.add("requestsuccess", function (event) { console.log(multiRoute_1.getRoutes().get(0).properties.get("distance").value); });
Какие есть варианты?
Уже 5 часов не могу понять в чем проблема.
http://jsfiddle.net/rom4i/krnxxw5f/
На карте примерно 10тыс. меток с включенным кластеризатором. Казалось бы работает всё хорошо, однако я заметил, что иногда почему-то при зуме изсчезают метки. Просто пропадают. На картинке, которую я сделал (http://i.imgur.com/16jhNXX.jpg), это хорошо продемонстрировано.
Если отключить кластеризацию, метки пропадать перестают. Но, как вы понимаете, когда 10 тысяч меток на карте это делать нельзя.
Добрый день!
Помогите пожалуйста разобраться.
Суть задачи, ограничить вывод результатов определенным радиусом от заданной точки.
Но даже в примере тут https://tech.yandex.ru/maps/jsbox/2.1/search_control_ppo
если дописать в опции
strictBounds: true,
boundedBy: myMap.getBounds(),
useMapBounds: true
то все-равно, при передвижении карты мышью, результат поиска перестраивается и показывает новые точки. мне же нужно, чтобы они хотя бы остались такими же, как при первой выдаче результатов, ограниченные границами.
возможно ли это? и как?
Заранее спасибо!
Необходимо вывести множество объектов на одной карте, с использованием геокодера, который преобразует адрес в координаты. Ниже код для одного объекта, а вот как адаптировать его под вариант с множеством, пока не понимаю.. Может быть кто-то владеет информацией, буду очень признательна за подсказку!
ymaps.ready(init);
function init(){
var geocoder = new ymaps.geocode(
// Строка с адресом, который нужно геокодировать
'ПЕРЕМЕННАЯ АДРЕСА',
// требуемое количество результатов
{ results: 1 }
);
// После того, как поиск вернул результат, вызывается callback-функция
geocoder.then(
function (res) {
// координаты объекта
var coord = res.geoObjects.get(0).geometry.getCoordinates();
var map = new ymaps.Map('yandex_map', {
// Центр карты - координаты первого элемента
center: coord,
// Коэффициент масштабирования
zoom: 10,
// включаем масштабирование карты колесом
behaviors: ['default', 'scrollZoom'],
controls: ['mapTools']
});
var myPlacemark = new ymaps.Placemark(
coord, {
balloonContent: 'ПЕРЕМЕННАЯ СОДЕРЖИМОГО БАЛУНА'
}
);
// Добавление метки на карту
map.geoObjects.add(myPlacemark);
// устанавливаем максимально возможный коэффициент масштабирования - 1
map.zoomRange.get(coord).then(function(range){
map.setCenter(coord, range[1] - 1)
});
// Добавление стандартного набора кнопок
map.controls.add('mapTools')
// Добавление кнопки изменения масштаба
.add('zoomControl')
// Добавление списка типов карты
.add('typeSelector');
}
);
}
Заранее спасибо!
Здравствуйте. Есть блок с картой, подключенной через API Яндекс Карт. На карту добавляю элемент управления GeolocationControl:
var geolocationControl = new ymaps.control.GeolocationControl(); myMap.controls.add(geolocationControl);
Нужно при определённом условии изменить положение элемента. Для этого нужно поменять опции float и position. С первым проблем нет:
geolocationControl.options.set('float','none');
А вот поменять position не получается - при любых попытках переходит в верхний левый угол (видимо, что-то не так пишу). Подскажите, как его правильно прописать?
Мне нужно сформировать карту следующим образом, метки делятся на две категории (район, медицинское учреждение). Сначало на карту выводятся метки районов. При выборе метки с районом текущие метки удаляются и прорисовываются метки медицинских учреждений относящихся к этому району. Любая метка содержит информацию которую нужно вывести в балун при выборе. Пример того что я уже сделал miac58.ru/maps_lpu Сейчас информацию меток региона я вывожу в хинт, что бы клик по метки использовать как событие для "открытия" региона. Я хочу сделать везде балун, а событие назначить на ссылку типа "Подробнее" в подвале балуна. Проблема в том что я не увижу объекты из события onclick ссылки. Ознакомившись с документацией, с примерами я вроде понял что мне нужно описать шаблон балуна а там я смогу описать событие клика по ссылке. Правильно? Вот этим примером я пользовался. У меня не получается( Помогите.
var myMap; var his, hisZoom, hisCenter; var listBoxControl; ymaps.ready( function (){ myMap = new ymaps.Map ( "map",{ center: [53.19, 44.43], zoom: 8, controls: ['zoomControl', 'typeSelector', 'fullscreenControl'] } ); var MyBalloonLayout = ymaps.templateLayoutFactory.createClass( '<div class="popover top">' + '<a class="more" href="#">Подробнее</a>' + '<div class="arrow"></div>' + '<div class="popover-inner">' + '$[[options.contentLayout observeSize minWidth=235 maxWidth=235 maxHeight=350]]' + '</div>' + '</div>' , { build: function () { this.constructor.superclass.build.call(this); this._$element = $('.popover', this.getParentElement()); this.applyElementOffset(); this._$element.find('.more') .on('click', $.proxy(this.onMoreClick, this)); }, onSublayoutSizeChange: function () { MyBalloonLayout.superclass.onSublayoutSizeChange.apply(this, arguments); if(!this._isElement(this._$element)) { return; } this.applyElementOffset(); this.events.fire('shapechange'); }, applyElementOffset: function () { this._$element.css({ left: -(this._$element[0].offsetWidth / 2), top: -(this._$element[0].offsetHeight + this._$element.find('.arrow')[0].offsetHeight) }); }, onMoreClick: function (e) { alert('УРА!'); }, getShape: function () { if(!this._isElement(this._$element)) { return MyBalloonLayout.superclass.getShape.call(this); } var position = this._$element.position(); return new ymaps.shape.Rectangle(new ymaps.geometry.pixel.Rectangle([ [position.left, position.top], [ position.left + this._$element[0].offsetWidth, position.top + this._$element[0].offsetHeight + this._$element.find('.arrow')[0].offsetHeight ] ])); }, _isElement: function (element) { return element && element[0] && element.find('.arrow')[0]; } } ); var MyBalloonContentLayout = ymaps.templateLayoutFactory.createClass( '<h3 class="popover-title">$[properties.balloonContentHeader]</h3>' + '<div class="popover-content">$[properties.balloonContentBody]</div>' ); var objectManager = new ymaps.ObjectManager({geoObjectBalloonLayout: MyBalloonLayout, geoObjectBalloonContentLayout: MyBalloonContentLayout}); $.ajax({ url: "/maps_lpu/json" }).done(function(data) { objectManager.add(data); }); myMap.geoObjects.add(objectManager); button = new ymaps.control.Button({ data : { content : 'Назад', title : 'Назад' }, options : { visible: false } }); button.events.add('click', function () { button.options.set('visible', false); myMap.setCenter(hisCenter, hisZoom); objectManager.objects.removeAll(); objectManager.add(his); myMap.geoObjects.add(objectManager); }); myMap.controls.add(button, {float:'left'}) var myListBoxItems = []; //здесь вырезано заполнение списка (php) var listBoxItems = myListBoxItems.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: false, filters: listBoxItems.reduce(function(filters, filter) { filters[filter.data.get('content')] = filter.isSelected(); return filters; }, {}) } }); myMap.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) { // Применим фильтр. objectManager.setFilter(getFilterFunction(filters)); }); function getFilterFunction(categories){ return function(obj){ var content = obj.properties.typeTitle; return categories[content] } } });
Добрый вечер!
В конструкторе карт есть метка с обозначением бензоколонки. Не подскажите, как называется эта метка (интересует формы и круглая и вопросиком, и разновидности цветов как в конструкторе)? Примеры из документации и песочницы смотрел, они другие.:(
Спасибо!
P.S. В песочнике и глиф иконках бустрапа такую не нашел.
Я так понимаю, что по аналогии из песоницы должно быть что-то типа такого:
preset: 'islands#redGasPumpIcon'. Поправьте меня, пожалуйста, если я ошибаюсь