Выбрать полигоны состоящие из двух и более внешних контуров без дырок

Вопросы связанные с работой ГИС Аксиома
Ответить
Аватара пользователя
LiSa
Пользователь
Сообщения: 102
Зарегистрирован: 20 сен 2023, 17:19

Выбрать полигоны состоящие из двух и более внешних контуров без дырок

Сообщение LiSa » 28 янв 2026, 12:24

Здравствуйте.
Имеется полигональный слой. Необходимо выбрать полигоны, которые состоят из двух и более внешних контуров и при этом не имеют ДЫР.
Предполагалось:
1. выбрать все составные полигоны
2. удалить все полигоны с дырками
С помощью каких функций можно это сделать?

не нашла функции ObjectInfo
NumInteriorRing(obj)>1 не выбирает объекты
Поясните, пожалуйста.
Спасибо.
Аватара пользователя
Александр
Администратор
Сообщения: 731
Зарегистрирован: 18 апр 2019, 11:21

Re: Выбрать полигоны состоящие из двух и более внешних контуров без дырок

Сообщение Александр » 28 янв 2026, 13:28

LiSa писал(а): 28 янв 2026, 12:24 Имеется полигональный слой. Необходимо выбрать полигоны, которые состоят из двух и более внешних контуров и при этом не имеют ДЫР.
Предполагалось:
1. выбрать все составные полигоны
2. удалить все полигоны с дырками
С помощью каких функций можно это сделать?
Для выбора полигонов, состоящих из двух и более внешних контуров (мультиполигонов) и не имеющих внутренних колец («дыр»), рекомендуем использовать следующее условие в запросе:

Code: Select all

ObjInfoType(obj) = 7
and ObjInfoNContours(obj) > 1
and ObjInfoNItems(obj) = ObjInfoNContours(obj)
Пояснение логики условия:
ObjInfoType(obj) = 7 - отбор объектов типа «полигон или коллекция полигонов».
ObjInfoNContours(obj) > 1 - выбор объектов, содержащих более одного контура (внешних и/или внутренних).
ObjInfoNItems(obj) = ObjInfoNContours(obj) - гарантирует отсутствие внутренних колец: количество элементов коллекции (внешних контуров) совпадает с общим числом контуров.
sql.png
Пример полного запроса:
test.qry
(251 байт) 12 скачиваний
не нашла функции ObjectInfo
Функция ObjectInfo в ГИС Аксиома отсутствует. Корректные функции для анализа геометрии начинаются с префикса ObjInfo… (например, ObjInfoType, ObjInfoNContours, ObjInfoNItems).
NumInteriorRing(obj)>1 не выбирает объекты
Функция NumInteriorRing(obj) предназначена для работы с геометрией в формате SpatiaLite. Для её применения к объектам Аксиомы требуется предварительное преобразование геометрии:

Code: Select all

NumInteriorRing(FromAxiGeo(obj)) > 0
Однако для поставленной задачи использование ObjInfo… предпочтительнее, так как не требует преобразования формата и работает напрямую с геометрией Аксиомы.
Аватара пользователя
LiSa
Пользователь
Сообщения: 102
Зарегистрирован: 20 сен 2023, 17:19

Re: Выбрать полигоны состоящие из двух и более внешних контуров без дырок

Сообщение LiSa » 28 янв 2026, 15:28

Спасибо!
Ответить