выбор полигонов с "дырами"
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 21 июл 2009, 12:33
- Репутация: 0
выбор полигонов с "дырами"
подскажите, как с помощью запроса/приложения вычислить на слое полигоны, имеющие внутри дыры? может кто сталкивался. вручную не получится, очень большая площадь!
-
- Гуру
- Сообщения: 534
- Зарегистрирован: 30 ноя 2006, 13:31
- Репутация: 116
- Откуда: Moscow
Re: выбор полигонов с "дырами"
если полигоны разреженные, то можно попробовать Проверка полигонов -> Обнаружение пустот между полигонами
затем по выбранным участкам построить небольшой буфер и выбрать полигоны пересекающиеся с буфером
затем по выбранным участкам построить небольшой буфер и выбрать полигоны пересекающиеся с буфером
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 21 июл 2009, 12:33
- Репутация: 0
Re: выбор полигонов с "дырами"
спасибо!
а может кто-то знает другой способ?
а может кто-то знает другой способ?

-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 22 июл 2009, 18:06
- Репутация: 0
Re: выбор полигонов с "дырами"
Возможно Objects Clean подойдет?
Корректирует топологию объектов из данной таблицы, дополнительно может удалять перекрытия и
закрывать бреши между полигонами
Объекты из исходной tablename проверяются на предмет топологической корректности, например,
самопересечений, наложения и пустот. Самопересекающиеся полигоны в форме "восьмерки" будут
превращены в два полигона, соприкасающихся в общей вершине. Полигоны, содержащие острые
выступы, подвергаются обработке, при которой часть таких выступов удаляется. Подвергнутый
коррекции объект будет помещен вместо исходного объекта.
Пустоты будут удалены путем их объединения с соседним полигоном, причем именно тем, у которого
площадь больше.
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: выбор полигонов с "дырами"
Однозначно выделяет регионы, содержащие несколько полигонов в одном объекте следующий запрос:
Полигоны, содержащие дыры - из их числа. К сожалению, к таковым относятся и объекты просто, содержащие несколько полигонов. На пример, города, состоящие из нескольких частей или кварталов.
---
Когда мне пришлось решать такую же задачу, я ее делал в несколько частей:
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 5. Все составные объекты "развалились" на свои составляющие
6. Удалил все получившиеся объекты, у которых площадь получилась МЕНЬШЕ, чем была вычислена для полного объекта.
7. Оставшиеся - это объекты, которые были окружением дырок. Их номера и использовал для отбора этих объектов в исходной таблице.
---
Минус этого метода в том, что он не позволяет находить объекты с дырками, которые являлись составными объектами из нескольких регионов. В общем случае здесь нужна некоторая в рекурсивность в переборе отбрасываемых элементов.
---
Так же может помочь то, что при включенной кнопке "Retain Holes in Regions" Из двух таких полигонов - один с 2-мя дырками, второй из двух частей, одна их которых с дыркой: получается ТРИ объекта: т.к. "разобран" был только объект, который состоял из двух частей. Дырка осталась в одной из новых частей.
Наверное это говорит о том, что вдействительности в MI или MapBasic-е существует функция, которая проверяет наличие-отсутствие "дыр". Но на поверхности ее как-то не удалось выявить.
Код: Выделить всё
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 5. Все составные объекты "развалились" на свои составляющие
6. Удалил все получившиеся объекты, у которых площадь получилась МЕНЬШЕ, чем была вычислена для полного объекта.
7. Оставшиеся - это объекты, которые были окружением дырок. Их номера и использовал для отбора этих объектов в исходной таблице.
---
Минус этого метода в том, что он не позволяет находить объекты с дырками, которые являлись составными объектами из нескольких регионов. В общем случае здесь нужна некоторая в рекурсивность в переборе отбрасываемых элементов.
---
Так же может помочь то, что при включенной кнопке "Retain Holes in Regions" Из двух таких полигонов - один с 2-мя дырками, второй из двух частей, одна их которых с дыркой: получается ТРИ объекта: т.к. "разобран" был только объект, который состоял из двух частей. Дырка осталась в одной из новых частей.
Наверное это говорит о том, что вдействительности в MI или MapBasic-е существует функция, которая проверяет наличие-отсутствие "дыр". Но на поверхности ее как-то не удалось выявить.

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