атрибуты QgsFeature в новой версии QGIS
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 25 сен 2013, 10:44
- Репутация: 0
атрибуты QgsFeature в новой версии QGIS
Всем привет, кто-нибудь может подсказать какие методы в новой версии используются вместо addAttribute() класса QgsFeature.
Никак не получается записать атрибуты. Можно конечно напрямую в базу SQL-запросом записать, но получается как-то через пятую точку.
Еще заметил, что после методов addFeature() и commitChanges(), метод id() объекта типа QgsFeature возвращает -2. Очень странно, вроде после записи id объекта должен был получить значение.
П.С. использую pyQGIS. До обновления все было так замечательно.
Никак не получается записать атрибуты. Можно конечно напрямую в базу SQL-запросом записать, но получается как-то через пятую точку.
Еще заметил, что после методов addFeature() и commitChanges(), метод id() объекта типа QgsFeature возвращает -2. Очень странно, вроде после записи id объекта должен был получить значение.
П.С. использую pyQGIS. До обновления все было так замечательно.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: атрибуты QgsFeature в новой версии QGIS
Редактор материалов, модератор форума
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 25 сен 2013, 10:44
- Репутация: 0
Re: атрибуты QgsFeature в новой версии QGIS
Доки я читал, пробовал метод setAttribute(), результат нулевой. Может необходимо выполнить предварительные действия вроде initAttributes(), которые тоже не дают результата.
Перефразирую вопрос: кто может подсказать последовательность действий для записи атрибутов при добавлении нового объекта класса QgsFeature. Сам объект замечательно добавляется причем с геометрией, но с пустыми атрибутами.
Перефразирую вопрос: кто может подсказать последовательность действий для записи атрибутов при добавлении нового объекта класса QgsFeature. Сам объект замечательно добавляется причем с геометрией, но с пустыми атрибутами.
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 25 сен 2013, 10:44
- Репутация: 0
Re: атрибуты QgsFeature в новой версии QGIS
Посмотрел дифф: во-первых сдается мне что он неактуальный, во-вторых, он все равно не сможет подсказать мне последовательность действий.
Время не ждет, будем делать костыли через SQL. Жаль только id добавленного объекта получить не удается, с ним можно было бы, после добавления объекта стандартными методами, записать запросом только атрибуты, а так придется добавлять объект посредством запроса.
Но правильное решение все равно узнать было бы неплохо.
Время не ждет, будем делать костыли через SQL. Жаль только id добавленного объекта получить не удается, с ним можно было бы, после добавления объекта стандартными методами, записать запросом только атрибуты, а так придется добавлять объект посредством запроса.
Но правильное решение все равно узнать было бы неплохо.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: атрибуты QgsFeature в новой версии QGIS
Рабочий пример добавления атрибутов в 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])
Редактор материалов, модератор форума
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 25 сен 2013, 10:44
- Репутация: 0
Re: атрибуты QgsFeature в новой версии QGIS
Спасибо, сейчас будем попробовать. Правда я думал, что в конструкторе "QgsFeature (const QgsFields &fields, QgsFeatureId id=QgsFeatureId())" параметр QgsFields как раз вместо addAttributes().
А addAttributes() добавляет виртуальные атрибуты? потому как физически в базе они есть. И что будет, если порядок не будет совпадать, и почему я должен добавлять атрибуты и в коде и в базе? Все очень странно.
А addAttributes() добавляет виртуальные атрибуты? потому как физически в базе они есть. И что будет, если порядок не будет совпадать, и почему я должен добавлять атрибуты и в коде и в базе? Все очень странно.
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 25 сен 2013, 10:44
- Репутация: 0
Re: атрибуты QgsFeature в новой версии QGIS
Ничего из статьи по ссылке не работает. Остановился на непосредственной записи в базу. Кстати база SQLite может в этом проблема, хотя в самой QGIS все замечательно добавляется. QGIS у меня 2.1.
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: атрибуты QgsFeature в новой версии QGIS
Если мне не изменяет память, то после добавления атрибутов нужно зафиксировать изменения, например по такой схеме:ry-sasha писал(а):Ничего из статьи по ссылке не работает.
Код: Выделить всё
layer_provider = layer.dataProvider() # получили провайдера
layer_provider.addAttributes(список атрибутов) # добавили нужные атрибуты
layer.startEditing() # фиксируем
layer.commitChanges() # изменения
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: атрибуты QgsFeature в новой версии QGIS
Сначала initAttributes()ry-sasha писал(а):Может необходимо выполнить предварительные действия вроде initAttributes(), которые тоже не дают результата
https://github.com/Biryuchkov/openLand/ ... on.py#L588
Потом setAttribute()
https://github.com/Biryuchkov/openLand/ ... on.py#L594
Работает.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей