Потребовалось в 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, то
вот он.
Spatial is now, more than ever, just another column- The Geometry Column.