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

MapInfo, MapBasic
Ответить
laska
Новоприбывший
Сообщения: 7
Зарегистрирован: 21 июл 2009, 12:33
Репутация: 0

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

Сообщение laska »

подскажите, как с помощью запроса/приложения вычислить на слое полигоны, имеющие внутри дыры? может кто сталкивался. вручную не получится, очень большая площадь!
alexandr cherepanov
Гуру
Сообщения: 534
Зарегистрирован: 30 ноя 2006, 13:31
Репутация: 116
Откуда: Moscow

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

Сообщение alexandr cherepanov »

если полигоны разреженные, то можно попробовать Проверка полигонов -> Обнаружение пустот между полигонами

затем по выбранным участкам построить небольшой буфер и выбрать полигоны пересекающиеся с буфером
laska
Новоприбывший
Сообщения: 7
Зарегистрирован: 21 июл 2009, 12:33
Репутация: 0

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

Сообщение laska »

спасибо!
а может кто-то знает другой способ? :)
enRai
Интересующийся
Сообщения: 18
Зарегистрирован: 22 июл 2009, 18:06
Репутация: 0

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

Сообщение enRai »

Возможно Objects Clean подойдет?
Корректирует топологию объектов из данной таблицы, дополнительно может удалять перекрытия и
закрывать бреши между полигонами
Объекты из исходной tablename проверяются на предмет топологической корректности, например,
самопересечений, наложения и пустот. Самопересекающиеся полигоны в форме "восьмерки" будут
превращены в два полигона, соприкасающихся в общей вершине. Полигоны, содержащие острые
выступы, подвергаются обработке, при которой часть таких выступов удаляется. Подвергнутый
коррекции объект будет помещен вместо исходного объекта.
Пустоты будут удалены путем их объединения с соседним полигоном, причем именно тем, у которого
площадь больше.
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

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

Сообщение 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 КБ) 7666 просмотров
5. Все составные объекты "развалились" на свои составляющие
6. Удалил все получившиеся объекты, у которых площадь получилась МЕНЬШЕ, чем была вычислена для полного объекта.
7. Оставшиеся - это объекты, которые были окружением дырок. Их номера и использовал для отбора этих объектов в исходной таблице.
---
Минус этого метода в том, что он не позволяет находить объекты с дырками, которые являлись составными объектами из нескольких регионов. В общем случае здесь нужна некоторая в рекурсивность в переборе отбрасываемых элементов.
---
Так же может помочь то, что при включенной кнопке "Retain Holes in Regions"
Clipboard03.gif
Clipboard03.gif (7.45 КБ) 7666 просмотров
Из двух таких полигонов - один с 2-мя дырками, второй из двух частей, одна их которых с дыркой:
Clipboard02.gif
Clipboard02.gif (3.88 КБ) 7665 просмотров
получается ТРИ объекта:
Clipboard04.gif
Clipboard04.gif (3.88 КБ) 7664 просмотра
т.к. "разобран" был только объект, который состоял из двух частей. Дырка осталась в одной из новых частей.
Наверное это говорит о том, что вдействительности в MI или MapBasic-е существует функция, которая проверяет наличие-отсутствие "дыр". Но на поверхности ее как-то не удалось выявить. :(
Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

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

Сообщение Boris »

Хотя я почитал ответы и понял, что я ответил на другой вопрос. Может речь шла именно о дырах не внутри, а между полигонами?
Ответить

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

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

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