Страница 1 из 1
Запрос на пересечение объектов
Добавлено: 23 янв 2012, 08:34
Sibit
Добрый день! Есть таблица с полигонами, как составить запрос, что бы из нее выбрать пересекающиеся между собой объекты? Сначала подумал сделать так:
Код: Выделить всё
Select * from Query3 where Obj Contains part Any(Select obj from Query3) into Selection
Но он выбирает все объекты из таблицы.
Re: Запрос на пересечение объектов
Добавлено: 23 янв 2012, 08:43
reasonat
В mapinfo есть встроенная возможность проверить объекты слоя на пересечения - в меню Объекты/Проверка полигонов - результатом выдает выборку пересечений. Можно сохранить эту выборку в отдельную таблицу, а исходную таблицу вернуть в первоначальное состояние. Затем уже запросить Select-ом из двух таблиц на вложенность "пересечений" в объекты исходной таблицы. Это если без программирования.
А с программированием - пройтись циклом по всем объектам таблицы и выбирать для каждого полигона пересечения с остальной таблицей тем же select.
Re: Запрос на пересечение объектов
Добавлено: 23 янв 2012, 09:59
Sibit
Спасибо за ответ, но я хотел узнать как это сделать именно запросом. Т.к. перебирать все объекты в цикле относительно долго и я надеялся, что это можно сделать проще. Попробую через Object Check сделать, может это спасет

Re: Запрос на пересечение объектов
Добавлено: 23 янв 2012, 10:34
gamm
Sibit писал(а):Но он выбирает все объекты из таблицы.
как вы и просили - самопересечение, однако. Добавьте во вложенный select условие несовпадения с текущим obj (по ID). Хотя у Мапинфы такой кривой SQL, что не уверен, что это в нем можно записать. И зачем такие сложности (Contains part) вместо Intersects?
кстати, когда делаете запрос через меню, включите окно Мапвасика, авось текст запроса выдаст

Re: Запрос на пересечение объектов
Добавлено: 23 янв 2012, 10:39
reasonat
на проверку объектов, встроенную в меню, мапбейсик не выдает текста

Я когда-то уже мечтала такой увидеть. Но это не запрос, в данном случае, а встроенная утилитка.
А если добавлять условие на несовпадение с текущим объектом, то нужно назначать текущий объект для начала, а это опять же цикл по таблице.
Re: Запрос на пересечение объектов
Добавлено: 23 янв 2012, 12:02
Sibit
Добавьте во вложенный select условие несовпадения с текущим obj (по ID).
Вот собственно и хотел узнать, как добавить, но походу - никак((
И зачем такие сложности (Contains part) вместо Intersects?
Случай касания не интересует потому что
на проверку объектов, встроенную в меню, мапбейсик не выдает текста
Да ладно
Код: Выделить всё
Objects Check From Selection Into Table Untitled Overlap Pen (1,2,0) Brush (2,16776960,0)
Это и в доках есть(по крайней мере в версии 8.5 уже есть)
В общем с object Check не удалось - получается красиво, вот только очень мелкие площади он за пересечение не считает((
Re: Запрос на пересечение объектов
Добавлено: 23 янв 2012, 18:10
gamm
Sibit писал(а):Вот собственно и хотел узнать, как добавить, но походу - никак((
bruteforce - наше все!
сделайте две копии (Query3 => Query4), запрос на непустое пересечение (с сохранением ID из обоих копий), и убрать из результата одинаковые (в строке), ???, PROFIT!