Клуб API Карт

июнь 2012
"Скачущие" метки и другие проблемы c API 2.0
grey4eg
1 июня 2012, 12:13

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

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

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

Грешил на совместимость  jQuery 1.7 и fancybox, но их отключение и смена версии результата не дало. Пожалуйста, посдкажите, в чем может быть дело?

Вопрос 2: код формирования меню в API 2.0 именился:

 // Добавление элемента в список
                function addMenuItem(group, map) {
                // Показать/скрыть группу геообъектов на карте
                    $("<a class=\"title\" href=\"#\">" + group.properties.get('name') + "</a>")
                        .bind("click", function () {
                         var link = $(this);
                            // Если пункт меню "неактивный", то добавляем группу на карту,
                            // иначе - удаляем с карты
                            if (link.hasClass("active")) {
                                map.geoObjects.remove(group);
                            } else {
                                map.geoObjects.add(group);
                            }
                            // Меняем "активность" пункта меню
                            link.toggleClass("active");
                            return false;
                        })
                        // Добавление нового пункта меню в список
                        .appendTo(
                            $("<li></li>").appendTo($("#menu"))
                        );
                }

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

Вопрос 3: в ИЕ ниже 9-го, карта и меню работают, но метки, подгруженные при помощи YMapsML некликабельны. Как можно побороть этот недуг?

Все указанные проблемы можно глянуть по ссылке

 

6 комментариев
как сместить тайлы?
dneprov777
1 июня 2012, 12:36

Есть карта нарезанная на тайлы, она в проекции sphericalMercator, но есть проблема - она немного не точно привязана (перепривязать не вариант - тайлов много и они такие какие есть). Вопрос - как внести поправку в проекцию для этого слоя, чтобы он немного сдвинулся?

5 комментариев
Как убрать полосу прокрутки у балуна?
SergeyMenshikh
1 июня 2012, 12:50

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

При задании содержимого балуна через свойство balloonContentBody или contentBodyLayout, или contentLayout при его отбражении появляется полоса прокрутки. Высота содержимого изначально неизвестна и может меняться. Пробовал использовать совйство minHeight, не помогает.

13 комментариев
Интеграция Яндекс.Пробок на сайт
ovsiannikoff.o
1 июня 2012, 16:17

Уважаемые "форумчане - яндексовцы"! :)

Задумана, на первый взгляд, простая задача:

Неоходимо создать и интегрировать на сайт под управлением Битрикс Яндекс.Карту с текущим отображением ситуации по пробкам города (Краснодар).

Иформер для нашего города МЕГА-поисковиком еще не разработан. 

Прошу вашего совета - в какой последовательности и что необходимо делать по пунктам. Отдельная благодарность тем Человекам, которые и ссылкой снабдят ответ! (в т.числе. из того же Яндекса) 

Уважаемый специалист Яндекса дал мне крайне многогранную ссылку: http://help.yandex.ru/maps/?id=1055612 ,

но, ...., с наскока даже сразу  не подступишься ко всему этому многообразию..

 

3 комментария
Последованное выполнение функций
igon.ru
1 июня 2012, 19:40

Подскажите, пожалуйста, как выполнить эти асинхронные функции ПОСЛЕДОВАТЕЛЬНО, то есть одна за другой?

 

this.getMap().panTo(coords, {delay: 100});

this.getMap().setZoom(12, {duration: 1000});

 

Дабы была красота... =)))

4 комментария
map.copyrights.add а как удалить?
dneprov777
1 июня 2012, 23:23

Задача: есть несколько источников тайлов, нужно внизу карты менять копирайт в зависимости от выбранного источника, только что-то не могу найти как удалить уже добавленный копирайт. Да и вообще про copyrights что-то не могу найти в описании api 2.0

 

заранее спасибо за помощь

3 комментария
поиск по карте
atimchinskiy
2 июня 2012, 04:27

Помогите пожалуйста настроить поиск по карте для апи 2,не стандартным компонентом,а своим,потому что стандартный как то работает непонятно

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

 

$('#search_form').submit(function () {
var search_query = $('input:first').val();

ymaps.geocode(search_query, {results: 1}).then(function (res) {
res.geoObjects.options.set({
cursor: 'grab', // курсор на метках будет "рукой"
draggable: true // метку можно будет перемещать
}) ;
myCollection.removeAll();
myCollection = res.geoObjects;
myMap.geoObjects.add(myCollection);
});
return false;
});

но как получить координаты добавленой метки?
11 комментариев
disable() и enable()
mouseseen
2 июня 2012, 09:38

Здравствуйте. Необходимо по клику на кнопке1 включить обработчик событий click2,а по клику на кнопке2 выключить его:

var click2 = new YMaps.Events.observe(overlays1, overlays1.Events.Load, function () {
overlays1.get(0).forEach(function (obj) {
var click1 = new YMaps.Events.observe(obj, obj.Events.Click, function (obj) {
var idObj = obj.id;
overlays1.get(0).remove(obj);
overlays1.remove(obj[0]);
YMaps.jQuery.ajax({
type: "POST",
url: "testurl.php",
data: "id="+idObj,
success: alert("Метка удалена")
});
/*return false;*/
});
});
});
click2.disable();
YMaps.jQuery("#button1").click(function(){
click2.enable();
});
YMaps.jQuery("# button2").click(function(){
click2.disable();
});

 Обработчик click2 влючается, но не выключается. Почему так?

5 комментариев
Еще раз про центрирование по объекту
grishkashishka
2 июня 2012, 11:48

Пытаюсь разобраться с центрированием по объекту. Написал обработчик по клику на объект

this.myPlacemark.events.add('click', function (e) {
                        var coords = e.get('target').geometry.getCoordinates();
                        var map = e.get('target').getMap();
                        var x = coords[0];
                        var y = coords[1];
                        var bounds = new YMaps.GeoBounds(new YMaps.GeoPoint(x-0.1, y-0.1), new YMaps.GeoPoint(x+0.1, y+0.1));
                        map.setBounds(bounds);
                      });

 

Но центрирование не происходит. Подскажите, что не так?

 

P.S.: переделал балун и на карту, сверху накладываются мои полупрозрачные дивы... типа под интерфейс, поэтому необходимо сместить центрирование при выводе балуна таким путем.

 

Вот тут хороший пример для замены балуна, но в 2.0 он не работает...

http://api.yandex.ru/maps/doc/jsapi/1.x/examples/mapballoonlayout.html

5 комментариев
Пользовательский слой карты
cashtrader
2 июня 2012, 15:49

Есть несколько вопросов по пользовательским картам, поиск не особо помог.

 

Центрирование... в поиске куча примеров но ни в 1м (либо плохо искал..) нет информации можно ли просто сделать выравнивание по центру пользователькой карты, либо узнать полный размер карты и на основе её сделать нормальное центрирование.

* в общем не просчитывать для каждой карты ручками центр.

 

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

 

Есть ли уменьшенная копия файла combine.xml с меньшим количеством лишних функций (-всякие пробки т.п)

* ~900кб не лучший вариант, когда карта весит чуть более 200

 

 

Спасибо.

12 комментариев
Заголовок не указан
sergei.murko
3 июня 2012, 15:58

Не так давно начал изучать API Яндекс.Карт! Поэтому прошу сильно не судить!

Сижу на 2 версии и не могу понять, как отследить изменение местоположения карты?

В 1 версии был jquery... есть ли он во второй версии? и если даа то пример пожайлуста как его узнуть?

Хочу попробывать сделать file_get_content с помощью .get

 

И какое максимальное количество точек можно добавить на карту с помощью JS? Теоретический бесконечностью, практический можно сьесть всю оперативу, и юзеру будет не айс... У кого какой оптимал?

Про вариант с тайлами, думаю сделать оптимизированную подгрузку!

1 комментарий
Отметка точки на карте
mr.postoev
3 июня 2012, 17:33

Есть необходимость дать пользователю возможность отметки точки на карте (указание раположения магазина) и переноса данных о координатах в какой нибудь <input type="hidden" /> (для последующего переноса в базу).

 

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

5 комментариев
метка,координаты
Удаление объектов, загруженых через geoXml.load
dejurin
3 июня 2012, 20:07

У меня есть:

ymaps.geoXml.load("http://site.ru/data1.xml").then(function (res) {

     myMap.geoObjects.add(res.geoObjects);

});

 

Где я загружаю объекты, которые распределены по файлам например: data1.xml, data2.xml, вопрос как загружать заново в ymaps.geoXml.load чтобы небыло "налипания", т.е. при изменении ymaps.geoXml.load на data2.xml объекты от data1.xml остаются, что делать в этом случае?: делать реaрешь функцией, удалять старые объекты или я не правильно загружаю ymaps.geoXml.load?

Так же прошу показать как удалять старые объекты или рефреш делать?

Загружаю я через jQuery примерно так: 

 

                $(".cc").toggle(

                function () {

                    var str = cat_get_id(this);

                    ymaps.geoXml.load("http://site.ru/" + str+".xml").then(function (res) {

                     myMap.geoObjects.add(res.geoObjects);                        

                     alert(str);

                    });...

6 комментариев
Получение содержимого балуна
grishkashishka
4 июня 2012, 08:33

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

Placemark.options.getNative('balloonContent') - не работает

1 комментарий
Возможно ли временное отключение кластеризатора?
yegor-l
4 июня 2012, 12:43

При максимальном зуме некоторые кластеры не раскладываются на отдельные точки из за близости координат. В связи с этим хотелось бы отключать кластеризацию на ближнем зуме.

Пока сделал вот так: 

myMap.zoomRange.get(myMap.getCenter()).then(function (range) {
   if(range[1] == myMap.getZoom()){
      if (cluster.options.get('gridSize') > 1) {
         cluster.options.set({gridSize: 1});
      }else{
         cluster.options.set({gridSize: 64});
      };
   };
});

 

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

Может имеет смысл сделать такую фичу стандартной опцией, ибо на максимальном зуме надобность в группировке практически наверняка отпадает?

 

UPD: опция maxZoom не поможет. Она отключает с конкретного масштаба, а хочется на крайнем, независимо от того какой масштаб доступен для местности.

5 комментариев
Есть ли возможность автоматически закрашивать области / регионы
Дмитрий Рождественский
4 июня 2012, 14:25

Очень бывает нужно выделать какую-то одну область на карте,

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

или например, федеральный округ ПФО состоящий из отдельных областей (в том числе и Нижегородская обл) - раскрасить в разные цвета. 

 

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

 

 

4 комментария
ломаная
передача параметров в init
Alex AC
4 июня 2012, 17:52

можно ли как-то передать параметры таким образом

ymaps.ready(init(par1, par2));

function init (par1, par2) {
    var theGeocoder = ymaps.geocode(par1, { results: 1 });
    theGeocoder.then(
   function (res) {
        var firstGeoObject = res.geoObjects.get(0);
        var clientmap = new ymaps.Map("YMapsID", {
            center: firstGeoObject.geometry.getCoordinates(),
            zoom: 16,
            type: "yandex#map" });
        clientmap.controls.add("zoomControl").add("mapTools").add(new ymaps.control.TypeSelector(["yandex#map", "yandex#satellite", "yandex#hybrid", "yandex#publicMap"]));   
        PlacemarkClient = new ymaps.Placemark( firstGeoObject.geometry.getCoordinates(), { balloonContent: par2}, { preset: 'twirl#lightblueIcon'});
        clientmap.geoObjects.add(PlacemarkClient);
    },
    function (err) {
       alert("Ничего не найдено" + err.message);
    }
    )

этот код работать не хочет с ошибкой 'geocode is not a function'

9 комментариев
API 2.0,геокодирование
Вычисление точки вектора + координаты точки перпендикуляра
Удалённый пользователь
4 июня 2012, 17:53

Добрый день!

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

Поясню, зачем это нужно. На карту я добавляю несколько линий, это магистральные каналы между городами. Между каждым городом есть по 2 канала, соответственно рисуются по 2линии. Первая с точки А до точки Б, а вторая с точки Б до точки А. Если канал между городами упал, то линия подкарашевается красным цветом, если канал живой, то зеленым. Линии накладываются друг на друга, т.к. имеют только 2 точки и это вызывает неудобства в просмотре карты.

Чего хочется получить: 

1) Из двух точек вычислить вектор  - такой метод есть в Jsp API 1 (diff - класса YMaps.Point - Возвращает разницу

координат двух точек.) а что можно использовать в Jsp API 2.0 ?

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

 

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

 

 Ссылка на скрин шот линий 

 

2 комментария
Ошибка в реакции на сочетание свойств карты
zhukdl
4 июня 2012, 18:09

Привет

Начал переводить свой компонент на поддержку второй версии АПИ, наткнулся на такой "косяк" :)

Если включен зум по колесу мыши, то rightMouseButtonMagnifier можно выключить, иначе не выключить.

 

  ymaps.ready(initialize);
 function initialize () {
var map, mapcenter, mapcenterAsArray, geoResult, geoRoute;
var searchControl, searchControlPMAP;
    mapcenterAsArray = [59.91558195652399, 30.40107764303685];    
    map = new ymaps.Map("YMapsID", {    
    center: mapcenterAsArray,
    zoom: 14,
    behaviors: ['default']
    });
map.behaviors.enable('dblClickZoom');
map.behaviors.enable('scrollZoom');
map.behaviors.disable('rightMouseButtonMagnifier');
map.behaviors.disable('drag');

 

 

  ymaps.ready(initialize);
 function initialize () {
var map, mapcenter, mapcenterAsArray, geoResult, geoRoute;
var searchControl, searchControlPMAP;
    mapcenterAsArray = [59.91558195652399, 30.40107764303685];    
    map = new ymaps.Map("YMapsID", {    
    center: mapcenterAsArray,
    zoom: 14,
    behaviors: ['default']
    });
map.behaviors.enable('dblClickZoom');
map.behaviors.disable('scrollZoom');
map.behaviors.disable('rightMouseButtonMagnifier');
map.behaviors.disable('drag');

 

behaviors: ['default'] добавил уже в конце, думал вдруг поможет :)

 

И второй вопрос - может где и проскакивало: Как я могу определить набор предопределенных типов карт, т.е., если хочу дать выбор только обычным (не народным типам), ну или свой тип закинуть

 

Спасибо

2 комментария
Закругленные углы у карты
Tsybenko Alexander
4 июня 2012, 21:00

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

Подскажите как закруглить углы карты

border-radius: 15px;
-moz-border-radius: 15px;
-webkit-border-radius: 15px;

Работает только в фф.

3 комментария