|
Как получить координаты Yandex в 1С? | ☑ | ||
---|---|---|---|---|
0
ETurdymuratov
18.07.13
✎
07: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>Примеры. Знакомство с JavaScript API. Простой вызов карты.</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://api-maps.yandex.ru/1.1/index.xml?key=AJ_G30sBAAAAPGjNUwIAd33aJVgstDjaSjmlPoejDe-QLSYAAAAAAAAAAADLNUtNAWc3HuTC21N5xxG5a7OODA==" type="text/javascript"></script> <script type="text/javascript"> var map; var router; var placemark; window.onload = function () { map = new YMaps.Map(document.getElementById("YMapsID")); map.setCenter(new YMaps.GeoPoint(76.5400, 43.1500), 7); map.addControl(new YMaps.TypeControl()); map.addControl(new YMaps.ToolBar()); map.addControl(new YMaps.Zoom()); map.addControl(new YMaps.ScaleLine()); map.enableScrollZoom(); } function AddPlacemark(Name, Descr, Cont, Att, Latt, Params) { // Создает метку в центре Москвы placemark = new YMaps.Placemark(new YMaps.GeoPoint(Latt, Att), Params); // Устанавливает содержимое балуна placemark.name = Name; placemark.description = Descr; if (Cont != "") { placemark.setIconContent(Cont); } // Добавляет метку на карту map.addOverlay(placemark); return placemark; } function ShowMessage(str) { var message = "JS получил: "+str; //alert(message); return message; } function AddPlacemarkByAddress(Name, Descr, Cont, Address, Params) { geocoder = new YMaps.Geocoder(Address, {results: 1}); YMaps.Events.observe(geocoder, geocoder.Events.Load, function () { // Создает метку в центре Москвы placemark = new YMaps.Placemark(this.get(0).getGeoPoint(), Params); // Устанавливает содержимое балуна placemark.name = Name; placemark.description = Descr; if (Cont != "") { placemark.setIconContent(Cont); } map.addOverlay(placemark); }); } function AddGroup(Name, Descr, Cont, Latt, Att, Params) { } function AddRoute(wayPoint1, wayPoint2) { router = new YMaps.Router([wayPoint1, wayPoint2], [1]); map.addOverlay(router); return router; } </script> </head> <body> <div id="YMapsID" style="width:100%;height:100%"></div> </body> </html> В управляемой форме есть процедура которая вызывает функцию макета AddPlacemark() и передает туда параметры с координатами и описанием меток: ИмяМетки = "Моя метка"; ОписаниеМетки = "Описание моей метки"; ПодсказкаМетки = "Подсказка к моей метке"; Широта = 43.15; Долгота = 76.54; Элементы.ТекстHTML.Документ.parentWindow.eval( "AddPlacemark(""" + ИмяМетки + """, """ + ОписаниеМетки + """, """ + ПодсказкаМетки + """, " + Формат(Широта, "ЧРД=.; ЧГ=0") + ", " + Формат(Долгота, "ЧРД=.; ЧГ=0") + "," + ПараметрыМетки + ")"); |
|||
1
ETurdymuratov
18.07.13
✎
08:06
|
Помогите написать функцию в макете с помощью которого можно было бы получить координаты типа GetPlacemark()?
|
|||
2
ETurdymuratov
18.07.13
✎
08:08
|
совсем забыл написать, у меня 1с 8.2, Управляемые формы.
|
|||
3
shuhard
18.07.13
✎
08:12
|
(1)[написать функцию в макете ]
1C 8.4 ? |
|||
4
ETurdymuratov
18.07.13
✎
08:23
|
1С 8.2)))
|
|||
5
shuhard
18.07.13
✎
08:24
|
(4) в макете нет функций
|
|||
6
ETurdymuratov
18.07.13
✎
08:26
|
А как же например
function ShowMessage(str) { var message = "JS получил: "+str; //alert(message); return message; } Я эту функцию вызываю из управляемой формы. Или я чего то не допонял? |
|||
7
ETurdymuratov
18.07.13
✎
08:39
|
хочу получить что то вроде этого: http://infostart.ru/public/156151/
но это все платно :-( |
|||
8
YAGolova
18.07.13
✎
08:57
|
Вот моя функция. Но все точки карты предварительно я помещаю в массив PlacemarkByID
function GetGeoCoordNew(ID){ try { Coord = PlacemarkByID[ID].getCoordPoint(); return {Lat: Coord.getY(), Lng: Coord.getX()}; } catch(exep) { return {Lat: 0, Lng: 0}; }; } |
|||
9
ETurdymuratov
18.07.13
✎
09:33
|
Спасибо, сейчас попробую у себя.
|
|||
10
ETurdymuratov
18.07.13
✎
09:46
|
Прошу прощение, а в ID что мне передать?
|
|||
11
YAGolova
18.07.13
✎
09:48
|
Я предварительно расставляю метки на карте - каждой мете - свой ID. Все метки помещены в массив PlacemarkByID. Если пользователю нужны координаты метки, то он уазывает ее ID.
|
|||
12
ETurdymuratov
18.07.13
✎
10:06
|
А как вы в управляемой форме перебираете элементы массива?
|
|||
13
ETurdymuratov
18.07.13
✎
10:48
|
placemark = new YMaps.Placemark(new YMaps.GeoPoint(Latt, Att), Params);
// Устанавливает содержимое балуна placemark.name = Name; placemark.description = Descr; if (Cont != "") { placemark.setIconContent(Cont); } // Добавляет метку на карту map.addOverlay(placemark); try { Coord = PlacemarkByID[placemark.name].getCoordPoint(); return {Lat: Coord.getY(), Lng: Coord.getX()}; } catch(exep) { return {Lat: 0, Lng: 0}; }; } возвращает Lat=0 и Lng=0 |
|||
14
CrazyBear
18.07.13
✎
10:53
|
Делал подобное, но базы сейчас под рукой нету, почитай про API яндекса, делалось как то очень просто...
|
|||
15
ИС-2
naïve
18.07.13
✎
10:58
|
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отклонение = 0.01000; рМодуль = ЭлементыФормы.ПолеКарты.Документ.parentWindow; // подключаем опросник событий ПодключитьОбработчикОжидания("ОбработкаСобытийКарты",1); КонецПроцедуры // Кнопка. Нажали. Включился режим определения координаты Процедура ОбработатьРежимУказанияАдреса() рКарта=ПолучитьГлобальнуюПеременнуюПоИмени("OurYandexMap"); Если ЭлементыФормы.ДействияФормы.Кнопки.КнопкаУказатьГеографическуюКоординату.Пометка Тогда ЭлементыФормы.ПолеКарты.Документ.parentWindow.AddUserEventOnMap(рКарта,"click"); иначе // !!! //ЭлементыФормы.ПолеКарты.Документ.parentWindow.RemoveUserEventOnMap(рКарта,"click"); КонецЕсли; КонецПроцедуры // произошло событие и заполнилась координата Процедура ОбработкаСобытийКарты() Если ЭлементыФормы.ДействияФормы.Кнопки.КнопкаУказатьГеографическуюКоординату.Пометка Тогда // смотрим значение системной переменной Попытка рСигнализатор=СокрЛП(Строка(ЭлементыФормы.ПолеКарты.Документ.parentWindow.LatestEvent)); Если не ПустаяСтрока(рСигнализатор) Тогда // сбросим, чтобы не мешал обрабатывать дальше своими повторными вызовами ЭлементыФормы.ПолеКарты.Документ.parentWindow.LatestEvent=""; Иначе Возврат; // сигнализатор пуст, и ладно КонецЕсли; // // изображаем отработку поименованных событий (опять же, по-хорошему надо добавлять свои в Events) Если рСигнализатор="UserPointing" Тогда Широта=ЭлементыФормы.ПолеКарты.Документ.parentWindow.UserPointCoordX; Долгота=ЭлементыФормы.ПолеКарты.Документ.parentWindow.UserPointCoordY; //ЗаписатьСвойстваКоординаты(); //ПрочитатьСвойстваКоординаты(); // !!! // толком не работает ЭлементыФормы.ДействияФормы.Кнопки.КнопкаУказатьГеографическуюКоординату.Пометка = Ложь; //ОбработатьРежимУказанияАдреса(); //Сообщить("Получены координаты: широта "+СокрЛП(рШирота)+", долгота "+СокрЛП(рДолгота)); КонецЕсли; Исключение Сообщить("Ошибка считывания координаты " + ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецПроцедуры // В картах function AddUserEventOnMap(MapObject, EventName) { MapObject.events.add(EventName, GetUserPoint); } // конец функции AddUserEventOnMap function RemoveUserEventOnMap(MapObject, EventName) { MapObject.events.Remove(EventName, GetUserPoint); } // конец функции RemoveUserEventOnMap |
|||
16
ИС-2
naïve
18.07.13
✎
10:58
|
это компиляция разных кодов
|
|||
17
ETurdymuratov
18.07.13
✎
11:03
|
Ребята, всем большое спасибо! Разобрался. YAGolova особый респект. Я не стал его впихивать в массив:
try { Coord = placemark.getCoordPoint(); return {Lat: Coord.getY(), Lng: Coord.getX()}; } catch(exep) { return {Lat: 0, Lng: 0}; }; мне вот так в самый раз. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |