Единицы измерения смещения линий в новой символике

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

Единицы измерения смещения линий в новой символике

Сообщение SS_Rebelious » 29 янв 2011, 16:09

В каких единицах измеряется смещение линий в новой символике? Как я понимаю, ширина линий измеряется в пунктах, но вот смещение явно в чём-то другом.

Пример: создаю условный знак шоссе:
highwayoriginal.png
highwayoriginal.png (2.07 КБ) 8915 просмотров
Для этого знака я использую 4 линии (можно и 3, но результат получается менее контрастным): коричнево-оранжевую (А) толщиной 1,0; две чёрные (B) толщиной 0,3 и одну чёрную толщиной 0,15. Двум чёрным линиям по бокам я должне задать смещение. Если смещение задаётся в тех же единицах, что толщина, то смещение осевой линии b относительно осевой линии (А) будет равно 1/2*W(А)+1/2*W(B), где W-ширина линии в пунктах. Получается, смешение = 1/2*(1,0) + 1/2*(0,3) = 0,65. Однако, если выставить величину смещения 0,65, то чёрная линия, хоть и смещается, но совершенно очевидно остаётся в пределах линии (А), и чтобы добиться необходимого эффекта приходится выставлять значение смещения 2,0. То есть единицы измерения смещения не равны единицам измерения толщины.

В чём же измеряется смещение? В пикселах? Наверное следует единицы измерения сделать едиными, ну или подписывать хотя-бы.
Спойлер

Код: Выделить всё

<symbol outputUnit="MM" alpha="1" type="line" name="highway_under_construction_25k">
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="flat"/>
        <prop k="color" v="255,255,255,255"/>
        <prop k="customdash" v="5;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="0"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="0"/>
        <prop k="width" v="1"/>
      </layer>
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="flat"/>
        <prop k="color" v="255,128,0,255"/>
        <prop k="customdash" v="4;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="0"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="1"/>
        <prop k="width" v="1"/>
      </layer>
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="flat"/>
        <prop k="color" v="0,0,0,255"/>
        <prop k="customdash" v="5;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="-2"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="0"/>
        <prop k="width" v="0.3"/>
      </layer>
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="flat"/>
        <prop k="color" v="0,0,0,255"/>
        <prop k="customdash" v="5;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="2"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="0"/>
        <prop k="width" v="0.3"/>
      </layer>
      <layer pass="0" class="SimpleLine" locked="0">
        <prop k="capstyle" v="square"/>
        <prop k="color" v="0,0,0,255"/>
        <prop k="customdash" v="5;2"/>
        <prop k="joinstyle" v="round"/>
        <prop k="offset" v="0"/>
        <prop k="penstyle" v="solid"/>
        <prop k="use_custom_dash" v="0"/>
        <prop k="width" v="0.15"/>
      </layer>
    </symbol>
Вот пример, как это выглядит: нижняя чёрная линия смещена на 0,65, верхняя - на 2,0
highway0-65.png
highway0-65.png (46.24 КБ) 8915 просмотров
Вот так выглядит, если обе линии смещены на 2,0
highway2-0.png
highway2-0.png (46 КБ) 8915 просмотров
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

Re: Единицы измерения смещения линий в новой символике

Сообщение SS_Rebelious » 05 фев 2011, 02:20

Какой изврат! Кажется я понял, что такое "смещение" и в чём оно измеряется! Одна единица смещения равна размеру символа (единица измерения смещения символа - значение размера символа): если размер символа 0,5, то значение смещения равное 1 будет означать реальное смещение на 0,5. Это значит, что если необходимо точно выставить смещение - его нужно сначала вычислить исходя из значения размера символа. OMG!

Итак, чтобы вычислить "смещение" (Х), нужно разделить желаемое смещение (С) на размер символа (Р):
Х = С / Р.
Ели и само желаемое смещение (С) тоже нужно вычислить, то решаем простенькую систему из 2-х уравнений... а что, прикольно!

Наверное здесь следует как-минимум информировать юзера прямо в окошке, что такое всё-таки смещение, а в лучшем случае использовать одни и те же единицы для размера символа и его смещения.
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Единицы измерения смещения линий в новой символике

Сообщение ericsson » 05 фев 2011, 11:55

Забавно. Идея, очевидно, позаимствована из языка стилей CSS, в котором применяется аж две подобные единицы - em, ex.

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

Re: Единицы измерения смещения линий в новой символике

Сообщение SS_Rebelious » 08 фев 2011, 00:21

[...]вырезано много мата[...] У меня просто зла не зватает!

Смещение считается по-разному для отображения слоя на мониторе (как по формуле, приведённой выше, но похоже она не совсем верна) и для экспорта в PDF/ растр (здесь применяются те же единицы измерения, что и для ширины линии)!!! То есть для печати и для работы на экране нужно создавать разные стили!

Считать багрепортом! r15130
стили.png
стили.png (50.08 КБ) 8784 просмотра
стили2.png
Стиль "для монитора" после экспорта в растр
стили2.png (75.68 КБ) 8784 просмотра
стили3.png
Стиль "для печати" после экспорта в растр
стили3.png (60.63 КБ) 8784 просмотра
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Единицы измерения смещения линий в новой символике

Сообщение Максим Дубинин » 08 фев 2011, 07:30

неплохо бы все-таки более четкий пример по шагам сделать, тогда можно и в трекер
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

Re: Единицы измерения смещения линий в новой символике

Сообщение SS_Rebelious » 08 фев 2011, 12:29

Максим Дубинин писал(а):неплохо бы все-таки более четкий пример по шагам сделать, тогда можно и в трекер
Пытаемся создать условный знак, пример которого дан в первом посте. Для этого используем 4 линии:
1) шириной 1,6, без смещения - коричневая
2) шириной 0,15, без смещения - чёрная
3) шириной 0,3, смещение 3,0 - чёрная
4) шириной 0,3, смещение -3,0 - чёрная

Полученная линия в предыдущем посте названа "для монитора" и вуглядит он на экране нормально. Присваиваем этот стиль к линейному слою - выглядит хорошо. Идём в компоновку карты, компонуем как нравится, экспортируем в PDF или растр; получаем картинку "стили2.png" - из прошлого поста. Линии для которых было применено смещение "отлетели" далеко от того места, где должны были быть. В первом посте топика есть код для аналогичной линии, где обрамляющие линии смещены - можно использовать его дя демонстрации.

Переделываем нашу линию. Точнее оставляем основную часть настроек прежней, а смещение для 2-х обрамляющих линий (3 и 4) выставляем смещение 0,65 и -0,65 соответственно. Получаем то, что в предыдущем посте названо "для печати": все три чёрные линии сгрудились в центре символа, превратив его в кашу на экране монитора, однако, если мы из компоновки карты (предварительно применив стиль к нашему линейному слою) экспортируем карту в PDF или растр, то на картинке линия выглядит так как надо ("стили3.png"- последний рисунок в предыдущем посте).
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: Semrush [Bot] и 2 гостя