Однозначно выделяет регионы, содержащие несколько полигонов в одном объекте следующий запрос:
Код: Выделить всё
Select * from Untitled where val(str$(ObjectInfo( obj, 21))) > 1 and str$(ObjectInfo( obj, 1) ) = "7" into Selection
Browse * From Selection
Полигоны, содержащие дыры - из их числа. К сожалению, к таковым относятся и объекты просто, содержащие несколько полигонов. На пример, города, состоящие из нескольких частей или кварталов.
---
Когда мне пришлось решать такую же задачу, я ее делал в несколько частей:
1. создал в исследуемой таблице колонку с уникальным номером (что бы потом было к чему привязаться)
2. создал запрос на исследуемой таблице, в которую включил только три поля:
- созданный уникальный номер
- вычисляемое поле кол-во полигонов, входящих в объект = val(str$(ObjectInfo( obj, 21)))
- вычисляемое поле площадь = Area(obj, "hectare")
с условием val(str$(ObjectInfo( obj, 21))) > 1 and str$(ObjectInfo( obj, 1) ) = "7"
т.е. только те, которые состоят из нескольких регионов
3. сохранил это запрос как таблицу, затем открыл ее
4. выделил все объекты и применил Objects->Dissagregate

- Clipboard01.gif (7.46 КБ) 7686 просмотров
5. Все составные объекты "развалились" на свои составляющие
6. Удалил все получившиеся объекты, у которых площадь получилась МЕНЬШЕ, чем была вычислена для полного объекта.
7. Оставшиеся - это объекты, которые были окружением дырок. Их номера и использовал для отбора этих объектов в исходной таблице.
---
Минус этого метода в том, что он не позволяет находить объекты с дырками, которые являлись составными объектами из нескольких регионов. В общем случае здесь нужна некоторая в рекурсивность в переборе отбрасываемых элементов.
---
Так же может помочь то, что при включенной кнопке "Retain Holes in Regions"

- Clipboard03.gif (7.45 КБ) 7686 просмотров
Из двух таких полигонов - один с 2-мя дырками, второй из двух частей, одна их которых с дыркой:

- Clipboard02.gif (3.88 КБ) 7685 просмотров
получается ТРИ объекта:

- Clipboard04.gif (3.88 КБ) 7684 просмотра
т.к. "разобран" был только объект, который состоял из двух частей. Дырка осталась в одной из новых частей.
Наверное это говорит о том, что вдействительности в MI или MapBasic-е существует функция, которая проверяет наличие-отсутствие "дыр". Но на поверхности ее как-то не удалось выявить.
