axioma.core.dp.
HistorySnapshot
¶Образ изменений в таблице. Используется редактируемой таблицей EditableTable
Методы:
HistorySnapshot
(comparator)¶Конструктор класса
Параметры: comparator ( VariantComparator
) – функтор сравнения
insertedFeatureSequence
(range=PageRange())¶Получить итератор по записям, которые были добавлены
Параметры: range ( PageRange
) – диапазон страницРезультат: итератор по добавленным записям Тип результата: Cursor
inserted
()¶Список записей, которые были добавлены
Результат: список добавленных записей Тип результата: list
[Feature
]
newfoundIds
()¶Список обновленных записей
Результат: добавленные записи Тип результата: list
[QVariant
]
storeNewfoundFeature
(feature)¶Поместить в таблицу запись для добавления
Параметры: feature ( Feature
) – запись для добавления
storeUpdatedFeature
(feature)¶Поместить в таблицу запись для обновления
Параметры: feature ( Feature
) – запись для обновления
storeGoneFeature
(id)¶Поместить идентификатор записи для удаления
Параметры: id ( QVariant
) – идентификатор записи для удаления
clear
()¶удалить все изменения
idComparator
()¶
Результат: компаратор идентификаторов Тип результата: VariantComparator
Пример использования:
from axioma.core.dp import * from axioma.cs import * from axioma.core.geometry import * from axioma.render import * from axioma.mapinfo import * from PyQt5.QtCore import * # Открываем таблицу table = open_file('world.tab') assert(isinstance(table, EditableTable)) # Создаем файл транзакций history_snapshot = HistorySnapshot(table.featureIdComparator()) # Делаем выборку из двух записей features = table.selectToFeatureList(QuerySelectAll(table.tableSchema().attributeNames()), PageRange(0, 2)) # Определяем индексы изменяемых полей index_geometry = table.tableSchema().indexOf('object') index_style = table.tableSchema().indexOf('tr$$_rendition') index_country = table.tableSchema().indexOf('Country') # Список атрибутов можно получить # print (table.tableSchema().attributeNames()) # Вставка new_feature = Feature.createFeature(table.tableSchema()) # Устанавливаем геометрию по индексу поля poly = QPolygonF(); v = 1000000 poly << QPointF(-v, -v) << QPointF(-v, v) << QPointF(v, v) << QPointF(v, -v) << QPointF(-v, -v) polygon = Polygon(table.coordSystem(), poly) new_feature.setAttribute(index_geometry, polygon) new_feature.setModified(index_geometry, True) # Устанавливаем стиль style = MapBasicStyle().styleFromString('Pen (1,2,0) Brush (2, 65280, 16777215)') new_feature.setAttribute(index_style, style) new_feature.setModified(index_style, True) # Строковае поле по его имени new_feature.setAttribute('Country', 'New Country') new_feature.setModified('Country', True) # Сохраняем в файле транзакций history_snapshot.storeNewfoundFeature(new_feature) # Обновление # Берем первую запись и обновляем для нее стиль оформления if len(features) >= 1: feature = features[0] style_red = MapBasicStyle().styleFromString('Pen (1,2,0) Brush (2, 16711680, 16777215)') feature.setAttribute(index_style, style_red) feature.setModified(index_style, True) # Сохраняем в файле транзакций history_snapshot.storeUpdatedFeature(feature) # Удаление # Помечаем на удаление вторую выбранную запись if len(features) >= 2: history_snapshot.storeGoneFeature(features[1].id()) # Сохраняем изменения из файла транзакций в таблице table.save(history_snapshot)
Примечание
Для редактирования открытой таблицы лучшим решением будет создать для нее обертку TransactionalTable
посредством метода wrap