Как найти "сложные" объекты в таблице?
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 29 апр 2021, 10:38
- Репутация: 1
- Откуда: Москва
Как найти "сложные" объекты в таблице?
Добрый день.
Подскажите, пожалуйста, как найти "сложные" объекты в таблице. Такие, которые имеют одну запись (строку) в таблице, но состоят из нескольких линий, полигонов и т.п.? Причем, каждый найденный объект нужно разъединить и пронумеровать все элементы находящиеся в нем с 1-го до n (кол-во элементов).
Подскажите, пожалуйста, как найти "сложные" объекты в таблице. Такие, которые имеют одну запись (строку) в таблице, но состоят из нескольких линий, полигонов и т.п.? Причем, каждый найденный объект нужно разъединить и пронумеровать все элементы находящиеся в нем с 1-го до n (кол-во элементов).
- Игорь Белов
- Гуру
- Сообщения: 2232
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1506
- Откуда: Казань
Re: Как найти "сложные" объекты в таблице?
В QGIS задача решается в два действия:
- [Multipart to singleparts] (Разбить составную геометрию)
- [Add autoincremental field] (Добавить поле с автоприращением);
задействовать [Group values by] (Поле группирования)
- Освоить MapBasic
- Написать утилиту
The purpose of computing is insight, not numbers
-
- Активный участник
- Сообщения: 107
- Зарегистрирован: 09 окт 2009, 16:49
- Репутация: 10
Re: Как найти "сложные" объекты в таблице?
Objectinfo(obj, 1) вернёт тип обьекта
Какая цифра что означает - смотрите в документации mapbasic
Ещё можно вручную: присвоить какому нибудь полю идентификатор (например rowid), разъединить все объекты слоя
Объекты с одинаковыми идентификаторами будут бывшими членами коллекций. Ну их и нумеровать
Какая цифра что означает - смотрите в документации mapbasic
Ещё можно вручную: присвоить какому нибудь полю идентификатор (например rowid), разъединить все объекты слоя
Объекты с одинаковыми идентификаторами будут бывшими членами коллекций. Ну их и нумеровать
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 29 апр 2021, 10:38
- Репутация: 1
- Откуда: Москва
Re: Как найти "сложные" объекты в таблице?
По этой логике должно подойти 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
Что-то тут не так чувствую, а что в толк не возьму
-
- Активный участник
- Сообщения: 107
- Зарегистрирован: 09 окт 2009, 16:49
- Репутация: 10
Re: Как найти "сложные" объекты в таблице?
grandred75,
OBJ_INFO_NPOLYGONS+N это кол-то точек в контуре N многоконтурного полигона
Надо именно Objectinfo(obj, 1):
OBJ_INFO_TYPE values ID Corresponding object type
OBJ_TYPE_ARC 1 Arc object
OBJ_TYPE_ELLIPSE 2 Ellipse / circle objects
OBJ_TYPE_LINE 3 Line object
OBJ_TYPE_PLINE 4 Polyline object
OBJ_TYPE_POINT 5 Point object
OBJ_TYPE_FRAME 6 Layout window Frame object
OBJ_TYPE_REGION 7 Region object
OBJ_TYPE_RECT 8 Rectangle object
OBJ_TYPE_ROUNDRECT 9 Rounded rectangle object
OBJ_TYPE_TEXT 10 Text object
OBJ_TYPE_MULTIPOINT 11 Collection point object
OBJ_TYPE_COLLECTION 12 Collection object
Удобнее всего добавить временное поле, и туда записать (обновить колонку) ObjectInfo(obj,1). Все коллекции будут иметь номера 11 (мульти-точки) и 12 (все остальные)
OBJ_INFO_NPOLYGONS+N это кол-то точек в контуре N многоконтурного полигона
Надо именно Objectinfo(obj, 1):
OBJ_INFO_TYPE values ID Corresponding object type
OBJ_TYPE_ARC 1 Arc object
OBJ_TYPE_ELLIPSE 2 Ellipse / circle objects
OBJ_TYPE_LINE 3 Line object
OBJ_TYPE_PLINE 4 Polyline object
OBJ_TYPE_POINT 5 Point object
OBJ_TYPE_FRAME 6 Layout window Frame object
OBJ_TYPE_REGION 7 Region object
OBJ_TYPE_RECT 8 Rectangle object
OBJ_TYPE_ROUNDRECT 9 Rounded rectangle object
OBJ_TYPE_TEXT 10 Text object
OBJ_TYPE_MULTIPOINT 11 Collection point object
OBJ_TYPE_COLLECTION 12 Collection object
Удобнее всего добавить временное поле, и туда записать (обновить колонку) ObjectInfo(obj,1). Все коллекции будут иметь номера 11 (мульти-точки) и 12 (все остальные)
- Вложения
-
- 2023-06-05_23-13-54.png (7.59 КБ) 3019 просмотров
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 29 апр 2021, 10:38
- Репутация: 1
- Откуда: Москва
Re: Как найти "сложные" объекты в таблице?
Я благодарен Вам за советы, но в моем случае это не подходит. Возможно, я не правильно сформулировал задачу. Нужно выделить именно линии, а точнее мультилинии, которые пришли из автокада в виде 2-х, 3-х и т.д. объединенных линий.
Такая формула ...:
SELECT * FROM МОЯ_ТАБЛИЦА WHERE int(objectinfo(obj,1))=12
note objectinfo(selection.obj,1)
... годится только для коллекций, которые состоят из полилиний, полигонов и точек или полилиний и полигонов или точек и полигонов и т.д. Но для "коллекций", состоящих только из полилиний такя формула не годится ...
Нужно выделить именно мультилинии (несколько объединенных полилиний) - вот какая задачка.
- Вложения
-
- Моя таблица.png (36.03 КБ) 2915 просмотров
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Как найти "сложные" объекты в таблице?
пример в виде MIF/MID выложите того, что нужно. Гадать по картинкам это такое
-
- Активный участник
- Сообщения: 107
- Зарегистрирован: 09 окт 2009, 16:49
- Репутация: 10
Re: Как найти "сложные" объекты в таблице?
В Mapinfo это не коллекции, это просто полилинии из нескольких не связных кусков. Выделять так (запускаете команду в окне mapbasic):grandred75 писал(а): ↑09 июн 2023, 14:41Нужно выделить именно линии, а точнее мультилинии, которые пришли из автокада в виде 2-х, 3-х и т.д. объединенных линий
Select * From МОЯ_ТАБЛИЦА where Int(ObjectInfo(obj,1))=4 into tmp noselect
Select * from tmp where Int(ObjectInfo(obj,21))>1
первая строка делает временную таблицу со всеми полилиниями
вторая строка из этой таблицы выбирает все полилинии у которых кол-во кусков больше 1
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 29 апр 2021, 10:38
- Репутация: 1
- Откуда: Москва
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей