атрибуты QgsFeature в новой версии QGIS

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
ry-sasha
Новоприбывший
Сообщения: 5
Зарегистрирован: 25 сен 2013, 10:44
Репутация: 0

атрибуты QgsFeature в новой версии QGIS

Сообщение ry-sasha » 25 сен 2013, 11:06

Всем привет, кто-нибудь может подсказать какие методы в новой версии используются вместо addAttribute() класса QgsFeature.
Никак не получается записать атрибуты. Можно конечно напрямую в базу SQL-запросом записать, но получается как-то через пятую точку.
Еще заметил, что после методов addFeature() и commitChanges(), метод id() объекта типа QgsFeature возвращает -2. Очень странно, вроде после записи id объекта должен был получить значение.

П.С. использую pyQGIS. До обновления все было так замечательно.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: атрибуты QgsFeature в новой версии QGIS

Сообщение Александр Мурый » 25 сен 2013, 11:40

Есть в доках по API. А вот полный дифф между API версий 1.8 и 2.0, там должно найтись.
Редактор материалов, модератор форума

ry-sasha
Новоприбывший
Сообщения: 5
Зарегистрирован: 25 сен 2013, 10:44
Репутация: 0

Re: атрибуты QgsFeature в новой версии QGIS

Сообщение ry-sasha » 25 сен 2013, 11:47

Доки я читал, пробовал метод setAttribute(), результат нулевой. Может необходимо выполнить предварительные действия вроде initAttributes(), которые тоже не дают результата.
Перефразирую вопрос: кто может подсказать последовательность действий для записи атрибутов при добавлении нового объекта класса QgsFeature. Сам объект замечательно добавляется причем с геометрией, но с пустыми атрибутами.

ry-sasha
Новоприбывший
Сообщения: 5
Зарегистрирован: 25 сен 2013, 10:44
Репутация: 0

Re: атрибуты QgsFeature в новой версии QGIS

Сообщение ry-sasha » 25 сен 2013, 13:35

Посмотрел дифф: во-первых сдается мне что он неактуальный, во-вторых, он все равно не сможет подсказать мне последовательность действий.
Время не ждет, будем делать костыли через SQL. Жаль только id добавленного объекта получить не удается, с ним можно было бы, после добавления объекта стандартными методами, записать запросом только атрибуты, а так придется добавлять объект посредством запроса.
Но правильное решение все равно узнать было бы неплохо.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: атрибуты QgsFeature в новой версии QGIS

Сообщение Александр Мурый » 25 сен 2013, 13:43

Рабочий пример добавления атрибутов в PyQGIS 2.0 (правда, для memory-слоя) отсюда:

Код: Выделить всё

# create layer
vl = QgsVectorLayer("Point", "temporary_points", "memory")
pr = vl.dataProvider()

# add fields
pr.addAttributes( [ QgsField("name", QVariant.String),
                    QgsField("age",  QVariant.Int),
                    QgsField("size", QVariant.Double) ] )

# add a feature
fet = QgsFeature()
fet.setGeometry( QgsGeometry.fromPoint(QgsPoint(10,10)) )
fet.setAttributes(["Johny", 2, 0.3])
pr.addFeatures([fet])
Видимо, по этой же схеме можно добавлять атрибуты имеющимся (или создающимся) векторам.
Редактор материалов, модератор форума

ry-sasha
Новоприбывший
Сообщения: 5
Зарегистрирован: 25 сен 2013, 10:44
Репутация: 0

Re: атрибуты QgsFeature в новой версии QGIS

Сообщение ry-sasha » 25 сен 2013, 13:54

Спасибо, сейчас будем попробовать. Правда я думал, что в конструкторе "QgsFeature (const QgsFields &fields, QgsFeatureId id=QgsFeatureId())" параметр QgsFields как раз вместо addAttributes().
А addAttributes() добавляет виртуальные атрибуты? потому как физически в базе они есть. И что будет, если порядок не будет совпадать, и почему я должен добавлять атрибуты и в коде и в базе? Все очень странно.

ry-sasha
Новоприбывший
Сообщения: 5
Зарегистрирован: 25 сен 2013, 10:44
Репутация: 0

Re: атрибуты QgsFeature в новой версии QGIS

Сообщение ry-sasha » 26 сен 2013, 16:24

Ничего из статьи по ссылке не работает. Остановился на непосредственной записи в базу. Кстати база SQLite может в этом проблема, хотя в самой QGIS все замечательно добавляется. QGIS у меня 2.1.

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: атрибуты QgsFeature в новой версии QGIS

Сообщение KolesovDmitry » 03 дек 2013, 18:18

ry-sasha писал(а):Ничего из статьи по ссылке не работает.
Если мне не изменяет память, то после добавления атрибутов нужно зафиксировать изменения, например по такой схеме:

Код: Выделить всё

layer_provider = layer.dataProvider()                   # получили провайдера
layer_provider.addAttributes(список атрибутов)  # добавили нужные атрибуты
layer.startEditing()                                              # фиксируем
layer.commitChanges()                                       # изменения

Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Re: атрибуты QgsFeature в новой версии QGIS

Сообщение dab » 03 дек 2013, 20:37

ry-sasha писал(а):Может необходимо выполнить предварительные действия вроде initAttributes(), которые тоже не дают результата
Сначала initAttributes()
https://github.com/Biryuchkov/openLand/ ... on.py#L588
Потом setAttribute()
https://github.com/Biryuchkov/openLand/ ... on.py#L594

Работает.

Ответить

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

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

Сейчас этот форум просматривают: Semrush [Bot] и 1 гость