Страница 1 из 1

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

Добавлено: 29 май 2012, 19:11
Denis Rykov
Потребовалось в 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, то вот он.