Как найти "сложные" объекты в таблице?

MapInfo, MapBasic
Ответить
grandred75
Интересующийся
Сообщения: 22
Зарегистрирован: 29 апр 2021, 10:38
Репутация: 1
Откуда: Москва

Как найти "сложные" объекты в таблице?

Сообщение grandred75 » 25 май 2023, 12:44

Добрый день.
Подскажите, пожалуйста, как найти "сложные" объекты в таблице. Такие, которые имеют одну запись (строку) в таблице, но состоят из нескольких линий, полигонов и т.п.? Причем, каждый найденный объект нужно разъединить и пронумеровать все элементы находящиеся в нем с 1-го до n (кол-во элементов).

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2206
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1493
Откуда: Казань

Re: Как найти "сложные" объекты в таблице?

Сообщение Игорь Белов » 29 май 2023, 09:30

В QGIS задача решается в два действия:
  1. [Multipart to singleparts] (Разбить составную геометрию)
  2. [Add autoincremental field] (Добавить поле с автоприращением);
    задействовать [Group values by] (Поле группирования)
В MapInfo задача тоже решается в два действия:
  1. Освоить MapBasic
  2. Написать утилиту
The purpose of computing is insight, not numbers

spawner
Участник
Сообщения: 60
Зарегистрирован: 09 окт 2009, 16:49
Репутация: 4

Re: Как найти "сложные" объекты в таблице?

Сообщение spawner » 01 июн 2023, 21:43

Objectinfo(obj, 1) вернёт тип обьекта
Какая цифра что означает - смотрите в документации mapbasic

Ещё можно вручную: присвоить какому нибудь полю идентификатор (например rowid), разъединить все объекты слоя

Объекты с одинаковыми идентификаторами будут бывшими членами коллекций. Ну их и нумеровать

grandred75
Интересующийся
Сообщения: 22
Зарегистрирован: 29 апр 2021, 10:38
Репутация: 1
Откуда: Москва

Re: Как найти "сложные" объекты в таблице?

Сообщение grandred75 » Сегодня, 12:39

spawner писал(а):
01 июн 2023, 21:43
Objectinfo(obj, 1) вернёт тип обьекта
Какая цифра что означает - смотрите в документации mapbasic
По этой логике должно подойти ObjectInfo(obj, 21) или Val(Str$(ObjectInfo(obj,21))) > 1 , но нет, не работает ...
Попробовал вариант с OBJ_INFO_NPOLYGONS+1 тоже не выходит ...

Sub Main
Dim count, n As Integer
Dim CurrentTable as string
For n = 1 to NumTables( )
count = count + 1
Select * from CurrentTable where ObjectInfo(obj, 21)
'Select * from CurrentTable where Val(Str$(ObjectInfo(obj,21))) > 1
'Select * from CurrentTable where ObjectInfo(CurrentTable.obj, OBJ_INFO_NPOLYGONS+1)
Next
End Sub

Что-то тут не так чувствую, а что в толк не возьму

Ответить

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

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

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