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

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 26 окт 2015, 15:29

а если реализовать жадный алгоритм раскраски графа используя инструменты Oracle для графов?

Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

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

Сообщение Alexgis » 26 окт 2015, 17:14

А вот не нашёл там ничего. Да и жадный алгоритм на таблицах делается на раз два.

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 379
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

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

Сообщение ginpetr » 28 окт 2015, 09:41

Попробовал придумать алгоритм на mapbasice для Mapinfo (чертовски любопытно стало).
На картинка видно, как получается. Рассмотрел два случая: когда запрещены любые пересечения и когда пересечение в одной точке разрешено. Внёс элемент случайности, так что результат каждый раз разный.
Работает только со структурой приложенной таблицы.
Перед запуском нужно выбрать полигоны.
Вложения
GR.zip
(12.35 КБ) 374 скачивания
Пересечения в точке разрешены.JPG
Пересечения в точке разрешены.JPG (102.25 КБ) 8251 просмотр
Без пересечений.JPG
Без пересечений.JPG (103.03 КБ) 8251 просмотр

Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

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

Сообщение Alexgis » 29 окт 2015, 13:26

Когда: "Пересечение в точке разрешено" - "Да"
Не работает. Где-то ошибка - цвета могут пересекаться
ex.png
пример
ex.png (7.3 КБ) 8165 просмотров
GR1.zip
(5.15 КБ) 327 скачиваний

Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

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

Сообщение Alexgis » 29 окт 2015, 15:23

Когда: "Пересечение в точке разрешено" - "Нет"
Очевидно использован приблизительный алгоритм
ex1.png
ex1.png (8.82 КБ) 8154 просмотра
По теореме о четырех красках можно раскрасить более оптимальным способом: 4 цвета вместо 5
ex2.png
ex2.png (5.82 КБ) 8150 просмотров
Вложения
GR2.zip
(5.09 КБ) 345 скачиваний

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 379
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

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

Сообщение ginpetr » 29 окт 2015, 17:49

В первом случае дело может быть в нетопологичности полигонов. Проверить сейчас не могу.
Во втором случае, при повторном запуске алгоритм может уложиться в четыре краски (случайный выбор начала перебора).
Ну и, разумеется, алгоритм придуман из любопытства и не совершенен(постоянные запросы-переборы, все-таки нужно строить и анализировать граф). В существующих алгоритмах не разбирался.
Последний раз редактировалось ginpetr 30 окт 2015, 08:08, всего редактировалось 1 раз.

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 379
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

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

Сообщение ginpetr » 30 окт 2015, 07:57

Попробовал.
В первом случае, действительно, топология не совершенна, поэтому Мапинфо считает, что красные полигоны пересекаются в одной точке.
Во втором случае со второго запуска получил 4 цвета (топология также поправлена).
В любом случае для большого количества полигонов нужно оптимизировать (например, сохранить после первого перебора для каждого полигона "отношения" с соседями, чтобы исключить повторные ресурсоёмкие геозапросы)
Вложения
Без пересечений.JPG
Без пересечений.JPG (31.23 КБ) 8089 просмотров

Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

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

Сообщение Alexgis » 30 окт 2015, 16:17

Действительно, топология...

Alexgis
Интересующийся
Сообщения: 23
Зарегистрирован: 19 окт 2015, 11:10
Репутация: 1

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

Сообщение Alexgis » 30 окт 2015, 17:14

Классическая жадная раскраска на MapBasic )))))
Через объединение таблиц.
Раскрашиваются все полигоны в таблице.

1) Строится таблица с rowID пересекающихся объектов.
2) Сортируем в зависимости от количества пересечений
3) Раскрашиваем объект

спасибо ginpetr, за команду для нахождения пересечений
ex3.png
ex3.png (26.69 КБ) 8047 просмотров
Относительно точного алгоритма
В программе, полигоны сортируются в зависимости от количества связанных полигонов в обратном порядке.
Всегда существует такой порядок, который приводит жадный алгоритм к оптимальному числу.
Однако количество перестановок равно n!
т.е. для 10 полигонов - количество перестановок = 3628800 )))
Вложения
Polygons.zip
(13.68 КБ) 348 скачиваний

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 30 окт 2015, 18:34

деревья!

Ответить

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

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

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