Раскраска полигонов

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Раскраска полигонов

Сообщение Boris »

Нет, давайте все же вернемся к описанию задачи. Что именно должно быть разного цвета - пересечения, или пересекающиеся полигоны? Есть ли наложения в месте пересечения трех и более полигонов?
Потому как если нет наложений и каждый полигон имеет много пересечений, но каждое пересечение образовано только наложением двух полигонов, то задача сводится к задаче о раскраске карты. Что примыкание, что пересечение в этом случае задачи равноценные. И эта задача требует 5 разных красок. Наука говорит, что сейчас все сошлись на том, что их минимум 4. Поиск в гугле чего об этой проблеме на графах дал кучу результатов, один из 8 первых с кодом.
Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

Re: Раскраска полигонов

Сообщение Alexgis »

Boris,
1) Что именно должно быть разного цвета - пересечения, или пересекающиеся полигоны?
Разного цвета должны быть полигоны.
2) Есть ли наложения в месте пересечения трех и более полигонов?
Есть. Существуют области (места), в которых накладываются около 20 полигонгов.
теорема о четырёх красках здесь не применима - цветов будет больше.
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Раскраска полигонов

Сообщение Boris »

Тогда картинку в студию. Если пересекаются 20 выпуклых полигонов, то либо пересечение минимально, либо какой то полигон должен быть поглощен в результате пересечения.
Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

Re: Раскраска полигонов

Сообщение Alexgis »

Пример полигонов и их раскраски
Вложения
Раскрашенные полигоны
Раскрашенные полигоны
ploly_clr.png (7.14 КБ) 9884 просмотра
Полигоны
Полигоны
ploly.png (8.8 КБ) 9884 просмотра
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Раскраска полигонов

Сообщение KolesovDmitry »

Просто, чтобы лучше понять задачу -- а зачем вам их раскрашивать? Что вы потом собираетесь с этим делать?
Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

Re: Раскраска полигонов

Сообщение Alexgis »

На всякий случай. Каждый полигон - одного цвета. При раскраске они не режутся.
Эффект разных цветов в примере - за счёт полупрозрачности.
Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

Re: Раскраска полигонов

Сообщение Alexgis »

Полигоны это Convex hull + буфер вокруг точек, объединенных по некоторому признаку.
Вот точки и должны быть разного цвета.
KolesovDmitry писал(а):Что вы потом собираетесь с этим делать?
Показать на карте...
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Раскраска полигонов

Сообщение KolesovDmitry »

Alexgis писал(а):Полигоны это Convex hull + буфер вокруг точек, объединенных по некоторому признаку.
Вот точки и должны быть разного цвета.
KolesovDmitry писал(а):Что вы потом собираетесь с этим делать?
Показать на карте...
Тогда почему их просто не показать на карте так, как вы показали в примере (полупрозрачными)?
Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

Re: Раскраска полигонов

Сообщение Alexgis »

Если цветов много (да ещё полупрозрачные) - их на глаз не отличить.
Т.е. невозможно сделать палитру 80 различимых цветов - даже 20 с трудом.
Задача в том, чтобы максимально уменьшить количество уникальных цветов.

На рисунке, цвета проставлены вручную. А хотелось бы, чтобы это делал автомат.
Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Раскраска полигонов

Сообщение Ariki »

А в чём проблема? Вы правильно разобрались, что задача сводится к раскраске графа. По запросу "graph coloring algorithm" гуглится куча реализаций приближённого решения задачи:

С++
Python (исходный код библиотеки networkx)
Java
Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

Re: Раскраска полигонов

Сообщение Alexgis »

Ariki, спасибо - буду смотреть!
Сейчас и используется приближённый - беда в том, что он нестабильный.
Пробовали два варианта. И тот и другой дают не оптимальный результат в зависимости от данных.

Придётся делать точный, 2000 узлов - не так много.
Алгоритм ищется, желательно на pl/sql, чтобы яву не деплоить, но не принципиально...
Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Раскраска полигонов

Сообщение Ariki »

Приближённым жадный алгоритм раскраски является в том смысле, что он не гарантирует использование минимального количества цветов. Но гарантируется, что, например, если у вас один полигон может пересекаться максимум с 20 другими, то общее количество цветов будет не больше 21.

Точный алгоритм на таком количестве вершин использовать невозможно:
Википедия о сложности точного алгоритма
Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

Re: Раскраска полигонов

Сообщение Alexgis »

Ariki писал(а):Википедия о сложности точного алгоритма
Жесть - я как-то на цифры не посмотрел сразу (((
Спасибо - похоже вопрос исчерпан...
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Раскраска полигонов

Сообщение Boris »

Ну, судя по картинке, если показан типичный результат, то задача сильно легче полного перебора вариантов, т.к. объекты сгруппированы и нет единого непрерывного наложения. Вот если бы все 2000 полигонов создавали непрерывный объект, то дело было бы труба.
Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

Re: Раскраска полигонов

Сообщение Alexgis »

Показан нетипичный результат. Как писал выше, непрерывная цепочка может состоять из 90 полигонов - дело труба.
Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей