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

выбор полигонов с "дырами"

Добавлено: 28 июл 2009, 08:15
laska
подскажите, как с помощью запроса/приложения вычислить на слое полигоны, имеющие внутри дыры? может кто сталкивался. вручную не получится, очень большая площадь!

Re: выбор полигонов с "дырами"

Добавлено: 28 июл 2009, 11:00
alexandr cherepanov
если полигоны разреженные, то можно попробовать Проверка полигонов -> Обнаружение пустот между полигонами

затем по выбранным участкам построить небольшой буфер и выбрать полигоны пересекающиеся с буфером

Re: выбор полигонов с "дырами"

Добавлено: 28 июл 2009, 11:25
laska
спасибо!
а может кто-то знает другой способ? :)

Re: выбор полигонов с "дырами"

Добавлено: 01 авг 2009, 22:32
enRai
Возможно Objects Clean подойдет?
Корректирует топологию объектов из данной таблицы, дополнительно может удалять перекрытия и
закрывать бреши между полигонами
Объекты из исходной tablename проверяются на предмет топологической корректности, например,
самопересечений, наложения и пустот. Самопересекающиеся полигоны в форме "восьмерки" будут
превращены в два полигона, соприкасающихся в общей вершине. Полигоны, содержащие острые
выступы, подвергаются обработке, при которой часть таких выступов удаляется. Подвергнутый
коррекции объект будет помещен вместо исходного объекта.
Пустоты будут удалены путем их объединения с соседним полигоном, причем именно тем, у которого
площадь больше.

Re: выбор полигонов с "дырами"

Добавлено: 02 авг 2009, 16:10
Boris
Однозначно выделяет регионы, содержащие несколько полигонов в одном объекте следующий запрос:

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

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
Clipboard01.gif (7.46 КБ) 7675 просмотров
5. Все составные объекты "развалились" на свои составляющие
6. Удалил все получившиеся объекты, у которых площадь получилась МЕНЬШЕ, чем была вычислена для полного объекта.
7. Оставшиеся - это объекты, которые были окружением дырок. Их номера и использовал для отбора этих объектов в исходной таблице.
---
Минус этого метода в том, что он не позволяет находить объекты с дырками, которые являлись составными объектами из нескольких регионов. В общем случае здесь нужна некоторая в рекурсивность в переборе отбрасываемых элементов.
---
Так же может помочь то, что при включенной кнопке "Retain Holes in Regions"
Clipboard03.gif
Clipboard03.gif (7.45 КБ) 7675 просмотров
Из двух таких полигонов - один с 2-мя дырками, второй из двух частей, одна их которых с дыркой:
Clipboard02.gif
Clipboard02.gif (3.88 КБ) 7674 просмотра
получается ТРИ объекта:
Clipboard04.gif
Clipboard04.gif (3.88 КБ) 7673 просмотра
т.к. "разобран" был только объект, который состоял из двух частей. Дырка осталась в одной из новых частей.
Наверное это говорит о том, что вдействительности в MI или MapBasic-е существует функция, которая проверяет наличие-отсутствие "дыр". Но на поверхности ее как-то не удалось выявить. :(

Re: выбор полигонов с "дырами"

Добавлено: 02 авг 2009, 16:12
Boris
Хотя я почитал ответы и понял, что я ответил на другой вопрос. Может речь шла именно о дырах не внутри, а между полигонами?