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

MapInfo, MapBasic
Ответить
Balaclawa_Crew
Новоприбывший
Сообщения: 5
Зарегистрирован: 17 дек 2018, 17:33
Репутация: 0
Откуда: Россия, Москва

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

Сообщение Balaclawa_Crew »

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

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

Сообщение 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.
Balaclawa_Crew
Новоприбывший
Сообщения: 5
Зарегистрирован: 17 дек 2018, 17:33
Репутация: 0
Откуда: Россия, Москва

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

Сообщение 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 Условием"?
Balaclawa_Crew
Новоприбывший
Сообщения: 5
Зарегистрирован: 17 дек 2018, 17:33
Репутация: 0
Откуда: Россия, Москва

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

Сообщение Balaclawa_Crew »

MI user писал(а): 17 дек 2018, 18:02В итоге должно быть открыто две таблицы, содержащих одинаковые данные. Допустим Tab1 и Tab2.
Тогда SQL-запрос будет такой:
И не направлена ли эта операция на поиск наложений в двух таблицах? Мне нужно найти пересечение полигонов в 1 таблице....
MI user
Участник
Сообщения: 65
Зарегистрирован: 14 янв 2013, 17:08
Репутация: -1238093703
Откуда: *рг

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

Сообщение MI user »

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

Код записывать в окно SQL.
SQL-contains.png
SQL-contains.png (8.84 КБ) 14720 просмотров
MI user
Участник
Сообщения: 65
Зарегистрирован: 14 янв 2013, 17:08
Репутация: -1238093703
Откуда: *рг

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

Сообщение 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 КБ) 14690 просмотров
Balaclawa_Crew
Новоприбывший
Сообщения: 5
Зарегистрирован: 17 дек 2018, 17:33
Репутация: 0
Откуда: Россия, Москва

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

Сообщение Balaclawa_Crew »

Это уже интереснее. Только не могу понять, для чего в данном случае Tab2? Как должна выглядеть структура таблиц Tab1 и Tab2?
Balaclawa_Crew
Новоприбывший
Сообщения: 5
Зарегистрирован: 17 дек 2018, 17:33
Репутация: 0
Откуда: Россия, Москва

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

Сообщение Balaclawa_Crew »

MI user писал(а): 17 дек 2018, 19:02Пожалуй, вот так можно:
Это уже интереснее. Только не могу понять, для чего в данном случае Tab2? Как должна выглядеть структура таблиц Tab1 и Tab2? И Список "Пересечения" нужно самому составлять?
trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir »

Tab1 и Tab2 могут быть одной и той же таблицей
zingeroud
Интересующийся
Сообщения: 46
Зарегистрирован: 21 ноя 2013, 15:16
Репутация: 14

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

Сообщение zingeroud »

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

Вернуться в «MapInfo»

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

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