|
Подгрузка расстояний между точками из yandex maps | ☑ | ||
---|---|---|---|---|
0
yurii-syrkin
12.04.15
✎
15:24
|
Всем доброго времени суток. Понимаю что тема далеко не новая, но тем не менее никак не могу довести до ума данную задачу. Использую API yandex, пробую следующий код:
Попытка // // Открываем страницу // Internet = ЭлементыФормы.ИнтернетСтраница; Internet.Navigate("about:blank"); // // Делаем паузу // cmdLine= "ping -n 1 -w " + Формат(1000*3, "ЧГ=0")+" 0.0.0.1"; WshShell = Новый COMОбъект("WScript.Shell"); WshShell.Run(cmdLine, 0, -1); // // Создаем скрипты // ТекстСкрипта = " | var myMap, route; | ymaps.ready(init); | function init () { | m(start,end); | } | function m(start,end){ | ymaps.route([[start], [end]], {}).then(function (route){ | $(""#resmarshrut"").append(Math.ceil(route.getLength()/1000)) | }); | return false; | } | function sd(){ | return document.getElementById(""resmarshrut"").innerHTML; |} |"; JQuery = Internet.document.createElement("SCRIPT"); JQuery.type="text/javascript"; JQuery.src = "http://yandex.st/jquery/1.6.4/jquery.min.js"; Internet.document.head.appendChild(JQuery); Yamaps = Internet.document.createElement("SCRIPT"); Yamaps.type="text/javascript"; Yamaps.src = "http://api-maps.yandex.ru/2.0/?load=package.route&lang=ru-RU"; Internet.document.head.appendChild(Yamaps); Скрипт = Internet.document.createElement("SCRIPT"); Скрипт.type="text/javascript"; Скрипт.text = ТекстСкрипта; Internet.document.head.appendChild(Скрипт); // // Делаем паузу // cmdLine= "ping -n 1 -w " + Формат(1000*3, "ЧГ=0")+" 0.0.0.1"; WshShell = Новый COMОбъект("WScript.Shell"); WshShell.Run(cmdLine, 0, -1); // // Создаем контейнер для загрузки расстоятия // DIV = Internet.document.createElement("div"); Internet.document.body.appendChild(DIV); DIV.id = "resmarshrut"; cmdLine= "ping -n 1 -w " + Формат(1000*3, "ЧГ=0")+" 0.0.0.1"; WshShell = Новый COMОбъект("WScript.Shell"); WshShell.Run(cmdLine, 0, -1); Internet.Document.parentWindow.eval("m('"+ТочкаА+"','"+ТочкаБ+"')"); // // Делаем паузу // ТекДата = ТекущаяДата() ; Пока НЕ ТекущаяДата() = ТекДата + 1 Цикл КонецЦикла; cmdLine= "ping -n 1 -w " + Формат(1000*3, "ЧГ=0")+" 0.0.0.1"; WshShell = Новый COMОбъект("WScript.Shell"); WshShell.Run(cmdLine, 0, -1); Пока Internet.ReadyState < 4 Цикл КонецЦикла; // Забераем расстояние Растояние = Internet.Document.parentWindow.eval("sd()"); Если ПустаяСтрока(Растояние) Тогда //Сообщить("Повторно"); // // Делаем паузу // ТекДата = ТекущаяДата() ; Пока НЕ ТекущаяДата() = ТекДата +1 Цикл КонецЦикла; cmdLine= "ping -n 1 -w " + Формат(1000*3, "ЧГ=0")+" 0.0.0.1"; WshShell = Новый COMОбъект("WScript.Shell"); WshShell.Run(cmdLine, 0, -1); Растояние = Internet.Document.parentWindow.eval("sd()"); КонецЕсли; Если ПустаяСтрока(Растояние) Тогда Возврат 0; Иначе Возврат Растояние; КонецЕсли Исключение Сообщить("Не удалось подключиться к сервису Яндекс, Попробуйте позже или свяжитесь с администратором " + ОписаниеОшибки()); КонецПопытки; Почему-то происходит ошибка на строке Internet.Document.parentWindow.eval("m('"+ТочкаА+"','"+ТочкаБ+"')"); Честно говоря в JavaScript не силён, но могу сказать что этот код работал достаточно долго и не давно начал вылетать с ошибкой |
|||
1
yurii-syrkin
12.04.15
✎
15:35
|
Возможно предложите другое решение, самое главное что бы 1) на входе были строковые значения адресов 2) на выходе была длина маршрута, а не длина прямой линии между точками
|
|||
2
yurii-syrkin
12.04.15
✎
15:53
|
Не уже ли никто не сталкивался? Или все пасху отмечают)
|
|||
3
quest
12.04.15
✎
16:21
|
полинфостарта завалено работами с картами - поковыряйся там
|
|||
4
yurii-syrkin
13.04.15
✎
07:01
|
Да, посмотрел на инфостарте действительно много подделок на эту тему, но к сожалению полностью решить свою проблему так и не смог. Упростил немного код:
Попытка Текст = "<!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> |<meta http-equiv=""Content-Type"" content=""text/html; charset=windows-1251""/> |<meta http-equiv=""X-UA-Compatible"" content=""IE=10""/> |<script src=""http://api-maps.yandex.ru/2.1/?lang=ru_RU"" type=""text/javascript""></script> |<script src=""http://yandex.st/jquery/1.6.4/jquery.min.js"" type=""text/javascript""></script> | |<SCRIPT type=text/javascript> | | ymaps.ready(init); | function init () { | var route = ymaps.route([ | { | type: 'wayPoint', | point: """ + Строка(ТочкаА) + """ | }, | { | type: 'viaPoint', | point: """ + Строка(ТочкаБ) + """ | } | ]).then( | function(route) | { | $(""#resmarshrut"").append(route.getHumanLength()); | }, | function (error) | { | console.log(""Возникла ошибка: "" + error.message); | } | ); | } | function sd() { | return document.getElementById(""resmarshrut"").innerHTML; | } |</SCRIPT> |</head> | |<body> |<div id=""resmarshrut""></div> |</body> | |</html>"; ПолеHTMLДокумента = ЭлементыФормы.ПолеHTMLДокумента; ПолеHTMLДокумента.УстановитьТекст(Текст); Расстояние = ПолеHTMLДокумента.Документ.parentWindow.eval("sd()"); Исключение Сообщить("Не удалось подключиться к сервису Яндекс, Попробуйте позже или свяжитесь с администратором " + ОписаниеОшибки()); КонецПопытки; |
|||
5
yurii-syrkin
13.04.15
✎
07:04
|
Хоть убей, валится на строке Расстояние = ПолеHTMLДокумента.Документ.parentWindow.eval("sd()"); говорит мол метод eval не обнаружен. Когда пишу Расстояние = ПолеHTMLДокумента.Документ.parentWindow.sd(); Выдаёт ошибку метод sd() не обнаружен. Все выходные уже убил на этот JavaScript долбанный
|
|||
6
Новый участник
13.04.15
✎
07:54
|
Яндекс недавно обновил карты, подробности писали на Хабре. Старый сервис перенесли на olв.maps.ya.ru - может и API тоже перенесли.
|
|||
7
Новый участник
13.04.15
✎
07:55
|
old.maps.ya.ru - правильный адрес, в (6) опечатка.
|
|||
8
yurii-syrkin
13.04.15
✎
07:57
|
Да, насчет этого я в курсе. Выше указанный код хотя бы в поле мне возвращает это расстояние. Проблема в том что я не могу его от туда забрать из Поля HTML
|
|||
9
yurii-syrkin
13.04.15
✎
07:58
|
То есть к сервису вообще никаких претензий, он нормально отрабатывает
|
|||
10
yurii-syrkin
13.04.15
✎
08:17
|
Сейчас наконец добился что ПолеHTMLДокумента.Документ.parentWindow.sd() отрабатывает без ошибок, только возвращает почему-то COMОбъект. Разворачиваю через + во всех свойствах ошибка чтения
|
|||
11
yurii-syrkin
13.04.15
✎
10:57
|
Ну ребята, немножко же осталось. Что делать с этим комобъектом? Может как то сделать так что бы эта функция число вернула?
|
|||
12
yurii-syrkin
13.04.15
✎
12:53
|
Ничего не помогает, ни return route.getHumanLength() ни return document.getElementById(""resmarshrut"").innerHTML;
|
|||
13
yurii-syrkin
13.04.15
✎
12:53
|
Всё равно какой то непонятный комобъект возвращается
|
|||
14
yurii-syrkin
13.04.15
✎
12:53
|
Что с ним делать?
|
|||
15
yurii-syrkin
13.04.15
✎
13:31
|
Что я здесь вообще делаю
|
|||
16
Тактик
13.04.15
✎
14:34
|
(15) Могу тебе только посочувствовать.
Ко мне недавно тоже обращались - скрип один день работает, в другой не работает. В чем дело я так и не разобрался. |
|||
17
yurii-syrkin
13.04.15
✎
15:41
|
Не, у меня всё-таки получилось. В скрипте значение передаю в контейнер. Выполняю скрипт и забираю из контейнера без всяких вызовов функций просто:
Расстояние = ПолеHTML.Документ.getElementById("resmarshrut").innerHTML |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |