SASGIS

Веб-картография и навигация

Логические операции с полигонами

Запрашиваем и выполняем хотелки к SAS.Планете вне очереди

Модераторы: vdemidov, Tolik

Правила форума
Настоятельно рекомендуем ознакомиться с правилами раздела платных услуг ТУТ.

Re: Логические операции с полигонами

Сообщение zed » 07 май 2015, 23:35

Так что писать-то :)

Операция слияния полигонов завершена успешно -> Merge polygons operation completed successfully!
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Логические операции с полигонами

Сообщение Tolik » 07 май 2015, 23:48

Только не это :)
Теперь мне нравится последний вариант (оракл примавера):
Merge process completed successfully.

P.S. Он мало отличается от моего первого варианта ;)

P.P.S. Почему "только не это": цепочка существительных переводится с английского задом наперёд: Merge polygons operation - это операция полигонов... слияния... :shock:
Tolik
Гуру
 
Сообщения: 2604
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 280 раз.
Поблагодарили: 587 раз.

Re: Логические операции с полигонами

Сообщение vasketsov » 08 май 2015, 01:32

zed писал(а):По-русски, я бы назвал фичу: слияние полигонов

А вот OGC использует название операции как Union. А Merge - как глагол и очень редко.

Из доки про Spatial для IBM Informix (в остальных примерно также, поверь, я их уже все просмотрел, остался только oracle):

The buffering process merges buffer polygons that overlap

Polygons
whose intersection results in a linestring will
automatically be merged after the intersecting linestring
has been dissolved

ЭТО ВСЁ!

Используется UNION:
The
ST_Union()
function returns the union set of two geometries—the Boolean
logical OR of space.

An aggregate function that computes the union
of geometries of the same dimension

И т.п.

А вообще я бы просто написал Operation.
Мало ли какие операции там будут выполняться.
vasketsov
Специалист
 
Сообщения: 901
Зарегистрирован: 25 июл 2009, 21:15
Благодарил (а): 0 раз.
Поблагодарили: 198 раз.

Re: Логические операции с полигонами

Сообщение Parasite » 08 май 2015, 04:27

Tolik писал(а):Но первый-то вариант от мелкомягких

Нашел на кого ссылаться. Там даже директор - уже тоже индус. :)
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 512 раз.

Re: Логические операции с полигонами

Сообщение zed » 08 май 2015, 16:26

Tolik писал(а):Когда редактируешь полигон, есть кнопка "Add to database" и "Save as new". Причём в обоих случаях открывается окно, в кот. можно изменить имя.
Было бы лучше (привычнее, логичнее)
1. переименовать на "Save" и "Save as..." соответственно
2. при нажатии Save сохранять с тем же именем без открытия диалога.

Сделал оба пункта и, по-моему, по пути нашёл баг: http://www.sasgis.org/mantis/view.php?id=2717

За это сообщение автора zed поблагодарил:
Tolik (08 май 2015, 21:18)
Рейтинг: 5.26%
 
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Логические операции с полигонами

Сообщение Papazol » 12 май 2015, 00:58

Стал описывать эту фичу в Wiki, и появились некоторые вопросы.

1. Правильно ли я понял из всего ранее написанного, что для сохранения в базе меток мультиполигона, состоящего из N отдельных полигонов, необходимо применять операцию Group и никакую другую?
2. ............................................................., что если вместо Group применить ИЛИ, а затем сохранить результат в базе, то некоторые полигоны (те, что не пересекаются с другими) будут в базе продублированы?
Потом ещё спрошу.
Аватара пользователя
Papazol
Гуру
 
Сообщения: 2069
Зарегистрирован: 04 дек 2009, 01:39
Откуда: Рязань
Благодарил (а): 74 раз.
Поблагодарили: 647 раз.

Re: Логические операции с полигонами

Сообщение zed » 12 май 2015, 10:48

1. Мультиполигоны могут получаться и в других операциях. Чтобы понять, что получилось в результате, и выдаётся окно по завершению процесса. Если вы там увидите, что результат содержит более одного полигона, то у вас получился мультиполигон. Если же стоит задача объединить отдельные полигоны и встаёт вопрос, какую операцию лучше использовать Group или OR, то используйте Group. При логических операциях производятся преобразования координат вершин полигонов с округлением из-за чего вершины нового полигона (внутри мультиполигона), будут незначительно отличаться от исходных. А вот при Group никаких округлений и преобразований не производится и там будет полная идентичность. Соответственно, и работает Group значительно быстрее.

2. В результате любой операции полигоны могут быть продублированы. Все операции никак не затрагивают существующие полигоны - в результате всегда получается новая сущность (полигон/мультиполигон), даже если это дубль. Поэтому тут нет никакой разницы, что там было Group или OR.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Логические операции с полигонами

Сообщение Papazol » 12 май 2015, 18:01

zed писал(а):Если вы там увидите, что результат содержит более одного полигона, то у вас получился мультиполигон.

Получиться-то он получился, а вот при сохранении в базу он в любом случае будет сохранён как мультиполигон, или есть вариант сохранения каждого полученного полигона в отдельности? Особенно актуально это при операциях, отличных от объединения.

zed писал(а):Если же стоит задача объединить отдельные полигоны и встаёт вопрос, какую операцию лучше использовать Group или OR, то используйте Group. При логических операциях производятся преобразования координат вершин полигонов с округлением из-за чего вершины нового полигона (внутри мультиполигона), будут незначительно отличаться от исходных. А вот при Group никаких округлений и преобразований не производится и там будет полная идентичность. Соответственно, и работает Group значительно быстрее.

То есть, после операции Group всегда сохраняется мультиполигон?

Ранее было так:
zed писал(а):Если полигоны лежат друг на друге, то после ИЛИ получится 1 полигон, а после Group так и останутся 2 перекрывающихся полигона. А если они никак не пересекаются, то результат будет одинаковый.

Рассмотрим, что будет сохранено в базе меток в каждом из случаев, исходя из описания. Не совсем понятны слова "так и останутся", но попробуем.

1. Полигоны лежат друг на друге, применяем операцию ИЛИ. Сохраняется ОДИН НЕ мультиполигон, то есть Single.
2. Полигоны лежат друг на друге, применяем операцию Group. Сохраняется ОДИН мультиполигон, состоящий из ДВУХ обычных полигонов.
3. Полигоны не пересекаются, применяем операцию ИЛИ. Сохраняется ОДИН мультиполигон?
4. Полигоны не пересекаются, применяем операцию Group. Сохраняется ОДИН мультиполигон?

Подозрения вызывают случаи 1 и 3. Как программа определяет, когда сохранять мультиполигон, а когда нет? Такая же история и при других логических операциях, в результате которых может получиться более одного полигона. Кто и по каким признакам определяет, в каком качестве их сохранять?
Аватара пользователя
Papazol
Гуру
 
Сообщения: 2069
Зарегистрирован: 04 дек 2009, 01:39
Откуда: Рязань
Благодарил (а): 74 раз.
Поблагодарили: 647 раз.

Re: Логические операции с полигонами

Сообщение zed » 12 май 2015, 19:19

Papazol писал(а): или есть вариант сохранения каждого полученного полигона в отдельности?

Нету таких вариантов. В менеджере меток возможно появится опция Ungroup, по которой можно будет мультиполигон разбить и сохранить как N независимых частей. Но такого пока никто не просил, и я не спешу с реализацией. Может никому и не надо такой опции?
Papazol писал(а):То есть, после операции Group всегда сохраняется мультиполигон?

Да.
Papazol писал(а):1. Полигоны лежат друг на друге, применяем операцию ИЛИ. Сохраняется ОДИН НЕ мультиполигон, то есть Single.
2. Полигоны лежат друг на друге, применяем операцию Group. Сохраняется ОДИН мультиполигон, состоящий из ДВУХ обычных полигонов.
3. Полигоны не пересекаются, применяем операцию ИЛИ. Сохраняется ОДИН мультиполигон?
4. Полигоны не пересекаются, применяем операцию Group. Сохраняется ОДИН мультиполигон?

Всё верно описано.
Papazol писал(а):Как программа определяет, когда сохранять мультиполигон, а когда нет?

С технической точки зрения, она даже и не пытается что-то определять, а всегда сохраняет мультиполигон, пусть даже в его составе будет один полигон. И то, что называется Single это на самом деле может быть Multi с одним полигоном (и в большинстве случаев так оно и есть, и писалась специальная проверка на Count > 1 у мультиполигона, чтобы его можно было обозвать Single). "Честный" же мультиполигон должен содержать как минимум 2 полигона и если в результате вы видите сообщение, что получилось более одного полигона, то это всегда честный мультиполигон. А если написано, что получился 1 полигон, то это мультиполигон с одним полигоном :)
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Логические операции с полигонами

Сообщение zed » 12 май 2015, 19:25

Вы вообще фичей пользоваться пробовали? Банальная проверка ведь всё покажет как есть. Выполнили операцию, сохранили результат в базу меток. Посмотрели что получилось. Попробовали то что получилось ещё раз добавить в слияние - оно подпишет сколько там Multi или там простой Single вышел. Всё ж прозрачно...
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Пред.След.

Вернуться в Внеочередное исполнение хотелок

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

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