HelpF.pro

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

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

Основной 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

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

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


Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/1802.html