Имя: Пароль:
1C
1С v8
Метки на Google картах
0 FOFA
 
05.11.13
17:12
Добрый день.
Есть вот такой фрагмент кода для вывода меток на Google карту


    ТекстСкрипта = "data.addRows(" + Строка(ТаблицаОбъектовДляВывода.Количество()) + ");";
    Сч = 0;
    Для Каждого ТекСтрока Из ТаблицаОбъектовДляВывода Цикл  
        ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 0, " +СтрЗаменить(Строка(ТекСтрока.Широта),",",".") + ");";
        ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 1, " +СтрЗаменить(Строка(ТекСтрока.Долгота),",",".") + ");";
        ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 2, '" +Строка(ТекСтрока.Наименование) + " "+Символы.ПС+
        + Строка(ТекСтрока.Город) + " "
        + Строка(ТекСтрока.Адрес) + " "
        + " "
        + "');";
        Сч = Сч + 1;
    КонецЦикла;
    
    СтраницаХТМЛ = "<html>
    |  <head>
    |    <script src=""http://maps.google.com/maps?file=api&v=2&key="; + APIГугла + """ type=""text/javascript""></script>
    |    <script type=""text/javascript"" src=""http://www.google.com/jsapi""></script>;
    |  </head>
    |
    |  <body>
    |    <div id=""map_div"" style=""width: 950px; height: 650px""></div>
    |    <script type=""text/javascript"">
    |
    |      google.load(""visualization"", ""1"", {packages:[""map""]});
    |      google.setOnLoadCallback(drawMap);
    |      function checkIfGoogleLoad() {
    |        if(!google.visualization) setTimeout(checkIfGoogleLoad, 1000);
    |        else drawMap();
    |      }
    |      function drawMap() {
    |        var data = new google.visualization.DataTable();
    |        data.addColumn('number', 'Lat');
    |        data.addColumn('number', 'Lon');
    |        data.addColumn('string', 'Name');" + ТекстСкрипта + "
    |        var map = new google.visualization.Map(document.getElementById('map_div'));
    |        map.draw(data, {showTip: true, mapType: 'normal'});
    |      }
    |      checkIfGoogleLoad();
    |    </script>
    |  </body>
    |</html>";
    


Подскажите, как поменять код, что бы в марке можно было отображать название маркера, его описание, картинку и Web ссылку.
1 DGorgoN
 
05.11.13
17:17
data.addColumn('string', 'Name');" + ТекстСкрипта + " - тут не?
2 FOFA
 
05.11.13
17:22
Именно тут...Вот только как выразить ссылку и картинку я не знаю
3 Smit1C
 
05.11.13
17:27
там вроде надо настраивать стиль отображения этих меток, поищи в google map api
4 Smit1C
 
05.11.13
17:29
5 FOFA
 
05.11.13
17:40
(4) именно так...
Осталось код найти...
6 Smit1C
 
05.11.13
17:50
(5) ctrl+u
7 FOFA
 
05.11.13
18:03
Не могу понять, как их код связать с моим(
function makeMarker(location) {
  var markerOptions = {map: map, position: new google.maps.LatLng(location.lat, location.lng)};
  var marker = new google.maps.Marker(markerOptions);
  markers.push(marker);
  var content = '<div style="text-align: center; font-size:14px;"><center><b>Diamantino, Brazil</b></center><img width="240" height="180" src="http://mw2.google.com/mw-panoramio/photos/small/7253919.jpg"/><div style="margin: auto; text-align: right; width: 240px;" class="linkbutton"><a href="http://www.panoramio.com/user/279908">Edson Walter Cavalari</a></div><div class="linkbutton"><a href="http://www.panoramio.com/photo/7253919"; target="_blank">See more photos at Panoramio.com</a></div><br/><div class="linkbutton"><a href="http://www.google.com/search?q=site:wikipedia.org+Diamantino,Brazil&btnI=I\'m+Feeling+Lucky"; target="_blank">Read more about this location</a></div><div class="linkbutton"><a href="javascript:void(0)" id="zoomLink">Zoom in to this location</a></div></div>';

  google.maps.event.addListener(marker, 'click', function(e) {
    var infobox = new SmartInfoWindow({position: marker.getPosition(), map: map, content: content});
  });
}
8 FOFA
 
05.11.13
19:25
Я использую систему комманд
var map = new google.visualization.Map(document.getElementById('map_div'));
    |        map.draw(data, {showTip: true, mapType: 'normal'});

В примере (7) идет

var marker = new google.maps.Marker(markerOptions);
  markers.push(marker);

Наверное map.draw не поддерживает функционал картинок в маркерах и ссылок?
9 FOFA
 
06.11.13
16:44
Разобрался
Процедура Построитькарту()

    СсылкаНаБазу = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
    APIГугла = Константы.КлючКарта.Получить();
    
    ТаблицаОбъектовДляВывода = Новый ТаблицаЗначений;
    ТаблицаОбъектовДляВывода.Колонки.Добавить("Наименование",Новый ОписаниеТипов("Строка"));
    ТаблицаОбъектовДляВывода.Колонки.Добавить("Город",Новый ОписаниеТипов("Строка"));
    ТаблицаОбъектовДляВывода.Колонки.Добавить("Адрес",Новый ОписаниеТипов("Строка"));
    ТаблицаОбъектовДляВывода.Колонки.Добавить("Широта",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,6)));
    ТаблицаОбъектовДляВывода.Колонки.Добавить("Долгота",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,6)));
    Если ЗначениеЗаполнено(Страна) Тогда
    Места = Справочники.Места.Выбрать(,Страна);
    Пока Места.Следующий() Цикл
        если Места.Широта <> 0 и Места.ПометкаУдаления = Ложь Тогда
            НоваяСтрока = ТаблицаОбъектовДляВывода.Добавить();
            НоваяСтрока.Наименование = "<h1 id=""firstHeading"" class=""firstHeading"">"+СокрЛП(Места.Наименование)+"</h1>";
            Если ЗначениеЗаполнено(Места.ФайлКартинки) Тогда
            Места.ФайлКартинки.Получить().Сохранить("C:\temp\"+СокрЛП(Места.Наименование)+".jpg");    
            //НоваяСтрока.Город = "<img width=""200"" height=""150"" src="""+СокрЛП(Места.Картинка)+"""+/>"+"</h1>";
            НоваяСтрока.Город = "<img width=""200"" height=""150"" src="""+СокрЛП("C:\temp\"+СокрЛП(Места.Наименование)+".jpg")+"""+/>"+"</h1>";
        Иначе
            НоваяСтрока.Город = "";
            КонецЕслИ;
            Попытка
            НоваяСтрока.Адрес = СокрЛП(Строка(Места.ОписаниеМеста.Получить().ПолучитьТекст()));
            НоваяСтрока.Адрес = СтрЗаменить(НоваяСтрока.Адрес,Символы.ПС,"");

        Исключение
            НоваяСтрока.Адрес = "";
            КонецПопытки;
            НоваяСтрока.Широта = Места.Широта;
            НоваяСтрока.Долгота = Места.Долгота;
            КонецЕслИ;
    КонецЦикла;
Иначе
    Места = Справочники.Места.Выбрать();
    Пока Места.Следующий() Цикл
        если Места.Широта <> 0 и Места.ПометкаУдаления = Ложь Тогда
            НоваяСтрока = ТаблицаОбъектовДляВывода.Добавить();
            НоваяСтрока.Наименование = "<h1 id=""firstHeading"" class=""firstHeading"">"+СокрЛП(Места.Наименование)+"</h1>";
            Попытка
            Места.ФайлКартинки.Получить().Записать("d:\"+СокрЛП(Прав(Места.Код,6))+".bmp");    
            НоваяСтрока.Город = "<img width=""200"" height=""150"" src="""+СокрЛП(Места.Картинка)+"""+/>"+"</h1>";
            //НоваяСтрока.Город = "<img width=""200"" height=""150"" src="""+СокрЛП("d:\"+СокрЛП(Прав(Места.Код,6))+".bmp")+"""+/>"+"</h1>";
            //"<img width="200" height="150" src="http://www.europetourism.su/wp-content/uploads/2011/12/Akveduk_v_Skope13-294x194.jpg"+/></h1>";
        Исключение
            НоваяСтрока.Город = "";
            КонецПопытки;
            Попытка
            НоваяСтрока.Адрес = СокрЛП(Строка(Места.ОписаниеМеста.Получить().ПолучитьТекст()));
            НоваяСтрока.Адрес = СтрЗаменить(НоваяСтрока.Адрес,Символы.ПС,"");

        Исключение
            НоваяСтрока.Адрес = "";
            КонецПопытки;
            НоваяСтрока.Широта = Места.Широта;
            НоваяСтрока.Долгота = Места.Долгота;
            КонецЕслИ;
    КонецЦикла;
    
    КонецЕслИ;
    ТекстСкрипта = "data.addRows(" + Строка(ТаблицаОбъектовДляВывода.Количество()) + ");";
    Сч = 0;
    Для Каждого ТекСтрока Из ТаблицаОбъектовДляВывода Цикл  
        ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 0, " +СтрЗаменить(Строка(ТекСтрока.Широта),",",".") + ");";
        ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 1, " +СтрЗаменить(Строка(ТекСтрока.Долгота),",",".") + ");";
        ТекстСкрипта = ТекстСкрипта + " data.setCell(" + Строка(Сч) + ", 2, '" +Строка(ТекСтрока.Наименование) + " "
        + Строка(ТекСтрока.Город) + " "
        + Строка(ТекСтрока.Адрес) + " "
        + " "
        + "');";
        Сч = Сч + 1;
    КонецЦикла;
    
    СтраницаХТМЛ = "<html>
    |  <head>
    |    <script src=""http://maps.google.com/maps?file=api&v=2&key="; + APIГугла + """ type=""text/javascript""></script>
    |    <script type=""text/javascript"" src=""http://www.google.com/jsapi""></script>;
    |  </head>
    |
    |  <body>
    |    <div id=""map_div"" style=""width: 100%; height: 100%""></div>
    |    <script type=""text/javascript"">
    |
    |      google.load(""visualization"", ""1"", {packages:[""map""]});
    |      google.setOnLoadCallback(drawMap);
    |      function checkIfGoogleLoad() {
    |        if(!google.visualization) setTimeout(checkIfGoogleLoad, 1000);
    |        else drawMap();
    |      }
    |      function drawMap() {
    |        var data = new google.visualization.DataTable();
    |        data.addColumn('number', 'Lat');
    |        data.addColumn('number', 'Lon');
    |        data.addColumn('string', 'Name');" + ТекстСкрипта + "
    |        var map = new google.visualization.Map(document.getElementById('map_div'));
    |        map.draw(data, {showTip: true, mapType: 'normal'});
    |      }
|function centerMap() {
| map.setCenter(markers[markers.length-1].getPosition());
|}    
    |      checkIfGoogleLoad();
    |    </script>
    |  </body>
    |</html>";
    
    
    //,zoomLevel: 10
КонецПроцедуры
10 FOFA
 
06.11.13
16:46
Но остался еще один вопрос...
У меня картинки хранется в хранилище значений, для загрузки их на гугл карту я использую следующее:
            Места.ФайлКартинки.Получить().Записать("d:\"+СокрЛП(Прав(Места.Код,6))+".bmp");    
            НоваяСтрока.Город = "<img width=""200"" height=""150"" src="""+СокрЛП("d:\"+СокрЛП(Прав(Места.Код,6))+".bmp")+"""+/>"+"</h1>";

Данная схема не работает...
Но если я подставляю в данную схему любой файл с диска, созданный не 1с предприятием, то все работает
11 FOFA
 
06.11.13
16:47
Получается html код не хочет принимать картинки, созданные 1с предприятием(
12 kokamoonga
 
06.11.13
17:01
(10) разумеется данная схема не работает. Пространство имен кто будет указывать?

"file:///d:/"+СокрЛП(Прав(Места.Код,6))+".bmp"  как-то так наверно.

Но вообще это дурь конечно. Правильнее поднять nginx например и отдавать картинки с веб-сервера, а не как локальные ресурсы.
13 FOFA
 
06.11.13
17:04
Но картинка, созданная не в 1с, работает в таком исполнении

Вот пример скрипта
<img width="200" height="150" src="c:\temp\000000023.jpg"+/></h1>

Если картинка, созданная из хранилища, то не работает, если просто взятая из сети, то все нормально
14 kokamoonga
 
06.11.13
17:08
(13) значит путь неправильный.
15 kokamoonga
 
06.11.13
17:10
(14)+ или нет прав на папку.
или на файл
16 FOFA
 
06.11.13
17:17
Та нет..На данные файлы стоит полный доступ..А папка одинакова для двух примеров
17 kokamoonga
 
06.11.13
17:20
(16) а просто через адресную строку браузера файл открывается?
18 FOFA
 
06.11.13
17:23
Да и тот и тот
19 FOFA
 
06.11.13
17:28
Попробывал в Paint изменить файл с jpeg на bmp, тоже его не читает
20 kokamoonga
 
06.11.13
17:32
(19) что и в браузере не открывается?
21 FOFA
 
06.11.13
17:36
В браузере оба примера открывается,
Но когда картинку грузит скрипт, то не видит, хотя стандартную(не созданную в 1с) видит
22 FOFA
 
06.11.13
17:37
Размеры картинок почти одинаковые
23 FOFA
 
06.11.13
17:42
Вот сами картинки
http://www.ex.ua/330199615458

Картинка 000000001.jpg проблемная
24 kokamoonga
 
06.11.13
17:50
(23) а отсуда скрипт ее видит?http://fs54.www.ex.ua/show/330199615458/80919635/80919635.jpg?1600
25 kokamoonga
 
06.11.13
17:51
(24) + отсюда*
26 FOFA
 
06.11.13
21:15
Она просто лежит на диске Д, первая и вторая..Скрипт пишется для локальных целей
27 kokamoonga
 
06.11.13
21:50
(26) я понимаю что она лежит на диске D. Но по твоей логике получается, что проблема в самой картинке, что конечно маловероятно, поэтому я и предлагаю проверить будет ли с ней проблема когда она лежит на нормальном веб-сервере.

Чтобы решить проблему, ее надо сначала локализовать. А тут этим и не пахнет.
28 FOFA
 
06.11.13
22:00
Загрузил на radikal.cc
http://s017.radikal.ru/i424/1311/ae/c1833513d3a6.jpg

Проблемы нету. Но мне нужно подгружать картинки с локальной папки на компьютере(
29 kokamoonga
 
06.11.13
22:03
(28) ну поскольку та же картинка нормально грузится извне - делаем вывод. Проблема либо в пути, либо в правах. Поскольку статически прописанный путь работает нормально скорее всего проблема в коде:

Места.ФайлКартинки.Получить().Записать("d:\"+СокрЛП(Прав(Места.Код,6))+".bmp");    
            НоваяСтрока.Город = "<img width=""200"" height=""150"" src="""+СокрЛП("d:\"+СокрЛП(Прав(Места.Код,6))+".bmp")+"""+/>"+"</h1>";

Тут точно правильный путь формируется?
30 kokamoonga
 
06.11.13
22:04
(29) + кстати, </h1> там зачем?
31 FOFA
 
06.11.13
22:12
(12)
file:///d:/"+СокрЛП(Прав(Места.Код,6))+".bmp"  как-то так наверно

Вот так помогло..Вот я и бестолочь)

Просто другая картинка работала и без этого, вот это и смутило
32 FOFA
 
06.11.13
22:13
kokamoonga спасибо большое