axioma.core.dp.
HistorySnapshot
¶Образ изменений в таблице. Используется редактируемой таблицей EditableTable
Методы:
HistorySnapshot
(comparator)¶Конструктор класса
Параметры: comparator ( VariantComparator
) – функтор сравнения
clear
()¶удалить все изменения
idComparator
()¶
Результат: компаратор идентификаторов Тип результата: VariantComparator
inserted
()¶Список записей, которые были добавлены
Результат: список добавленных записей Тип результата: list
[Feature
]
insertedFeatureSequence
(range=PageRange())¶Получить итератор по записям, которые были добавлены
Параметры: range ( PageRange
) – диапазон записейРезультат: итератор по добавленным записям Тип результата: Cursor
newfoundIds
()¶Список обновленных записей
Результат: добавленные записи Тип результата: list
[QVariant
]
storeGoneFeature
(id)¶Поместить идентификатор записи для удаления
Параметры: id ( QVariant
) – идентификатор записи для удаления
Пример использования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | from axioma.core.dp import *
from axioma.cs import *
from axioma.core.geometry import *
from axioma.render import *
from axioma.mapinfo import *
from axioma.common import RuntimeException
from PyQt5.QtCore import *
from PyQt5.QtGui import *
'''
Пример вставки объекта в таблицу и сохранение информации об изменениях.
Здесь используется внешний файл транзакций.
'''
# Открываем таблицу
table = axioma.core.open_json({'src': '/tmp/world.tab'})
if table is None:
raise RuntimeException("Таблица не открыта")
assert(isinstance(table, EditableTable))
# Создаем файл транзакций
history_snapshot = HistorySnapshot(table.featureIdComparator())
# Делаем выборку из двух записей
features = table.selectToFeatureList(QuerySelectAll(table.tableSchema().attributeNames()), PageRange(0, 2))
# Определяем индексы изменяемых полей
index_geometry = table.tableSchema().geometryIndex()
index_style = table.tableSchema().styleIndex()
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
посредством метода open_json()