Имя: Пароль:
1C
Веб-мастеринг
Яндекс карты в 1с
0 also
 
10.03.10
13:58
Помогите кто разбирается. Я в яваскрипте не в зуб ногой. По примерам с яндекса сделал такую штуку:

Процедура ВыполнитьНажатие(Кнопка)
   
КодХТМЛ = "
|<!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>
|    <title>Примеры. Геокодирование.</title>
|    <meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
|    <script src=""http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ=="" type=""text/javascript""></script>
|    <script type=""text/javascript"">
|        var map, geoResult;

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

// Установка для карты ее центра и масштаба
|            map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);

// Добавление элементов управления
|            var toolBar = new YMaps.ToolBar();
 |          map.addControl(toolBar);
|           map.addControl(new YMaps.Zoom());
 |          map.addControl(new YMaps.TypeControl());
 |          map.enableScrollZoom();

|        });

// Функция для отображения результата геокодирования
// Параметр value - адрес объекта для поиска
|       function showAddress (value) {
// Запуск процесса геокодирования
|           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(""Ничего не найдено"")
|            }
|        });

// Процесс геокодирования завершен неудачно
|       YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
|          alert(""Произошла ошибка: "" + error);
|     })
|}

|</script>
|</head>

|<body>

|   <form action=""#"" onsubmit=""showAddress(this.address.value);return false;"">
|      <p>
|         <input type=""text"" id=""address"" style=""width:525px;"" value=""Москва"" />
|        <input type=""submit"" value=""Искать"" />
|   </p>
|  <div id=""YMapsID"" style=""width:800px;height:600px""></div>
|</form>

| <p><b>Примеры адресов:</b></p>
| <a href=""javascript:showAddress('Москва, ул.Самокатная, д.1., стр.21')"">Москва, ул.Самокатная, д.1., стр.21</a><br />
| <a href=""javascript:showAddress('Москва, ул. Станиславского, д.21, стр.3')"">Москва, ул. Станиславского, д.21, стр.3</a><br />
|<a href=""javascript:showAddress('Балашиха, Полевой пр.')"">Балашиха, Полевой пр.</a><br />
|<a href=""javascript:showAddress('Измайловский пр-т, д.73/2')"">Измайловский пр-т, д.73/2</a><br />
|<a href=""javascript:showAddress('Сергиев Посад, пр-т Красной армии')"">Сергиев Посад, пр-т Красной армии</a>

//Строка для замены
|//~~~~~~~~~~~~~~~~

|</body>
|    
|</html>
|";

ЭлементыФормы.Карта.УстановитьТекст(КодХТМЛ);
КонецПроцедуры


Получается такая штука: http://s19.radikal.ru/i192/1003/cd/decea9ef97cf.jpg

В принципе все хорошо, но только я хочу вынести искалку с хтмла на форму обработки. На кнопку повесил такой код:

Процедура ИскатьНажатие(Элемент)
   КодХТМЛ = СтрЗаменить(КодХТМЛ,"//~~~~~~~~~~~~~~~~","showAddress('"+ЭлементыФормы.Адрес.Значение+"');");
   
   ЭлементыФормы.Карта.УстановитьТекст(КодХТМЛ);
КонецПроцедуры

Ошибок не выдает, но функция showAddress не вызывается, и соответсвенно поиск не отрабатывает. ЧЯДНТ?
1 also
 
10.03.10
13:59
Чето скринщот криво отобразался. Еще раз http://s19.radikal.ru/i192/1003/cd/decea9ef97cf.jpg
2 also
 
10.03.10
14:06
Если переношу вызов функции в тело скрипта, то пишет 'map' есть null или не является объектом
3 Asmody
 
10.03.10
14:11
попробуй в <body onload=> запихнуть
4 also
 
10.03.10
14:12
(3) ща попробую
5 elisem
 
10.03.10
14:14
закладка
6 also
 
10.03.10
14:18
Спасибо Асмодей!

Вот так прокатило:
|<body //~~>

а потом:
КодХТМЛ = СтрЗаменить(КодХТМЛ,"//~~","onload = ""javascript:showAddress('"+ЭлементыФормы.Адрес.Значение+"')""");

в куда еще и каким образом можно вызов этой функции впихнуть?
7 Asmody
 
10.03.10
14:21
теоретически, можно сделать html-форму со скрытыми полями (type=hidden), заполнять ее через DOM, а потом эту форму сабмитить
8 Asmody
 
10.03.10
14:21
(7)+ но я не пробовал
9 also
 
10.03.10
14:29
ладно попробую, спс
10 NcSteel
 
10.03.10
14:33
Закладка
11 lxs
 
10.03.10
14:36
tab
12 YHVVH
 
10.03.10
14:43
прикольно +1
13 also
 
10.03.10
17:06
Вообще изначально задача была поставлена такая: есть несколько адресов, нужно их показать на карте метками. Все получилось.

Вот код:

Перем КодХТМЛ;

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
   КодХТМЛ = "
   |<!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>
   |    <title>Примеры. Геокодирование.</title>
   |    <meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
   |    <script src=""http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ=="" type=""text/javascript""></script>
   |    <script type=""text/javascript"">
   |        var map, geoResult;
   // Создание обработчика для события window.onLoad
   |        YMaps.jQuery(function () {
   // Создание экземпляра карты и его привязка к созданному контейнеру
   |            map = new YMaps.Map(YMaps.jQuery(""#YMapsID"")[0]);
   // Установка для карты ее центра и масштаба
   |            map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
   // Добавление элементов управления
   |            var toolBar = new YMaps.ToolBar();
   |          map.addControl(toolBar);
   |           map.addControl(new YMaps.Zoom());
   |          map.addControl(new YMaps.TypeControl());
   |          map.enableScrollZoom();
   |        });
   // Функция для отображения результата геокодирования
   // Параметр value - адрес объекта для поиска
   |       function showAddress (value) {
   // Запуск процесса геокодирования
   |           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(""Ничего не найдено"")
   |            }
   |        });
   // Процесс геокодирования завершен неудачно
   |       YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
   |          alert(""Произошла ошибка: "" + error);
   |     })
   |}
   //Тут функция, которая формируется динамически
   |//~~Функция showA~~
   |</script>
   |</head>
   |<body //~~onload~~>
   |  <div id=""YMapsID"" style=""width:800px;height:600px""></div>
   |</form>
   |</body>
   |    
   |</html>
   |";
   
   ЭлементыФормы.Карта.УстановитьТекст(КодХТМЛ);
КонецПроцедуры

Процедура ПоказатьАдреса(Кнопка)
   МассивАдресов = Адреса.ВыгрузитьКолонку("Адрес");
   
   НачФункции = "function showA () {";
   
   ТелоФункции = "";
   
   Для каждого Элемент Из МассивАдресов Цикл
       ТелоФункции = ТелоФункции + Символы.ПС + "showAddress('"+Элемент+"')";    
   КонецЦикла;
   
   КонФункции = Символы.ПС + "}";
   
   ФункцияShowA = НачФункции + ТелоФункции + КонФункции;
   
   КодХТМЛ = СтрЗаменить(КодХТМЛ,"//~~Функция showA~~",ФункцияShowA);
   КодХТМЛ = СтрЗаменить(КодХТМЛ,"//~~onload~~","onload = ""javascript:showA()""");
   
   ЭлементыФормы.Карта.УстановитьТекст(КодХТМЛ);
КонецПроцедуры

Вот результат:
http://s50.radikal.ru/i127/1003/66/f86374a5a45d.jpg
14 also
 
10.03.10
17:12
Вот еще ссылка полезная тем, кто захочет подобной шнягой заниматься http://api.yandex.ru/maps/jsapi/doc/dg/concepts/About.xml
15 Point
 
10.03.10
17:15
Еще можно было бы построение маршрута прикрутить.
16 also
 
10.03.10
17:17
(15) все можно...Просто пока не нужно :) По ссылке в (14) есть примеры, в том числе с маршрутами
17 Xao
 
10.03.10
17:19
а пробки можно прикрутить?
18 Asmody
 
10.03.10
17:20
ой, Плеханова! да мы ж соседи почти :)
19 also
 
10.03.10
17:22
(17)YMaps.Router(wayPoints, viaPoints, options)

Прокладывает маршрут через заданные точки.

options.avoidTrafficJams      Boolean           false      true - строить маршрут с учетом пробок, false - без учета пробок. При использовании опции учитывайте, что объезд пробок не всегда возможен.
20 also
 
10.03.10
17:22
(18) да, я в принципе от балды ввел. Но у меня отец там работает, да и учился я недалеко :)
21 quest
 
10.03.10
17:46
закладка