За последние 24 часа нас посетили 22478 программистов и 1073 робота. Сейчас ищут 666 программистов ...

Направление ветра из полученных данных

Тема в разделе "Сделайте за меня", создана пользователем ALFRED, 6 янв 2021.

  1. ALFRED

    ALFRED Новичок

    С нами с:
    28 дек 2020
    Сообщения:
    34
    Симпатии:
    0
    если присмотреться видимо все стрелки на погодных сайтах с Awesome взят и крутятся стилями, но это сделать на 10 страниц дискуссии ))
    --- Добавлено ---
    сложно, много чего менять?
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Я же давал ссылку.
    Там готовое решение, осталось подобрать иконку указывающую на север и в страницe вставить:
    Код (Text):
    1.  
    2. <?php
    3. echo '<head>
    4.   <style>
    5.    .img-arrow {
    6.     transform: rotate('.$deg.'deg);
    7.    }
    8.   </style>
    9. </head>';
    10. // прочее
    11. echo '<img src="image/arrow.png" alt="" class="img-arrow">';
    12. ?>
    В этом случае скрипт выше не нужен.
     
  3. ALFRED

    ALFRED Новичок

    С нами с:
    28 дек 2020
    Сообщения:
    34
    Симпатии:
    0
    спасибо работает, только почему то правильно показывает когда иконка на юг
    работает и показывает на странице, в своем случае я png получаю по другому потому что происходит слияние данных, в том числе "стрелки" в один рисунок. Вот так я получаю изображение:
    $img = file_get_contents('image/arrow.png');
    $img2 = new Imagick();
    $img2->readImageBlob($img);
    как мне его повернуть согласно вашего примера выше?
     
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Возможно, что я неправильно понимаю "направление ветра".

    Вот проверенный, рабочий скрипт. Иконка прилагается, если нужно, то разверните её в требуемом направлении, например в Paint.
    PHP:
    1. <?php
    2. function getCardinalDirection($deg)
    3. {
    4. $array = array('N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW');
    5. return $array[round(($deg / 45) % 8)];
    6. }
    7.  
    8. $deg = 0;
    9. if(isset($_GET['deg'])) $deg = sprintf('%d', $_GET['deg']);
    10.  
    11. $alt = getCardinalDirection($deg);
    12.  
    13. echo '<html>
    14. <head>
    15.  <style>
    16.   .img-arrow {
    17.    transform: rotate('.$deg.'deg);
    18.   }
    19.  </style>
    20. </head>
    21. <body>';
    22. // прочее
    23. echo '<img src="arrow.png" alt="'.$alt.'" class="img-arrow">'.$alt;
    24. ?>
    25.  
    26. <br><br>
    27. <form>
    28. <input type=text name="deg" maxlength="3" size=3 value="0">
    29. <input type=submit value="go">
    30. </form>
    31.  
    32. </body>
    33. </html>
     

    Вложения:

    • arrow.png
      arrow.png
      Размер файла:
      2,3 КБ
      Просмотров:
      5
  5. ALFRED

    ALFRED Новичок

    С нами с:
    28 дек 2020
    Сообщения:
    34
    Симпатии:
    0
    ранее скрипт был тоже правильный и рабочий, и стрелка поворачивается, дело в другом
    скрипт я вывел и он прорисовывается на обложке как надо, указывает направление ветра NW (пример)
    а вот стрелка, она тоже работает, но висит просто на странице, где выполняется все это, я допустим иконку погоду получаю
    new Imagick, далее указываю назначенную переменную и она прорисовывается в общую картину, как и все остальная информация и это все в общей массе просто один рисунок jpg c <img src="arrow.png" в php это как то не прокатывает, вот и спрашивал как крутануть arrow.png имея вот такой код
    $img = file_get_contents('image/arrow.png');
    $img2 = new Imagick();
    $img2->readImageBlob($img);
    --- Добавлено ---
    [​IMG]
     
  6. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Извините, с imagick никогда не работал - PHP довольно убог в том, что касается обработки мультимедиа.
     
  7. ALFRED

    ALFRED Новичок

    С нами с:
    28 дек 2020
    Сообщения:
    34
    Симпатии:
    0
    может знаете как крутануть
    file_get_contents("https://s.cdpn.io/3/kiwi.svg");
    с помощью разделеных 8 направлений
    $array[round(($deg/45)%8)];
    вроде с svg можно работать как с шрифтами
     
  8. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
  9. ALFRED

    ALFRED Новичок

    С нами с:
    28 дек 2020
    Сообщения:
    34
    Симпатии:
    0
    подскажите пожалуйста еще такой момент
    вот получаю $a направление и $b м/с, переменные имеют числовые значения
    вывожу в рисунок
    PHP:
    1. $bg->annotateImage($draw, $b_text_pixel_x, $b_text_pixel_y, 0, $b);//работает
    при попытке добавить следом направление, почему то вызывает ошибку, что неправильно?
    $bg->annotateImage($draw, $a_text_pixel_x, $a_text_pixel_y, 0, $b, $a);
    как сделать чтоб прописались вместе?
     
  10. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Код (Text):
    1. $b.$a
     
  11. ALFRED

    ALFRED Новичок

    С нами с:
    28 дек 2020
    Сообщения:
    34
    Симпатии:
    0
    спасибо, если я делаю пробел таким образом - это правильно?
    $b. ' ' .$a
     
  12. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Правильно.
    Но безобразно.
    PHP:
    1. $c = sprintf('%s %s', $b, $a);
     
  13. ALFRED

    ALFRED Новичок

    С нами с:
    28 дек 2020
    Сообщения:
    34
    Симпатии:
    0
    немного не ясно что за переменные $s, а не могли бы вы на примере этой строки показать как бы выглядело с вашим примером
    $bg->annotateImage($draw, $a_text_pixel_x, $a_text_pixel_y, 0, $b. ' ' .$a);
    и еще один вопрос, вы мне помогли с направлениями, но есть еще один пример, где направление будет указываться от того где указал в ручную диапазон градусов, но я так понимаю это не php.
    Это ваш рабочий
    Код (Text):
    1. function getCardinalDirection($deg)
    2. {
    3. $array = array('N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW');
    4. return $array[round(($deg / 45) % 8)];
    5. }
    6.  
    7. $alt = getCardinalDirection($deg);
    как правильно будет с этим примером?
    Код (Text):
    1. def wind_deg_to_str1(deg):
    2.         elif deg >=  11.25 and deg <  56.25: return 'NE'
    3.         elif deg >=  56.25 and deg < 101.25: return 'E'
    4.         elif deg >= 101.25 and deg < 146.25: return 'SE'
    5.         elif deg >= 146.25 and deg < 191.25: return 'S'
    6.         elif deg >= 191.25 and deg < 236.25: return 'SW'
    7.         elif deg >= 236.25 and deg < 281.25: return 'W'
    8.         elif deg >= 281.25 and deg < 326.25: return 'NW'
    9.         else: return 'N'
     
  14. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    $b. ' ' .$a замените на $c

    Это на Питоне. И не совсем подходит к вашему случаю - у вас градусы задаются в целых числах.
    Сама же эта функция, переписанная на PHP, выдаст точно такой же результат как и предыдущая.

    https://www.php.net/manual/ru/function.sprintf.php - здесь полная информация.