Я ищу способ создать диаграмму Вороного, основанную на отрезках, а не на точках. Смотрите пример ниже (взят из этой презентации ).
В идеале мне бы хотелось написать что-нибудь из Python, но также было бы приемлемо решение с использованием ArcGIS или аналогичного.
Единственная библиотека для этого, которую я нашел, - это openvoronoi , которая выглядит многообещающе. Есть ли другие?
line
voronoi-thiessen
Snorfalorpagus
источник
источник
Ответы:
Мы (университетская команда) разработали реализацию для этого с использованием надстройки ArcGIS 10.0 и ArcObjects. Приложение полностью бесплатное. Реализация использует растровую методологию, которая использует в качестве входных точек, линий или многоугольников для создания обыкновенных или умноженных на несколько диаграмм Вороного диаграммы (или комбинацию вышеупомянутого, т.е. вы можете использовать один из каждого типа фигуры, создавая одну диаграмму из набора до три отдельных класса объектов). Он все еще находится в разработке, но должен быть достаточно стабильным, особенно если вы хотите делать только строки. Для работы надстройки требуется лицензия Spatial Analyst. Сам код с открытым исходным кодом, поэтому не стесняйтесь делать с ним, как вам угодно.
https://github.com/UNTGeography/VoronoiDiagramsGIS
Он использует метод, аналогичный «евклидовому распределению», описанному в ответе @ radouxju, и использует растровое направление / растровое направление для создания векторных многоугольников из результирующего растра.
источник
Вороной изначально рассчитан на очки. Вот два метода, которые я могу представить для вашей проблемы (со ссылкой на инструменты ArcGIS, но, возможно, это возможно с помощью shapely):
1)
а) создать точки вдоль линий (например, уплотнить, затем добавить вершины в линию)
б) создать полигоны Тиссена
в) растворить многоугольники Тиссена на основе линий, которые они пересекают
2)
а) с помощью пространственного аналитика вычислите евклидово распределение по линиям
б) преобразовать каждую зону в многоугольник
источник
Для некоторых клиентов пара коллег и я работали над созданием двух инструментов геообработки, которые делают это. Хотя инструменты геообработки не являются общедоступными, мы использовали следующие Python и C #:
И C #, и оболочка python фактически используют API C ++ Boost Voronoi: http://www.boost.org/doc/libs/1_54_0/libs/polygon/doc/voronoi_main.htm.
Обратите внимание, что API потребляет много памяти. Это не проблема, если вы используете геообработку для 64 бит, ArcGIS Pro или QGIS. Это ограничение, если вы используете ArcGIS Desktop, поскольку оно 32-битное. (Подробная дорожная сеть из 40000 строк или более должна быть достаточной для достижения предела памяти)
источник
ET Geowizards (плагин для Arc) имеет инструмент для этого, который принимает полилинии (см. Скриншот ниже). К сожалению, вам понадобится лицензионный продукт для запуска инструмента, но я думаю, что он должен сработать.
источник
Плюс еще один способ решения вашей задачи с использованием PostgreSQL / PostGIS.
Если строки короткие и простые, запустите скрипт:
Смотрите результат.
Если строки длинные, запустите скрипт:
Смотрите результат.
Если необходимо, сожмите количество точек на линиях, в моем примере это 10 баллов.
Оригинальные решения.
Этот скрипт называется: ST_VoronoiDiagramsFromLines.
источник