Клуб API Карт

декабрь 2009
Вывод части объектов из списка YMapsML
Ё
1 декабря 2009, 13:41

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

Передо мной стоит такая задача: через YMapsML загружается массив точек (порядка 200-300) в специальном оформлении (шаблоны значка, балуна), который нужно вывести с разбиением на группы по 10 точек с навигацией по группам. Структура XML-файла такова, что стиль назначается не каждой точке в отдельности, а всей группе ymaps:GeoObjectCollection целиком.

Сейчас я делаю так: при успешной загрузке данных из YMapsML все точки, содержащиеся в нем, простым копированием помещаются в специальный массив. При выводе заданной группы выполняются следующие действия:

1. на карту добавляется слой, содержащий в себе YMaps.ObjectManager (если он
не был еще добавлен, в противном случае имеющийся слой очищается);
2. определяется начальный и конечный индекс точек в массиве;
3. попавшие в требуемый диапазон объекты добавляются в YMaps.ObjectManager, а их описание дополнительно выводится на странице в виде простого списка;

При клике на описание точки в списке, на карте должен открываться соответствующий балун. Одно из основных назначений ObjectManager-а в том, чтобы скрывать точки, не попавшие в текущую область видимости, поэтому когда я пытаюсь программно открыть балун у таких точек, на карте ничего не происходит. В качестве решения проблемы я пробовал использовать YMaps.GeoObjectCollection, но выяснилось, что при добавлении в него объектов их стили не применяются, в результате чего на карте появляются дефолтные синие маркеры.

Сейчас я вижу только одно решение: используя ObjectManager, перед открытием балуна передвигать центр карты в нужные координаты, чтобы ObjectManager отобразил требуемую точку. Так делать не хочется, потому что балун достаточно велик (относительно размера карты), и при его открытии карта сдвигается, чтобы полностью уместить его в видимой области. То есть, визуально будет два движения: позиционирование по центру точки и последующее позиционирование по центру открывшегося балуна.

Есть ли какое-либо другое решение?

8 комментариев
метка,коллекции,диспетчер объектов,YMapsML
Помогите разобраться, пожалуйста.
find-realty
1 декабря 2009, 22:45

Задача: получить список домов 1 линии Василиостровского района.

Итак, делаю запрос на maps.yandex.ru - "Россия, Санкт-Петербург, Василеостровский район, 1-я линия", получаю результат:

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

Взял код из примеров:

var adres="Россия, Санкт-Петербург, Василеостровский район, 1-я линия";

map = new YMaps.Map( document.getElementById("YMapsID") );
map.removeAllOverlays(); 
 
var geocoder = new YMaps.Geocoder(adres, {results: 1, boundedBy: map.getBounds()});


YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
 
if (this.length()) {
var geoPoint=this.get(0).getGeoPoint();
   
map.addOverlay(this.get(0));
this.get(0).setBalloonContent(this.get(0).text);
this.get(0).openBalloon();

alert(this.get(0).text); //Россия, Санкт-Петербург, Василеостровский район, 1-я линия


} else {
    alert("Ничего не найдено")
      }
});


Но как тут получить доступ к списку всех домов, скажем 1 линии я ума не приложу.... Не подскажите как решить задачку?


2 комментария
API 1.x
setBounds из JSON
Egor
2 декабря 2009, 18:06

Вот такой вопрос возник: что должно быть написано в JSON ответе, чтобы не заморачиваясь с разбором строки можно было сделать так:

map.setBounds(EchoFromServer);

11 комментариев
API 1.x
Компонент яндекс карт для Joomla 1.5
Дмитрий К.
3 декабря 2009, 02:21

В общем то не стал я выдумывать велосипед и взял компонент phoca map - это конструктор карт гугл - и переделал его под яндекс карты

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

Компонент распространяется по лицензии GPL (бесплатно)

скачать можно  ЗДЕСЬ - Яндекс Карты для Joomla

жду ваших пожеланий и предложений :)

13 комментариев
CMS,Joomla,API 1.x
Ошибка в IE8 при загрузке карты
ikoder
3 декабря 2009, 14:19

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

IE8 при загрузке карты (или скрипта карты?) выдает такую ошибку:

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Timestamp: Thu, 3 Dec 2009 11:04:42 UTC

Message: Unspecified error.
Line: 11
Char: 188134
Code: 0
URI: http://api-maps.yandex.ru/1.1.5/YMaps.js

При чем, ошибка возникает только на интернет сайте, на локалхосте все работает, и только когда включен режим кэширования страниц в IE. Если через Developer Tools поставить галку "Cache/Always refresh from server", то все работает. Кэш чистил - не помогает. В браузерах FF, Opera, IE6 такой проблемы нет.

Что посоветуете?

5 комментариев
API 1.x
Прошу ликбез по API.
Туроператор Дельфин
3 декабря 2009, 14:26

Задача: создать карты для ряда городов России с обозначением на них гостиниц и достопримечательностей. Без лишнего функционала.

C помощью конструктора научился создавать подобный рабочий код:


window.onload = function () {
        var map = new YMaps.Map(document.getElementById("YMapsID"));
        map.setCenter(new YMaps.GeoPoint(39.7365,43.585368), 13, YMaps.MapType.MAP);
        map.addControl(new YMaps.Zoom());
        map.addControl(new YMaps.ToolBar());
        map.addControl(new YMaps.TypeControl());       
        var s = new YMaps.Style();
        s.iconStyle = new YMaps.IconStyle();
        s.iconStyle.offset = new YMaps.Point(-8,-27);
        s.iconStyle.href = "ссылка";
        s.iconStyle.size = new YMaps.Point(27,26);
        YMaps.Styles.add("wizard#lbmPoint", s);
               
               
        var placemark1 = new YMaps.Placemark(new YMaps.GeoPoint(39.726008,43.576304), {style: "wizard#lbmPoint", balloonOptions: {maxWidth: 300}});
        map.addOverlay(placemark1);
        placemark1.setBalloonContent('МАРИНС');
        placemark1.openBalloon();
        var placemark2 = new YMaps.Placemark(new YMaps.GeoPoint(39.732018,43.57053), {style: "wizard#lbmPoint", balloonOptions: {maxWidth: 300}});
        map.addOverlay(placemark2);
        placemark2.setBalloonContent('ЖЕМЧУЖИНА');       
        var placemark3 = new YMaps.Placemark(new YMaps.GeoPoint(39.71301,43.589593), {style: "wizard#lbmPoint", balloonOptions: {maxWidth: 300}});
        map.addOverlay(placemark3);
        placemark3.setBalloonContent('ЗАПОЛЯРЬЕ');


var photo = new YMaps.Style();
        photo.iconStyle.href = "http://api-maps.yandex.ru/i/0.3/icons/photographer.png";
        photo.iconStyle.size = new YMaps.Point(27,26);
        YMaps.Styles.add("wizard#lbmPoint", photo);
       
        var placemark4 = new YMaps.Placemark(new YMaps.GeoPoint(39.722145,43.579478), {style: "defaultphotographerIcon", balloonOptions: {maxWidth: 300}});
        map.addOverlay(placemark14);
        placemark4.setBalloonContent('ХРАМ');
        var placemark15 = new YMaps.Placemark(new YMaps.GeoPoint(39.719954,43.578348), {style: "defaultphotographerIcon", balloonOptions: {maxWidth: 300}});
        map.addOverlay(placemark15);
        placemark15.setBalloonContent('АКВАПАРК');


Проблемы и вопросы:

1. Данный код я дожен размещать внутри тэга <head>. Проблема в том, что в панеле управления сайта данный тэг не редактируется. Он находится в шаблоне сайта. Как можно обойти данную фичу, учитывая что страниц будет много?


2. Этот код я создал с помощью конструктора. Если мне нужно добавить новую метку, придется на чистой карте ставить метку и добавлять её координаты к уже существующим. 

Можно ли подгружать отдельно созданную карту?


3. Для того, чтобы "подсветить" конкретную метку я исползую placemark.openBalloon(); , размещая его после необходимого объекта. Приходится для каждой гостиницы выставлять этот параметр.

Таким образом кол-во страниц с картами будет равно кол-ву меток(гостиниц).


Также при появлении новой гостиницы-метки, придется добавлять её координаты во все файлы.

Как можно оптимизировать этот момент?



6 комментариев
конструктор
Экспорт персональных карт на ваш сайт
Карты
3 декабря 2009, 20:31

В Яндекс.Картах появилась полезная функция для владельцев сайтов — экспорт персональной карты в YMapsML. При помощи экспорта вы можете создать, редактировать и обновлять персональную карту в Яндекс.Картах, а отображать метки из карты на вашем сайте при помощи API Яндекс.Карт.

Например, вот такую карту, можно экспортировать к себе на сайт.

 

 

Для того, чтобы показывать персональную карту на своём сайте нужно:

1. Авторизоваться и создать (если у вас ещё нет карт с метками) или выбрать в "Моих картах" уже созданную карту с метками. Убедиться, что карта не имеет приватный доступ (Только мне).

2. Воспользоваться документацией или простой инструкцией, вставив соответствующую ссылку на YMapsML-файл.




9 комментариев
слои,статьи,API 1.x,YMapsML
Сохранить результаты в xml
stanzx
4 декабря 2009, 11:44

Меня интересует могу ли я выполнить API функции на стороне сервера и сохранить результат в xml. Либо выполнить API на клиенте и запостить на сервер результат  в виде XML.

Мне нужно сохранить маршрут, который вернет маршрутизатор, и потом по запросу отображать его на карте, это возможно?

2 комментария
API 1.x
помогите разобраться, пожалуйста
VT
4 декабря 2009, 22:51

var router = new YMaps.Router(['Москва, Курская', 'Москва, Парк культуры']);
var route1 = router.getRoute(0);
var fullDistance = route1.getDistance();
window.alert(fullDistance);

нужно просчитать длину маршрута и вывести на экран.  возникает ошибка this._routes не является объектов в YMaps.js

 

что не так?

1 комментарий
маршрутизация
Балун выводит с отступами и ломает его
costia1989
5 декабря 2009, 19:46

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

Сылка на сайт

сыллка на шаблон

 

Такое во всех браузерах . А найти не могу где это прописывается

потому как покартинке видно что делает отступ 5 10 5 10 пикселей

1 комментарий
API 1.x,конфликт верстки,балун
Ошибка "Неправильный ключ" и "got empty document"
Ольга
5 декабря 2009, 20:46

Добрый день!

Я новичок в использовании YMapsML. Мне необходимо нанести несколько объектов на карту. Почитала документацию и примеры. Делаю по аналогии с примерами. Но с простейшим объектом возникает проблема. Ошибка при открытии url c картой: то ошибка Got empty document, то Неправильный ключ (причем даже если вставляю просто тот кусочек кода, который выдается при получении ключа!)!

Помогите, пожалуйста! Подскажите, в чем может быть проблема? Карту пока размещаю на хостинге narod (если это имеет какое-то значение)

2 комментария
API 1.x
Запутался с геокодером
danies
6 декабря 2009, 17:27

На странице с регионом вывожу карту этого региона:

<script src="http://api-maps.yandex.ru/1.1/index.xml?key=APunF0sBAAAAu7lmPAIAgoBNYq0CPjkYXpmvTWZhT5_GCYEAAAAAAAAAAACKh3Smw1L9gpD_Hf9Q26IwQgw30g==" type="text/javascript"></script>
 <script type="text/javascript">
 window.onload = function () {
 var map = new YMaps.Map(document.getElementById("YMaps1"));
 map.addControl(new YMaps.ToolBar());
 map.addControl(new YMaps.Zoom());
 map.addControl(new YMaps.MiniMap());
 map.addControl(new YMaps.TypeControl());
 map.addControl(new YMaps.ScaleLine());
 var gc = new YMaps.Geocoder("$CAT_NAME$");
 YMaps.Events.observe(gc, gc.Events.Load, function () {
 if (this.length()) {
 map.setBounds(this.get(0).getBounds());
 map.addOverlay(new YMaps.Geocoder("все адреса", {results: $NUM_ENTRIES$, boundedBy: map.getBounds()}));
 
 }
 });
 }

 Где $CAT_NAME$ - название региона, те.е карта сама показывает регион.

Теперь мне нужно вывести на этой карте n штук балунов, адрес каждого из которых находится в n-м (количестве штук) div-ов с одинаковыми id, например все адреса должны вытаскиваться из 5 штук <div id="idid"> и чтобы из каждого балуна вела ссылка на соответсвующий id


Страниц таких много.

Код карты нужен универсальный.


Помогите пожалуйста

6 комментариев
геокодирование
Развязки
Nikitian
6 декабря 2009, 23:57

Не судите строго, но поиск ничего не дал: возможно ли на карты поместить слой с развязками? И как если "да"?

2 комментария
маршрутизация
Ни с того, ни с сего потянуло в Африку ... Не подскажете в чем ошибка?
and98977041
7 декабря 2009, 14:34

 

 Приветствую! Стал разбираться с API Яндекс Карт. Мне очень нравится, что все карты русифицированы, тоесть все города на русском языке.

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

Друзья, не подскажите, в чем же может быть ошибка?  


Код: http://pastebin.ru/308883

Онлайн демо: http://bit.ly/7BFmEA

5 комментариев
MooTools,API 1.x
Opera, .enableScrollZoom(); и моя страничка
Виталий
8 декабря 2009, 01:36

В опере не работает зум мышкой. Только на моей странице.


На домашнем апаче смотрю страницу с минималистичным кодом:

<html>
<head>
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=MY_KEY" type="text/javascript"></script>  
<script type="text/javascript">
window.onload = function () {
var map = new YMaps.Map(document.getElementById("YMapsID"));
map.enableScrollZoom();
map.addControl(new YMaps.Zoom());
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
  }</script>
</head>
<body><div id="YMapsID" style="width:600px;height:400px"></div></body>
</html>

Вижу карту, скролинг мышкой не работает.


Открываю maps.ya.ru.

В Opera есть возможность править страницы и сразу видеть изменения.

Так вот - открываю исходник вышеуказанной страницы и вставляю содержимое с начала (key подставляю с maps.ya.ru).

Вижу карту, скроллинг работает.


почему на моей странице нет, а на maps работает??

Кто-нибудь сталкивался? Борол?


FF IE работают в любом случае.

2 комментария
API 1.x
Самостоятельный редактор меток
lnghost
8 декабря 2009, 09:05

Всем доброе утро.

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

Все, что нашел, это вот эту ссылку: http://api.yandex.ru/maps/tools/constructor/

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


Итак, вопрос. Есть ли какой-то стандартный функционал для управления всем этим делом? Или придется сексом заниматься?

5 комментариев
конструктор
Как задать "Объект не найден"?
cvek.ru
8 декабря 2009, 12:19

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

Я использую геокодирование, ищу объекты на карте по адресам. Моя функция:

            if (typeof(map) == "undefined") {
                map = new YMaps.Map(document.getElementById("YMapsID"));
                map.addControl(new YMaps.TypeControl());
            } else map.removeOverlay(geoResult);
            var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});


            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
                if (this.length()) {
                    geoResult = this.get(0);
                    map.addOverlay(geoResult);
                    map.setBounds(geoResult.getBounds());
                } else {
                    alert("Ничего не найдено"); //?
                }
            });

Работать-то всё работает, но с одним недостатком: если задаю реальный адрес, всё нормально, если абсолютно нереальный - тоже (alert вылетает), а вот если смесь (например, "Москва, Абракадабра"), то возвращается Москва. Как мне сделать поиск строгим?

2 комментария
API 1.x
На одной странице несколько карт, такое возможно?
Дмитрий К.
8 декабря 2009, 14:36

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

Пример:

Карта 1
<script type="text/javascript">
//<![CDATA['
var mapPlgPM3, geoResultPlgPM3;
window.onload = function getYandexMapPlgPM3() {
mapPlgPM3 = new YMaps.Map(document.getEle
mentById("YMapsIDPlgPM3"));
mapPlgPM3.setCenter(new YMaps.GeoPoint( 39.870592, 57.619879), 2);
mapPlgPM3.enableDblClickZoom();
mapPlgPM3.enableScrollZoom();
mapPlgPM3.addControl(new YMaps.Zoom());
mapPlgPM3.addControl(new YMaps.TypeControl());
mapPlgPM3.addControl(new YMaps.MiniMap());
mapPlgPM3.addControl(new YMaps.ToolBar());
}
//]]>
</script>

Карта 2

<script type="text/javascript">
//<![CDATA['
 var mapPlgPM1, geoResultPlgPM1;
window.onload = function getYandexMapPlgPM1() {
mapPlgPM1 = new YMaps.Map(document.getEle

mentById("YMapsIDPlgPM1"));
mapPlgPM1.setCenter(new YMaps.GeoPoint( 38.096006, 55.285312), 2);
mapPlgPM1.enableDblClickZoom();
mapPlgPM1.enableScrollZoom();
mapPlgPM1.addControl(new YMaps.Zoom());
mapPlgPM1.addControl(new YMaps.TypeControl());
mapPlgPM1.addControl(new YMaps.MiniMap());
mapPlgPM1.addControl(new YMaps.ToolBar());
}
//]]></script>


Подскажите что я пропустил или может не допонял
5 комментариев
API 1.x,несколько карт
как сделать на этом примере - в какую сторону копать
bashhost
8 декабря 2009, 20:11

http://cityopen.ru/maps/ пример, как так же сделать? кто подскажет в какую сторону копать

2 комментария
слои
Static Api vs. балун
Дашков Дмитрий
9 декабря 2009, 10:53

Можно ли создавать балун в Static Api, передавая параметры через URL? И как?

Поиск не дает ответа.

4 комментария
Static API,API 1.x