Как я могу повернуть пользовательские маркеры в Leaflet for PDF (в работе веб-сайта)

Я работаю над созданием PDF-файла из карты Leaflet с пользовательскими значками, и я поворачиваю эти значки под углом для отчета о треке (автомобили). Я использую плагин для создания изображения с карты, а затем использую pdfmake для добавления изображения в PDF (PDF содержит карты, таблицы и диаграммы JS на холсте). Все работает нормально (маркеры вращаются на веб-сайте), но когда я добавляю изображение карты в свой PDF-файл, маркеры не вращаются.

I add the image with rotation with these code

var marker=[
  <?php foreach($track as $key => $value){ ?>L.marker([
  <?php echo $value['Y']; ?>,
  <?php echo $value['X']; ?>],{icon: icon
  <?php echo $value['Eng']; ?>, rotationAngle: 
  <?php echo $value['Angle']; ?> }).bindPopup("
  <?php echo date("Y-m-d H:i:s", $key); ?> / speed: 
  <?php echo $value['Speed']; ?> km/h." ),
  <?php } ?>
<?php ?>]

Я искал другие библиотеки, которые могут решить мою проблему.

I get the image with these code

 var icon3 = L.icon({
    iconUrl: 'images/direction_green.png',
    iconSize:     [12, 12],
    iconAnchor:   [0, 0],
    popupAnchor:  [15, -8]
    });

    var icon2 = L.icon({
    iconUrl: 'images/stop_green.png',
    iconSize:     [12, 12],
    iconAnchor:   [0, 0],
    popupAnchor:  [15, -8]
    });

    var icon1 = L.icon({
    iconUrl: 'images/stop_blue.png',
    iconSize:     [12, 12], 
    iconAnchor:   [0, 0],
    popupAnchor:  [15, -8]
    });

    var icon0 = L.icon({
    iconUrl: 'images/stop_black.png',
    iconSize:     [12, 12],
    iconAnchor:   [0, 0],
    popupAnchor:  [15, -8]
    });

Затем я использую соответствующий маркер состояния для автомобиля (двигатель включен, двигатель выключен и т. д.)

Я вижу, что проблема в том, что это вращение - это вращение HTML. Могу ли я повернуть изображение с помощью js / jQuery перед добавлением на карту? Я получаю изображение с помощью:

iconUrl: 'images/stop_black.png

У меня еще одна проблема: В моем PDF-файле нет кружков и линий. На сайте снова все в порядке.

Спасибо за вашу помощь

Зависит ли проблема от браузера? Предполагая, что вы используете Leaflet.rotatedMarker.js, ему нужна поддержка <transform-function> в браузере. Также pdfmake имеет некоторые зависимости от браузера.

peeebeee 15.05.2018 15:11

Нет, проблема не в браузере. Проблема в том, что этот плагин листовых изображений не вращает маркеры.

stefo91 15.05.2018 15:13

.... и это может быть из-за того, что в браузере отсутствует необходимая поддержка. Отсюда вопрос.

peeebeee 15.05.2018 15:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
453
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это ответ на мой вопрос. Надеюсь кому-нибудь помочь. Плагин leaflat-rotate-marker использует css для поворота маркеров, и когда я использую плагин leaflat-image для создания изображения из карты, маркеры в PDF не имеют вращения, потому что изображение leaflat не работает с html и css. Мой полный код таков:

processArray(js_tracks); //call processArray with my array

async function processArray(array) {
    shelterMarkers.eachLayer(function(layer){ //remove previous markers because i call this function onload and on map zoomed.  
        mymap.removeLayer(layer);
    });

    for (let item of array) {
        if (icontmp[item['Reakt']][item['Angle']] != -1){ //array icontmp is my cash for previous created markers.
            var iUrl = icontmp[item['Reakt']][item['Angle']];
        }
        else{ // if i don't have cashed markers with same angel await for delayedLog where i rotate the markers by angle and specific condition (item['Reakt'])
            icontmp[item['Reakt']][item['Angle']] = await delayedLog(item['Angle'], item['Reakt']);
            var iUrl = icontmp[item['Reakt']][item['Angle']];           
        }

        var ico = L.icon({ //create a object with marker
            iconUrl: iUrl,
            iconSize: [(4.5*(mymap.getZoom()))/2, (4.5*(mymap.getZoom()))/2], // resize by map zoom
            iconAnchor: [15, 15],
            popupAnchor: [-10, -10]
        });

        L.marker([item['Y'], item['X']], // add X and Y cordinats
        {icon: ico})
        .bindPopup("<p>Време: "+item['dateTime']+" </p><p> скорост: "+item['Speed']+" км/ч.</p><p> Реакция: "+item['Reaktion']+" </p><p> "+item['Engine']+" </p>" ).addTo(shelterMarkers); // add to shelterMarkers
    }
    shelterMarkers.addTo(mymap); // add to map when ready
}


function delayedLog(angles, reak){
     if (reak == 0){
         var imgs = '<?php echo base_url();?>/images/stop_blue.png';
     }
     else if (reak == 1){
         var imgs = '<?php echo base_url();?>/images/stop_green.png';
     }
     else if (reak == 2){
         var imgs = '<?php echo base_url();?>/images/direction_green.png';
     }
     else if (reak == 3){
         var imgs = '<?php echo base_url();?>/images/stop_red.png';
     } 
     else if (reak == 4){
         var imgs = '<?php echo base_url();?>/images/direction_red.png';
     }
     else{
         var imgs = '<?php echo base_url();?>/images/stop_black.png';
     }

    var image = loadImage(imgs).then(function (img) { //there i wait for load a image resource. Without it sometimes loading an empty blank instead of a finished image. loadImage is a function from plugin image-promise.min.js

        let canvass = document.createElement('canvas');
        let context = canvass.getContext('2d');
        canvass.width = 50;
        canvass.height = 50;
        context.translate(15, 15);
        context.rotate(angles*Math.PI/180); //rotate by angle
        context.translate(-15, -15);
        context.drawImage(img, 0, 0, img.width, img.height);
        return canvass.toDataURL(); // when ready return dataurl
    })
    return image; // return dataurl to processArray
}

Другие вопросы по теме