Мечта про Mapedit

Основной форум пользователей GPS (Global Positioning System)
Правила форума
Для предотврашения спама первые сообщения вновь зарегистрированных пользователей проходят ручную премодерацию.
Ответить
atonis
Сообщения: 99
Зарегистрирован: 21 фев 2005, 10:34

Мечта про Mapedit

Сообщение atonis » 26 фев 2005, 11:01

Думаю, что эта идея "витает в воздухе", но пока на форуме не нашел (возможно, просто трудно придумать правильный ключ поиска :-)

Хочется, чтобы mapedit поддерживал полный набор операций булевой алгебры множеств на площадных объектах. Одно из естественных решений - реализовать теоретико-множественную разность полигонов, т.е. уметь по полигонам A и B строить полигон "A\B", содержащий точки из A, не лежащие в B. Результат можно записывать в A. Пока что в mapedit эта операция реализована только для специального случая, когда B строго содержится в A ("Join objects").

Набросок возможного алгоритма:

Примем за основу, что закрашенные области определяются так: точки, находящиеся "далеко", не закрашены, а при пересечении границы полигона состояние закрашенности меняется на противоположное (ведь в Гарминах все так и делается?). Тогда, зная вершины каждого из полигонов A и B и точки их самопересечения, можно считать каждый полигон объединением нескольких обычных многоугольников. Далее из каждого многоугольника, входящего в A, вычитаем все многоугольники, входящие в B (что, наверно, несложно).

Кстати, сама по себе возможность разбиения самопересекающегося полигона на многоугольники может быть полезной. Дополнительно можно предусмотреть операцию "чистки границ" по принципу: если удаление границы не изменяет множество внутренних точек полигона, то выполнить это удаление. Например, когда граница заходит внутрь и возвращается обратно своим следом. Или два многоугольника, соединенные длинной перемычкой: делаем разбиение и чистку границ - получаем просто два отдельных многоугольника.

Ну и не составит труда автоматизировать эти операции для однотипных объектов ("вычесть все болота из всех лесов").

Вот такие у меня мечты. А все из-за несовершенства гарминовского векторного формата, не поддерживающего слои ("одно над другим").


MichaelUS
Сообщения: 362
Зарегистрирован: 22 янв 2003, 03:43

Re: Мечта про Mapedit

Сообщение MichaelUS » 26 фев 2005, 13:13

> Набросок возможного алгоритма Есть достаточно популярный обзор подобных алгоритмов: http://www.csd.tsu.ru/library/Publicati ... pdf <br>

atonis
Сообщения: 99
Зарегистрирован: 21 фев 2005, 10:34

О, даже по-русски!

Сообщение atonis » 26 фев 2005, 17:23

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


Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Re: О, даже по-русски!

Сообщение Olexa » 28 фев 2005, 10:02

Ещё вот тут кое-что было: <A HREF="http://algolist.manual.ru/maths/geom/in ... br>Местами с кодом.

Olexa
Сообщения: 5738
Зарегистрирован: 31 авг 2001, 13:07

Re: Мечта про Mapedit

Сообщение Olexa » 28 фев 2005, 10:06

: Дополнительно можно предусмотреть операцию "чистки границ" по принципу: если удаление границы не изменяет множество внутренних точек полигона, то выполнить это удаление. Например, когда граница заходит внутрь и возвращается обратно своим следом.

Но-но, полегче! Острова потопишь. :-)


MichaelUS
Сообщения: 362
Зарегистрирован: 22 янв 2003, 03:43

Re: О, даже по-русски!

Сообщение MichaelUS » 28 фев 2005, 10:51

Удачный алгоритм описан в следующей статье: http://www.inf.tsu.ru/library/Publicati ... 0.pdf а пример с кодом - www.inf.tsu.ru/library/DiplomaWorks/Com ... br> При этом в первой работе учитывают погрешности дискретизации координат точек пересечения отрезков, чего нет в других алгоритмах, а во второй - рассматривается применение линейно-узлового алгоритма к криволинейным полигонам, о чём тоже пока приходится мечтать :)

atonis
Сообщения: 99
Зарегистрирован: 21 фев 2005, 10:34

Острова топить не хочу...

Сообщение atonis » 28 фев 2005, 12:43

Просто, например, хотелось бы, чтобы при отсекании чего-нибудь с краю карты граница отсеченного полигона не содержала лишнего участка края. Впрочем, может быть, это и не обязательно. Главное - болота из лесов научиться вырезать :-)


Ответить

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

Сейчас этот форум просматривают: Bing [Bot] и 10 гостей