Страница 1 из 1

Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 17 дек 2018, 17:48
Balaclawa_Crew
Уважаемые Форумчане, доброго дня. Облазил кучу форумов и сайтов, но конкретного ответа так и не нашел.
Поставлена задача: Найти и удалить все пересекающиеся полигоны на карте. Примерное кол-во полигонов примерно 80.000. Про стандартную функцию по поиску пересечений знаю, но как это применить для решения данной задачи не приложу ума. Про SQL запросы тоже читал. Но конкретики, и пошаговых действий так и не нашел.
Может быть найдется тот человек, который сможет все объяснить ОТ и ДО доходчиво.
Возможно ли это сделать в MapInfo и если да, то как? Если это делается через SQL запрос, то что и в какой строке нужно прописывать. Заранее Всем спасибо за ответы! :D :D :D

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 17 дек 2018, 18:02
MI user
Если нужно использовать SQL-запрос, то:
1) В таблицу добавить колонку для хранения уникального идентификатора. Например, "UID".
2) Заполнить UID не повторяющимися значениями. Меню "Таблица\Обновить колонку", значение ROWID.
3) Сделать копию таблицы. Меню "Таблица\Сохранить копию".
4) Открыть копию.

В итоге должно быть открыто две таблицы, содержащих одинаковые данные. Допустим Tab1 и Tab2.
Тогда SQL-запрос будет такой:

Код: Выделить всё

SELECT 
Tab1.UID, Tab1.obj 
FROM Tab1, Tab2
WHERE Tab2.obj contains  Tab2.obj and Tab1.UID <> Tab2.UID
Получим список пересекающихся объектов и их UID.

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 17 дек 2018, 18:08
Balaclawa_Crew
MI user писал(а):
17 дек 2018, 18:02
В итоге должно быть открыто две таблицы, содержащих одинаковые данные. Допустим Tab1 и Tab2.
Тогда SQL-запрос будет такой:
КОД: ВЫДЕЛИТЬ ВСЁ

SELECT
Tab1.UID, Tab1.obj
FROM Tab1, Tab2
WHERE Tab2.obj contains Tab2.obj and Tab1.UID <> Tab2.UID
Понял, а где в форме SQL-pзапроса прописывать весь этот код? В графе "C Условием"?

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 17 дек 2018, 18:10
Balaclawa_Crew
MI user писал(а):
17 дек 2018, 18:02
В итоге должно быть открыто две таблицы, содержащих одинаковые данные. Допустим Tab1 и Tab2.
Тогда SQL-запрос будет такой:
И не направлена ли эта операция на поиск наложений в двух таблицах? Мне нужно найти пересечение полигонов в 1 таблице....

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 17 дек 2018, 18:18
MI user
Balaclawa_Crew писал(а):
17 дек 2018, 18:10
И не направлена ли эта операция на поиск наложений в двух таблицах? Мне нужно найти пересечение полигонов в 1 таблице....
Да, оператор "contains" ищет вхождение центроида первого объекта во второй. Моя оплошность, не правильно понял задачу. Самому как-то надо было найти объекты-дубли, для этого и код.

Код записывать в окно SQL.
SQL-contains.png
SQL-contains.png (8.84 КБ) 13358 просмотров

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 17 дек 2018, 19:02
MI user
Пожалуй, вот так можно:

Код: Выделить всё

Select Area(Overlap(Tab1.Obj, Tab2.Obj), "sq m") "П_Пересечения", Tab1.UID "UID1", Tab2.UID "UID2"
FROM Tab1, Tab2 
WHERE (Tab1.obj intersects Tab2.obj) AND (Tab1.UID <> Tab2.UID) 
Order By П_Пересечения 
Into Пересечения
В результате получим таблицу Пересечения, в которой будет указана площадь пересечения объектов. Если площадь больше 0, значит объект с этим UID точно пересекается с каким-то другим объектом.
Вот например:
SQL-intersects.png
SQL-intersects.png (72.35 КБ) 13328 просмотров

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 18 дек 2018, 09:57
Balaclawa_Crew
Это уже интереснее. Только не могу понять, для чего в данном случае Tab2? Как должна выглядеть структура таблиц Tab1 и Tab2?

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 18 дек 2018, 10:00
Balaclawa_Crew
MI user писал(а):
17 дек 2018, 19:02
Пожалуй, вот так можно:
Это уже интереснее. Только не могу понять, для чего в данном случае Tab2? Как должна выглядеть структура таблиц Tab1 и Tab2? И Список "Пересечения" нужно самому составлять?

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 18 дек 2018, 10:03
trir
Tab1 и Tab2 могут быть одной и той же таблицей

Re: Поиск и удаление пересекающихся полигонов в MapInfo

Добавлено: 25 мар 2019, 13:45
zingeroud
Добрый день, а подскажите пожалуйста если нужна выборка не по всем объектам Tab1, а по объектам выборки из этой таблицы с неким условием, например CATEGORY_TXT="Земли населенных пунктов"