Алгоритм надувания / сдувания (смещения, буферизации) полилиний

Связанный вопрос:
Алгоритм накачивания / выкачивания (смещения, буферизации) полигонов

Разница в том, что я ищу способ накачать данную полилинию в многоугольник:

полилиния с коробкой вокруг

У меня есть следующий вход:

  • Список 2D точек, которые образуют полилинию (ярко-зеленый на эскизе)
  • Ширина линии

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

Я изначально думал, что смогу использовать Повышение :: геометрия :: буфер для этого, к сожалению, это только кажется, поддерживает коробки на данный момент. Решение с использованием Повысьте :: Геометрия или же GDAL / OGR будет предпочтительным.

ОБНОВИТЬ:
Я решил использовать Clipper Library и его OffsetPolyLines функция. Как только Boost Geometry будет выпущен с поддержкой Polyline-Buffer, я переключусь на Boost (так как все остальное работает с Boost в моем программном обеспечении).

3

Решение

Я понимаю, что OP предпочитал решение в Boost :: Geometry или GDAL / OGR, но, если другие люди следуют этой теме, мой Библиотека Clipper также можно сделать смещение полилинии. (Скоро будет выпущен версия 6 это уже есть в репозитории SourceForge, что упрощает это, и теперь оно также поддерживает обрезание по открытому пути (полилинии).)

2

Другие решения

Расширение Boost.Geometry (из магистрали) может сделать это. Это еще не выпущено. Он может буферизоваться вокруг многоугольников, многоугольников, точек и нескольких геометрий. Вы можете указать острые углы (митра) или закругленные углы. Это еще не идеально, но линии, как показано в примере выше, не должны создавать проблем.

В выпущенной версии (1.54) этого еще нет, а также в следующей не будет. Так что сейчас вы должны использовать магистраль (из SVN)

2