Запрос на пересечение объектов

MapInfo, MapBasic
Ответить
Sibit
Активный участник
Сообщения: 216
Зарегистрирован: 21 окт 2009, 13:29
Репутация: 28
Откуда: Новосибирск

Запрос на пересечение объектов

Сообщение Sibit »

Добрый день! Есть таблица с полигонами, как составить запрос, что бы из нее выбрать пересекающиеся между собой объекты? Сначала подумал сделать так:

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

Select * from Query3 where Obj Contains part Any(Select obj from Query3) into Selection
Но он выбирает все объекты из таблицы.
reasonat
Завсегдатай
Сообщения: 257
Зарегистрирован: 10 июн 2009, 12:21
Репутация: 0
Откуда: Екатеринбург
Контактная информация:

Re: Запрос на пересечение объектов

Сообщение reasonat »

В mapinfo есть встроенная возможность проверить объекты слоя на пересечения - в меню Объекты/Проверка полигонов - результатом выдает выборку пересечений. Можно сохранить эту выборку в отдельную таблицу, а исходную таблицу вернуть в первоначальное состояние. Затем уже запросить Select-ом из двух таблиц на вложенность "пересечений" в объекты исходной таблицы. Это если без программирования.
А с программированием - пройтись циклом по всем объектам таблицы и выбирать для каждого полигона пересечения с остальной таблицей тем же select.
Sibit
Активный участник
Сообщения: 216
Зарегистрирован: 21 окт 2009, 13:29
Репутация: 28
Откуда: Новосибирск

Re: Запрос на пересечение объектов

Сообщение Sibit »

Спасибо за ответ, но я хотел узнать как это сделать именно запросом. Т.к. перебирать все объекты в цикле относительно долго и я надеялся, что это можно сделать проще. Попробую через Object Check сделать, может это спасет :)
gamm
Гуру
Сообщения: 4170
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Запрос на пересечение объектов

Сообщение gamm »

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

кстати, когда делаете запрос через меню, включите окно Мапвасика, авось текст запроса выдаст :mrgreen:
reasonat
Завсегдатай
Сообщения: 257
Зарегистрирован: 10 июн 2009, 12:21
Репутация: 0
Откуда: Екатеринбург
Контактная информация:

Re: Запрос на пересечение объектов

Сообщение reasonat »

на проверку объектов, встроенную в меню, мапбейсик не выдает текста :) Я когда-то уже мечтала такой увидеть. Но это не запрос, в данном случае, а встроенная утилитка.
А если добавлять условие на несовпадение с текущим объектом, то нужно назначать текущий объект для начала, а это опять же цикл по таблице.
Sibit
Активный участник
Сообщения: 216
Зарегистрирован: 21 окт 2009, 13:29
Репутация: 28
Откуда: Новосибирск

Re: Запрос на пересечение объектов

Сообщение 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 не удалось - получается красиво, вот только очень мелкие площади он за пересечение не считает((
gamm
Гуру
Сообщения: 4170
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Запрос на пересечение объектов

Сообщение gamm »

Sibit писал(а):Вот собственно и хотел узнать, как добавить, но походу - никак((
bruteforce - наше все!

сделайте две копии (Query3 => Query4), запрос на непустое пересечение (с сохранением ID из обоих копий), и убрать из результата одинаковые (в строке), ???, PROFIT!
Ответить

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

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

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