MapServer: стиль для отрисовки двойной линии

Решенные задачи, первая запись - описание решения.
Ответить
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

MapServer: стиль для отрисовки двойной линии

Сообщение Denis Rykov » 29 май 2012, 19:11

Потребовалось в MapServer отрисовать границу полигона двойной линией (см. вложение), прчём промежуток между двумя линиями должен быть прозрачным, то есть вариант нарисовать красную линию а потом поверх неё ещё одну сразу отпал. Попробовал описать символ таким образом:

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

SYMBOL 
    NAME "double_line" 
    TYPE vector 
    POINTS 
        0 0 1 0 -99 -99 0 1 1 1
    END 
END
и подключить его в map-файл:

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

CLASS
    STYLE
        OUTLINECOLOR 255 0 0
        SYMBOL 'double_line'
        SIZE 3
        WIDTH 1
    END
END
Но при таком варианте возникают артефакты (см. вложение). Попробовал еще пару вариантов, но так и не добился нужного результата. Решил спросить в рассылке MapServer. И получил положительный ответ. Как оказалось, возможность, которой мне следует воспользоваться (а именно, построение буфера) была предложена в MS RFC 64 и реализована не так давно, поэтому даже в документации про это ничего не сказано. Таким образом, для построения заданного стиля линии нужно построить внешний и внутренний буфер в 1px и уже применять символику к этим буферным линиям:

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

CLASS
    STYLE
        OUTLINECOLOR 255 0 0
        GEOMTRANSFORM (BUFFER([SHAPE], -1))
    END
    STYLE
        OUTLINECOLOR 255 0 0
        GEOMTRANSFORM (BUFFER([SHAPE], 1))
     END
END
Если кому интересен тред из листа рассылки MapServer, то вот он.
Вложения
border_style_art.png
Артефакт
border_style_art.png (10.74 КБ) 9071 просмотр
border_style.png
Стиль, который нужно было получить
border_style.png (878 байт) 9071 просмотр
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «Рецепты»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя