#c #line #polygon #cgal #simplification
#c #строка #полигон #cgal #упрощение
Вопрос:
Я пытался выполнить упрощение линий на полигонах, принадлежащих картам, с помощью этого руководства CGAL, например, в Южной Корее.
Это скриншот Южной Кореи после упрощения строки с помощью CGAL.
Я выполнил упрощение линии, добавив каждый полигон CGAL::Constrained_triangulation_plus_2<CDT> ct
и затем запустив CGAL::Polyline_simplification_2::simplify(ct, Cost(), Stop(0.5));
.
Внешние границы будут упрощены, а внутренние / общие границы (между провинциями) — нет. Есть ли какой-нибудь способ упростить и внутренние / общие границы?
Я также попытался simplify
обработать каждый полигон по отдельности, а затем объединить их вместе, чтобы сформировать целую страну. Проблема, однако, в том, что каждый многоугольник будет упрощаться сам по себе, и поэтому, если Polygon1
упрощается, нет гарантии, что общие вершины соседних Polygon2
будут перемещены в те же координаты Polygon1
, что и вершины, и поэтому пересечения происходят, когда вы соединяете их вместе, как это произойдет с thisКарта Южной Кореи.
Спасибо.
Комментарии:
1. Я думаю, у вас возникают сложности, потому что вы выбрали неправильный набор инструментов для представления географической информации. Вы смотрели на GGAL
2D Arrangements
? Вы могли бы использовать их более естественно для представления плоского графика с изогнутыми краями… Руководство здесь: doc.cgal.org/latest/Arrangement_on_surface_2/index.html2. Привет, ГЕКТО. Спасибо за ваш ответ / предложение и извинения за поздний ответ. Принимая во внимание 2D-компоновки, есть ли способ преобразовать объекты Polygon_2 в объекты 2D-компоновки и наоборот? Кроме того, есть ли способ упростить 2D-компоновки в целом, поскольку, похоже, не существует
simplify()
функции для 2D-компоновок? Еще раз спасибо за вашу помощь.3. Карта, с которой вы работаете, состоит из нескольких полилиний, соединенных конечными точками — вы можете сохранить все это как компоновку. Полилинии могут быть упрощены сами по себе, а не как части полигонов. Полилинии и полигоны могут быть извлечены из компоновки с использованием различных итераторов
Ответ №1:
Когда вы пишете «общие границы», я предполагаю, что они есть дважды, один раз из каждой провинции. Вам нужно разделить полигоны провинции, где встречаются три провинции, а затем использовать только одну из двух общих границ.
Комментарии:
1. Привет @Andreas, спасибо за ваш ответ. Я полагаю, что понимаю ваше предложение и был бы готов сделать это таким образом. Однако, надеюсь, я смогу уточнить, означает ли это, что CGAL не предлагает какой-либо «собственный» способ более удобного упрощения линий для общих границ? Если это не так, знаете ли вы какие-либо пакеты C , которые позволили бы это удобное упрощение общих границ? Поскольку я анализирую поля GeoJSON, я также думал о преобразовании этих GeoJSON в TopoJSON, поскольку я считаю, что TopoJSON был создан для преобразования с сохранением топологии.
2. Обратите внимание, что вы можете достичь того, что рекомендует Андреас, используя функцию split_graph_into_polylines() на boost
adjacency_list
, изначально заполненном всеми входными сегментами.3. Извините за задержку, но я еще не получил уведомление. Я добавил небольшой пример на gist.github.com . На самом деле оно не отшлифовано и должно быть внутри упрощения полилинии, но, возможно, оно полезно напрямую.
4. Привет, слориот и Андреас, большое вам спасибо за помощь. Также прошу прощения за задержку, я тоже не получил уведомление. Я попробую это, спасибо!
5. Привет, филлммон. Теперь у нас также есть запрос на извлечение, который может упростить полилинии, которые имеют общие подпоследовательности.