Клуб API Карт

февраль 2011
Заменить стандартный балун в результатах поиска
hectata
1 февраля 2011, 03:21

На карте реализованна функция поиска

map.addControl(new YMaps.SearchControl());

Хотелось бы, чтобы после завершения поиска при нажатии, в данном случае, на результат "Ленинский проспект, 13"

вместо стандартного балуна появлялся балун следующего вида:

YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
                var myHtml = "Значение: " + mEvent.getGeoPoint() + "<br>"+'<form id="formadd" name="formadd_point" method="post" action="outpoint2.php"><p>Название: <input name="namepoint" type="text" size="20" maxlength="80" /></p><p>Описание: <textarea name="descriptpoint" cols="20" rows="5"></textarea></p><p>Иконка: <select name="user" size="1"></select></p><input name="pcoord" type="hidden" value="'+mEvent.getGeoPoint()+'" /><p><input name="subpoint" type="submit" value="Добавить" /></p></form>';
                map.openBalloon(mEvent.getGeoPoint(), myHtml);
});

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

3 комментария
API 1.x
Не работает $.ajax в jquery
mikeles87
1 февраля 2011, 18:38

Вообщем после загрузки балуна $.ajax  не работает

Собственно вот так открывается балун

YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) 

{

points = mEvent.getGeoPoint() 

                var myHtml = '<table width="100" border="0" cellspacing="0" cellpadding="0"><tr><td><select name="region_list" class="input" id="region_list"><option value="1">1</option></select></td></tr><tr><td><select name="city_list" class="input" id="city_list"><option value="1">1</option></select></td></tr><tr><td><label><select name="street_list" class="input" id="street_list"><option value="1">1</option></select></td></tr><tr><td><select name="house_list" class="input" id="house_list"><option value="1">1</option></select></td></tr><tr><td><input type="submit" name="btn_save" id="btn_save" value="Запомнить" /></td></tr></table>'+'Значение: ' + points

                map.openBalloon(mEvent.getGeoPoint(), myHtml);

 var R_ID =""; //ИД Региона

 var C_ID =""; //ИД Города

 var  S_ID =""; //ИД улицы

  var  H_ID =""; //ИД улицы

 load_category("region_list","region","1")

  $('#region_list').change(function(){

  //Загружаем  

 

select город

R_ID = $("#region_list option:selected").val()  

load_category("city_list","city",R_ID) 

}) 

 

 

  $('#city_list').change(function(){

 //Загружаем select улицу

  C_ID = $("#city_list option:selected").val() 

 

load_category("street_list","street",C_ID)

 })

$('#street_list').change(function(){

 //Загружаем  

 

select дом

  S_ID = $("#street_list option:selected").val()

 load_category("house_list","house",S_ID) 

 })

H_ID = $("#house_list option:selected").val()

//При нажатии отправляем POINTS и IDs региона, города, улицы, дома

$('#btn_save').click(function(){ 

save_build(R_ID,C_ID,S_ID,H_ID,points)

 })

                 });

Все загружается, подгружается и все хорошо. Но в функции отправки данных не работает $.ajax 

function  save_build(R, C, S, H, points)

{

//R - ИД регион

//C - ИД улицы

//S - ИД улицы

//H - ИД дома

//points - долгота, широта

ids = R+","+C+","+S+","+H

alert(ids+"points:"+points)

$.ajax({

  url: "../function/CRUD_address_load.php",

  type: 'post',

  dataType: 'json',

  data: ({id:ids, point:points, type_op:"W"}),

  success: function(json)

  { alert(json.POINTS)  }   }) }

 

alert(json.POINTS)Ответ в JSON 

Если функцию использовать отдельно, то есть кнопку создать не создаваемую javascript, то все работает.Кто знает, где копать?

9 комментариев
jQuery,API 1.x,балун
Отслеживание изменения масштаба карты
Viacheslav
1 февраля 2011, 21:46

насколько я понимаю, нужно ловить

- событие mousescroll

- клики по контролам управления масштабом ( zoom, smallzoom )

не нашел в документации, как это сделать напрямую, но наверняка уже кто-то изобрел велосипед, поэтому прошу направить в правильном направлении )

5 комментариев
масштаб,события
Добавление меток автобусных остановок, как на основной карте Яндекса
artyom.stv
2 февраля 2011, 00:26

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

Подскажите, пожалуйста, каким образом можно включить отображение автобусных остановок, как они отображаются на http://maps.yandex.ru/ , средствами JavaScript API.

Спасибо.

2 комментария
API 1.x
Получение дополнительной информации по клику на Polyline
Роман Кузьмин
2 февраля 2011, 12:44

Добрый.

Есть Polyline с геопоинтами на ней, при клике на геопоинт я могу получить только координаты через

polyline.setBalloonContent(e.getGeoPoint().toString());

Но кроме координат я хочу проассоциировать с точкой на ломанной другие данные.

Как мне их получить?

5 комментариев
API 1.x
Можно ли задать hint для YMaps.ListBoxItem?
tzhe
2 февраля 2011, 13:40

Создал выпадающий список YMaps.ListBox.

Вопрос: каким образом можно задать hint для каждого элемента списка?

1 комментарий
элементы управления,хинт
Как запустить Jquery-UI
mikeles87
2 февраля 2011, 15:56

При открытии балуна, нужно запустить Jquery-UI для переключения вкладок(TAD)

Наведите на ссылку где почитать)

5 комментариев
jQuery,API 1.x,балун
Выделение улиц на карте
elizavetasimonowa
2 февраля 2011, 18:03

Стоит задача - отметить улицу на карте. Например, так как это сделано в панорамах - улицы для которых возможен просмотр подсвечены на карте.

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

6 комментариев
API 1.x
Скрытие меток из исходного кода
oleksiychuk.v
2 февраля 2011, 18:50

Добрый день.

Есть Яндекс.Карта, работаем через javascript API, на которую нанесено около 500 меток. Все метки при просмотре карты подгружаются из базы.

Все метки можно увидеть в исходном коде, они нанесены обычным способом:

var placemark = new YMaps.Placemark(new YMaps.GeoPoint(37.609218,55.753559));
placemark.name = "Москва";
map.addOverlay(placemark);

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

Заранее спасибо.
3 комментария
API 1.x
Дублируется содержимое балуна
Spearance
2 февраля 2011, 21:54

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

function createPlacemark (point, name, description, cl, link, img, cost) {

var styleName = "my#" + cl;
var s = new YMaps.Style();
s.iconStyle = new YMaps.IconStyle();
s.iconStyle.href = "/i/" + cl +"_icon.png";
s.iconStyle.size = new YMaps.Point(41, 44);
s.iconStyle.offset = new YMaps.Point(-10, -40);

if(cl == "hotel"){
var template = new YMaps.Template(
"<table class=\"balContent\">\
<tr valign=\"top\">\
<td class=\"balLeft\"><img src=\"$[img|/i/gallery/w56.png]\" width= /></td>\
<td class=\"balRight\">\
<a href=\"$[link|/]\">$[name|отель]</a>\
<div>$[description|адрес]</div>\
<div class=\"cost\">$[cost|0]</div>\
</td>\
</tr>\
</table>");
s.balloonContentStyle = new YMaps.BalloonContentStyle(template);
}

s.balloonStyle = {template: new YMaps.LayoutTemplate(myBalloonLayout)};

YMaps.Styles.add(styleName, s);

var placemark = new YMaps.Placemark(point,{style: styleName});

placemark.name = name;
placemark.description = description;
placemark.link = link;
placemark.img = img;
placemark.cost = cost;

return placemark
}

function myBalloonLayout() {
this.element = YMaps.jQuery(
"<div class=\"b-simple-balloon-layout\">\
<div class=\"content\"></div>\
<div class=\"close\"></div>\
<div class=\"tail\"></div></div>");
this.close = this.element.find(".close");
this.content = this.element.find(".content");
this.disableClose = function(){
this.close.unbind("click").css("display", "none");
};
this.enableClose = function(callback){
this.close.bind("click", callback).css("display", "");
return false;
};
this.onAddToParent = function (parentNode) {
YMaps.jQuery(parentNode).append(this.element);
this.update();
};
this.onRemoveFromParent = function () {
this.element.remove();
};
this.setContent = function (content) {
content.onAddToParent(this.content[0]);
};
this.update = function () {
this.element.css("margin-top", this.getOffset().getY());
};
this.getOffset = function () {
return new YMaps.Point(0, -this.content.height() -35);
};
this.setMaxSize = function (maxWidth, maxHeight) {};
};
5 комментариев
API 1.x,балун
Отображение на карте только тех объектов, которые попадают в видимую зону
giovanni10
2 февраля 2011, 22:46
Требуется сделать отображение на карте только тех объектов, которые попадают в видимую зону - т.е. те, которые попадают в ту часть карты, которую просматривает пользователь, а по мере масштабирования (увеличения и уменьшения зоны просмотра) - показывать больше объектов или меньше. А также при перемещении по карте подгружать новые объекты, а "стырые" (которые уже не видны) не грузить на кару. Требуется это так как сразу все наносить не хорошо из их большого количества. Подскажите, пожалуйста, в каком направлении искать ответ на вопрос? Заранее всем спасибо 
6 комментариев
активные области,API 1.x
Про организации
PushAx
2 февраля 2011, 23:38

Просмотрел документацию по АПИ яндекс карт и не нашел как сделать такое:

задать адрес и получить в ответ все организации, находящиеся в этом доме.

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

короче как здесь:

http://maps.yandex.ru/?where


спасибо.

11 комментариев
API 1.x,поиск организаций
Использование YMaps.GeoCollectionBounds.add
e1widget
3 февраля 2011, 10:00

Использую следующий код:

     // Создание обработчика для события window.onLoad
        YMaps.jQuery(function () {
            // Создание экземпляра карты и его привязка к созданному контейнеру
            var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);

            map.setCenter(new YMaps.GeoPoint(60.597259, 56.838056), 12);
            map.addControl(new YMaps.Zoom());

            // Создание группы
            var gCollection = new YMaps.GeoObjectCollection();

            // Создание прямоугольной области
            var gBounds = new YMaps.GeoCollectionBounds();

[НАЧАЛО ЦИКЛА]

        // Геокодирование
        var geocoder = new YMaps.Geocoder([АДРЕС_В_ВИДЕ_СТРОКИ], {results:1});
        map.addOverlay(geocoder);

YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
    if (this.length()) {
        gCollection.add(new YMaps.Placemark(this.options.boundedBy));
        gBounds.add(new YMaps.Placemark(this.options.boundedBy));
    } else {
        alert("Ничего не найдено")
    }
});
 
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (error) {
    alert("Произошла ошибка: " + error.message)
});

[КОНЕЦ ЦИКЛА]

            // Добавление группы на карту
            map.addOverlay(gCollection);

            // Отображение прямоугольной области по центру карты
            map.setBounds(gBounds);
        });

В итоге: все оверлей на карте отображаются, а прямоугольная область по
центру карты не встает (отображается карта в минимальном масштабе по
центру)

Мое предположение: объект

        gBounds.add(new YMaps.Placemark(this.options.boundedBy));

не понимает передаваемую ему точку

15 комментариев
API 1.x
Прокладывание маршрута автодорог и расчет времени проезда в Народных картах.
AlikOsipyan
3 февраля 2011, 11:36

Скажите пожалуйста, как можно реализовать прокладывание маршрута, прописав в поле формы пункты "А" и "Б"? Возможно ли это реализовать в "Народных картах"? Я не программист javaScript , но определенными знаниями владею, хотя разобраться с API Яндекс не получилось. Кто может помочь мне в этом вопросе?

Спасибо.

7 комментариев
народная карта,маршрутизация,геокодирование
Улучшение производительности карт при большом кол-ве точек
Topor Alexei
3 февраля 2011, 11:57

Я добавил свой слой на карту. Точки я заношу на "Моих картах" и подключаю через ссылку на YMapsML-файл.

Дело в том что точек очень много и загрузка этого файла идет очень долго. Можно ли как-нибудь в ассинхронном режиме подгружать файл с точками? Чтобы показалась сначала карта, а потом после подгрузки YMapsML-файла вывелись и точки?

Слой создаю примерно так

var ml = new YMaps.YMapsML(url);
map.addOverlay(ml);

url - это адрес YMapsML-файла

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

Спасибо.

1 комментарий
производительность,активные области
Неправильное определение высота балуна (height balloon) и как с этим бороться.
kb358
3 февраля 2011, 20:37

Недавно сталкнулся с проблеймой неправльного расчета высоты балуна.

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

Проверял в Google Chrome, IE, Safari и FF.

Проблема присутствует только в браузере Mozilla FireFox

Скриншот проблемы в FF:

 

Проанализировав код через FireBug были реализованы следующие идеи:

  1. С помощью jquery находить класс балуна и задавать ему высоту. (не помогло)
  2. Высчитывание суммы, которая складывается из высот каждого элемента в контексте балуна. (решило проблему, но не так как хотелось)
  3. Задание стиля в css-файле, который получает страница до открытия карты. (решило проблему)


Суть решения заключается в следующем:

Дописываем в разметку для своей страницы следующий стиль: 

.YMaps-b-balloon-content{height:100%!important;}

В классе "YMaps-b-balloon-content" как раз-таки и хранится высота балуна, которая высчитывается "мозгом" Яндекс-карт.


Скриншот в FF:


Так же если кому-то не нравится наличие отступа для кнопки закрытия балуна (смотрите скриншот ниже),

то эту проблему можно решить опять-таки дописав ещё один стиль для класса в css:

.YMaps-b-balloon_close-on .YMaps-b-balloon-content {margin-right:0;}


Итог:


P.S. конечно же, это не решение всех проблем, так как

это всего на всего css-хаки
и возможно этих классов не будет в следующих версиях Яндекс-карт, и эта тема была создана лишь для экономии времени тех людей, которые столкнулись с подобным. Так что, пока всё работает, то этими css-хаками можно пользоваться

 

4 комментария
API 1.x,балун
Очистка результатов поиска в SearchControl.
kb358
3 февраля 2011, 21:10

Возможно ли как-то, аналогично кнопке очистить в SearchControl, программного очистить результаты поиска?

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

9 комментариев
поиск
Как эффективнее хранить координаты объектов?
mikeles87
3 февраля 2011, 21:53

Объясните пожалуйста, как эффективно хранить координаты объекта? в Base64 или с помощью типов Geometry?

7 комментариев
API 1.x,ломаная
Как найти метку по названию?
mojxy
4 февраля 2011, 00:16

подскажите: есть карта, скажем, с сотней меток, как организовать инструмент поиска и показа (метку в центр карты) этих меток по их названию?

6 комментариев
поиск по коллекции,поиск
Как создать источник тайлов для отображения меток?
dneprov777
5 февраля 2011, 16:22

Добрый день

К сожалению в описаниии api не очень подробно описаны аспекты работы с тайлами (применение программы не вариант, так как нужно автоматом переделывать их периодически)

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

Вопрос: как получить скриптом php

1 к какому тайлу относится заданная точка из базы

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

Что делать потом вроде понятно - формируем картинок для источника и цепляем их к карте. Основная проблема именно как получить данные для подготовки нарезанных изображений.

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

4 комментария
производительность,активные области