helpf.pro
Регистрация
 0 
Распечатать

Яндекс карта : вывод точек на карту

Пример о том,как вывести яндекс карту на форму и далее работать с ней:

Основной HTML код карты хранится в макете:

Код VBS
     <!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=ANpUFEkFAAAAf7jmJwMAHGZHrcLKDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==" type="text/javascript"></script> 
        <script type="text/javascript"> 
	    var router;
	    var myPoints = new Array();
	    var myRouts = new Array();
	    var strOpen = "OPEN";
	    var strKontr = "Kontragent";
		var t = new YMaps.Template('<b>$[name]</b><div id="descrID" >$[description]</div>');	
		YMaps.Templates.add("my#template", t);
	    var KopdinatShirota = 0;
	    var KopdinatDolgota  = 0;
	    var UID_Zakaza  = "";
	    /*vstavkaStiley;
	    var map, geoResult;
         YMaps.jQuery(function () {
                map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
                map.setCenter(new YMaps.GeoPoint(37.62, 55.75), 12);
	        });
        function showAddress (value, contrag, Styles, UID) {
               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);
			var point = new YMaps.GeoPoint(geoResult._point.__lng, geoResult._point.__lat);   
	      var placemark = new YMaps.Placemark(point, {style: Styles});
			placemark.name = UID; 
	       placemark.description = contrag;
   	    	myPoints.push(placemark);
	                  map.addOverlay(placemark);
      				  return placemark; 
	}else {
                }
            });
           YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
              alert("Произошла ошибка: " + error);
              return null;
         })
    }
        function showAddressCoord (shirota, dolgota, contrag, Styles, UID) {
		var point = new YMaps.GeoPoint(dolgota, shirota);   
	    var placemark = new YMaps.Placemark(point, {style: Styles});
			placemark.name = UID; 
	       placemark.description = contrag;
   	    	myPoints.push(placemark);
	                  map.addOverlay(placemark);
      				  return placemark;  
	    }
    
    function removeAllOverlays (map) {
     	map.removeAllOverlays();
    }
	function AddRoute(wayPoint1, wayPoint2)	{
		if (myRouts.length>0) {lastRouter = myRouts[myRouts.length-1]; map.removeOverlay(lastRouter)};
    	var myRouter = new YMaps.Router([wayPoint1, wayPoint2], [], {viewAutoApply: true});
        map.addOverlay(myRouter);
		YMaps.Events.observe(myRouter, myRouter.Events.Success, function (myRouter) {
		    myRouter.getWayPoint(0).setIconContent('Начало маршрута');
		    myRouter.getWayPoint(1).setIconContent('Конец маршрута');
            dlMar = myRouter.getDistance()/1000;
            document.title = 'Дистанция: '+ dlMar.toFixed(2);
            });  
        myRouts.push(myRouter);
        return true;
        }
        
    function mapRazmer(map, SentrSh, SentrDlg, razmer) {
    	map.setCenter(new YMaps.GeoPoint(SentrSh, SentrDlg), razmer);   
    }

   function changeStyle(numTochki, imStyle){
   
   		var restoreDefault = true;
   
   		tochka = myPoints[numTochki];
   	    tochka.setOptions({style: imStyle}, restoreDefault);
   	    point = tochka.getCoordPoint();
        map.setCenter(new YMaps.GeoPoint(point.__lng, point.__lat), 12);
        map.redraw();
        
        return tochka.description;
   } 
    </script>
    </head>
    <body //~~onload~~> 
      <div id="YMapsID" style="width:100%;height:100%"></div>
    </form>
    </body>         
    </html>   

Код вывода карты:

Код 1C v 8.х
 //берем HTML-текст из макета и доделываем его
//создаем столько стилей, сколько есть различных картинок в папке "icons_"
//Загружаем в поле HTML-документа 
//и позиционируем центр карты на Москву
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	
	Макет = ПолучитьМакет("Макет");
	КодХТМЛ = Макет.ПолучитьТекст();
	
	СтрокаСтиляНачальная = "var BurG = new YMaps.Style();
		|BurG.iconStyle = new YMaps.IconStyle();
		|BurG.iconStyle.offset = new YMaps.Point(-12, -12);
		|BurG.iconStyle.href = ""http://www.burgerking.ru/favicon.ico"";
		|BurG.iconStyle.size = new YMaps.Point(20, 20);
		|BurG.hideIcon = false;
		|BurG.balloonContentStyle = new YMaps.BalloonContentStyle(""my#template"");";
		
	СтрокаСтиляИтоговая = "";
	//
	//имяКаталогаКартинок = "D:\!1C\MAPS\icons_";
	//КаталогКартинок = Новый Файл(имяКаталогаКартинок);
	//Если КаталогКартинок.ЭтоКаталог() тогда
	//	списокИменКартинок = новый таблицаЗначений;
	//	списокИменКартинок.Колонки.Добавить("ИмяСтиля");
	//	списокИменКартинок.Колонки.Добавить("ИмяФайлаКартинки");
	//	МассивНайденных = НайтиФайлы(имяКаталогаКартинок, "*.gif");
	//	Для Каждого Файл из МассивНайденных Цикл 
	//		
	//		времСтрокаСтиля = СтрокаСтиляНачальная;
	//		времСтрокаСтиля = стрЗаменить(времСтрокаСтиля, "BurG", сокрЛП(Файл.ИмяБезРасширения));
	//		времСтрокаСтиля = стрЗаменить(времСтрокаСтиля, "C:/icons_/kv2_5_x.gif", "C:/icons_/" + сокрЛП(Файл.Имя));
	//		
	//		СтрокаСтиляИтоговая = СтрокаСтиляИтоговая + времСтрокаСтиля + символы.ПС;
	//		
	//	КонецЦикла; 
	//конецЕсли;
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВидыОбъектов.Ссылка,
		|	ВидыОбъектов.ПутьКИконке,
		|	ВидыОбъектов.Код
		|ИЗ
		|	Справочник.ВидыОбъектов КАК ВидыОбъектов
		|ГДЕ
		|	ВидыОбъектов.ПометкаУдаления = ЛОЖЬ";


	Результат = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = Результат.Выбрать();
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		времСтрокаСтиля = СтрокаСтиляНачальная;
		времСтрокаСтиля = стрЗаменить(времСтрокаСтиля, "BurG", "s"+Строка(ВыборкаДетальныеЗаписи.код));
		времСтрокаСтиля = стрЗаменить(времСтрокаСтиля, "http://www.burgerking.ru/favicon.ico", сокрЛП(ВыборкаДетальныеЗаписи.ПутьКИконке));
		
		СтрокаСтиляИтоговая = СтрокаСтиляИтоговая + времСтрокаСтиля + символы.ПС;		
	КонецЦикла;


	СтрокаСтиляИтоговая = СтрокаСтиляИтоговая + СтрокаСтиляНачальная + символы.ПС;
	
	КодХТМЛ = стрЗаменить(КодХТМЛ, "/*vstavkaStiley;", СтрокаСтиляИтоговая);
	
	путьККаталогуКартинок = СтрЗаменить(КаталогПрограммы(), "\", "/");
	КодХТМЛ = СтрЗаменить(КодХТМЛ,"C:/",путьККаталогуКартинок);
	
	ЭлементыФормы.Карта.УстановитьТекст(КодХТМЛ);
	
	табАдресов = получитьтабАдресов();
	табУникальныхАдресов = табАдресов.скопировать();
	табУникальныхАдресов.свернуть("Уник");
	тзДанных = табАдресов.скопировать();
	табАдресов.очистить();
	Для Каждого стр из табУникальныхАдресов Цикл 
		Отбор = Новый Структура();
		Отбор.Вставить("Уник",стр.Уник);
		Строки = тзДанных.НайтиСтроки(Отбор);
		НовСтр = табАдресов.добавить();
		НовСтр.уник = стр.уник;
		Если Строки.Количество() > 0 Тогда
			для Каждого тздстр из Строки Цикл 
				  НовСтр.Адрес = тздстр.Адрес;
				  НовСтр.КД = тздстр.КД;
				  НовСтр.КШ = тздстр.КШ;
                  НовСтр.ВидОбъекта = тздстр.ВидОбъекта;
				  НовСтр.Наименование=Строка(НовСтр.Наименование)+Строка(тздстр.Наименование)+"; ";
			КонецЦикла;	
			КонецЕсли;
	КонецЦикла;	
	ЭлементыФормы.табАдресов.СоздатьКолонки();


	ВыборМасштаба = "50%";
	ВыборРегиона = "Москва";
	ЭлементыФормы.Надпись24.Заголовок = "Точек: "+Строка(табАдресов.количество());
КонецПроцедуры


 // Вывод точек на карту
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
	
	//имя стиля совпадает с именем картинки без расширения
	Всего=Строка(табАдресов.Количество()); н=0;
	Для каждого строкаАдреса Из табАдресов Цикл 
		н=н+1; Состояние("Вывод "+Строка(н)+" из "+Всего);
		////ЭТО ПРИМЕР ВЫВОДА ТОГО ИЛИ ИНОГО МАРКЕРА В ЗАВИСИМОСТИ ОТ НЕКОЕГО ПАРАМЕТРА
		//Если  строкаАдреса.ДокументПродажи.суммаДокумента <1000 тогда
		//	имяСтиля = "BurG";	
		//ИначеЕсли  строкаАдреса.ДокументПродажи.суммаДокумента <10000 тогда
		//	имяСтиля = "tr2_3_x";	
		//ИначеЕсли  строкаАдреса.ДокументПродажи.суммаДокумента <20000 тогда
		//	имяСтиля = "kv3_4_x";	
		//ИначеЕсли  строкаАдреса.ДокументПродажи.суммаДокумента <50000 тогда
		//	имяСтиля = "tr4_1_x";	
		//ИначеЕсли  строкаАдреса.ДокументПродажи.суммаДокумента <100000 тогда
		//	имяСтиля = "kv5_2_x";	
		//Иначе
		//	имяСтиля = "cr6_3_x";	
		//конецЕсли;
		
		УИД_Дока = Строка(н);
		имяСтиля = "s"+Строка(строкаАдреса.ВидОбъекта.код);
		Попытка
			Если ЗначениеЗаполнено(строкаАдреса.КД) Тогда
				ВызовФункции = "showAddressCoord(" + сокрЛП(строкаАдреса.КШ) + ", " + сокрЛП(строкаАдреса.КД) + ", '"+ сокрЛП(строкаАдреса.адрес) + "', " + имяСтиля + ", '" + сокрЛП(строкаАдреса.ВидОбъекта.наименование) + "')";    
			Иначе 				
				ВызовФункции = "showAddress('" + сокрЛП(строкаАдреса.адрес) + "', '" + сокрЛП(строкаАдреса.адрес) + "', " + имяСтиля + ", '" + сокрЛП(строкаАдреса.ВидОбъекта.наименование) + "')";    
			КонецЕсли;
			ЭлементыФормы.Карта.Document.parentWindow.eval(ВызовФункции);
		исключение
			Сообщить("Точка с адресом " + сокрЛП(строкаАдреса.адрес) + " не может быть отбражена на карте!" );	
		конецПопытки
		
	КонецЦикла;
    
	ТочкиНеСозданы = Ложь;
    ЭлементыФормы.Карта.ПолучитьТекст();
КонецПроцедуры   

//Изменение масштаба
Процедура Кнопка1Нажатие(Элемент)
	
	если  ЭлементыФормы.ВыборРегиона.значение = "Москва" Тогда
		СтрокаКоординат = "37.64, 55.76, ";
	ИначеЕсли  ЭлементыФормы.ВыборРегиона.значение = "Тверь" Тогда
		СтрокаКоординат =  "35.90, 56.83, ";
	ИначеЕсли  ЭлементыФормы.ВыборРегиона.значение = "Балашиха" Тогда
		СтрокаКоординат =  "37.97, 55.82, ";
	Иначе
		СтрокаКоординат = "37.64, 55.76, ";
	конецесли;
	
	Если ВыборМасштаба = "" тогда
		возврат;
	конецесли;	
	
	числоМасштаба = Число(Лев(ВыборМасштаба, стрдлина(ВыборМасштаба)-1));
	числоМасштаба = числоМасштаба + 5;
	ВыборМасштаба = строка(числоМасштаба) + "%";
	
	ТекущийМасштаб = Строка(Цел((числоМасштаба/125)*(20)+4));
	если стрДлина(ТекущийМасштаб) =1 тогда
		ТекущийМасштаб = "0" + ТекущийМасштаб;
	конецесли;
	
	ЭлементыФормы.Карта.Document.parentWindow.eval("mapRazmer(map," + СтрокаКоординат + ТекущийМасштаб + ")");
КонецПроцедуры   

Пример обратного геокодирования - получение координат по адресу:

Код 1C v 8.х
 Процедура ПолучитьКоординаты() Экспорт 
	Яндекс = Новый HTTPСоединение("geocode-maps.yandex.ru",,,,,Истина);
	ВременныйФайл = КаталогВременныхФайлов() + "Yandex_geocode_" + СокрЛП(Новый УникальныйИдентификатор);
	Попытка
		Яндекс.Получить("/1.x/?geocode=" + Адрес + "&results=1", ВременныйФайл);
	Исключение
		Сообщить("Ошибка при попытке геокодировать по яндексу адрес: " + Адрес);
		Сообщить(ОписаниеОшибки());
		Возврат;
	КонецПопытки;
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(ВременныйФайл);
	
	ПостроительDOM 			= Новый ПостроительDOM;
	ДокументДОМ 			= ПостроительDOM.Прочитать(ЧтениеXML);
	
	СписокText 				= ДокументДОМ.ПолучитьЭлементыПоИмени("text");
	СписокPos 				= ДокументДОМ.ПолучитьЭлементыПоИмени("pos");
		
	Если (СписокText.Количество() = 0) ИЛИ (СписокPos.Количество() = 0) Тогда
		Возврат;	
	КонецЕсли;
	
	Для ъ = 0 по СписокText.Количество()-1 Цикл
		Координаты = СписокPos[Ъ].ТекстовоеСодержимое;
		Разделитель = Найти(Координаты," ");
		Широта = Число(Сред(Координаты, Разделитель + 1));
		Долгота = Число(Лев(Координаты, Разделитель - 1));
		
		Если Широта = 0 ИЛИ Долгота = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		КД = Долгота;
		КШ = Широта; 		
	КонецЦикла;	
КонецПроцедуры   

Обработка вырванная из конфигурации: YandexMap.rar

Можно ее использовать как макет для создания обработки под свои требования.

Пример автоматизации в котором это использовалось.

Разместил:   Версии: | 8.x | 8.2 УП | 8.3 |  Дата:   Прочитано: 41785
 0 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C медленно работает по сети с базой на SQL Server 23
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1С Предприятие что это? 13
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое
COM-подключение к базе 7.7 из .NET, .NET Core 2
Инсталяция: dotnet add package sabatex.V1C77 или добавить через NUGET пакет sabatex.V1C77. Добавить пространство имен: using sabatex.V1C77; пример использованя: ---C# static void Main(string args) { // создаем строку соединен
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!