attributeMap()

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Cathrin
Участник
Сообщения: 67
Зарегистрирован: 16 май 2012, 10:38
Репутация: 0

attributeMap()

Сообщение Cathrin » 06 июн 2012, 09:47

Подскажите,пожалуйста.
я работаю с методом attributeMap().
нужно записать атрибуты выделенного объекта в файл,но у меня возникает куча ошибок либо ничего вообще не происходит :

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

f=open('/temp/op.txt', 'w')
feat = QgsFeature()
 attrs = feat.attributeMap()
for (attr) in attrs.iteritems():
            f.write(attr)
 f.close()
что я делаю не так?

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: attributeMap()

Сообщение Максим Дубинин » 06 июн 2012, 10:15

вы упорно не хотите указывать ПО, ни в названии темы, ни в тексте.

по вопросу, смотрите код модуля DumpLoadField, он делает ровно тоже самое
пристегивайтесь, турбулентность прямо по курсу

Cathrin
Участник
Сообщения: 67
Зарегистрирован: 16 май 2012, 10:38
Репутация: 0

Re: attributeMap()

Сообщение Cathrin » 06 июн 2012, 10:30

windows 7,prof
qgis v.1.8.0
это что-то меняет?

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

Re: attributeMap()

Сообщение Александр Мурый » 06 июн 2012, 11:08

Cathrin писал(а):windows 7,prof
qgis v.1.8.0
это что-то меняет?
Это элементарная культура + как известно, в разных ОС и разных версиях ПО свои особенности.
Редактор материалов, модератор форума

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: attributeMap()

Сообщение Voltron » 06 июн 2012, 11:12

Cathrin писал(а):что я делаю не так?
Не читаете документацию на Python и не приводите текст сообщения об ошибке. Читать docs.python.org, особенно разделы 5.5 и 5.8 tutorial'a

Cathrin
Участник
Сообщения: 67
Зарегистрирован: 16 май 2012, 10:38
Репутация: 0

Re: attributeMap()

Сообщение Cathrin » 06 июн 2012, 11:15

модуль DumpLoadField выводит только один атрибут,а остальные нет.
у меня вообще задача выводить атрибуты выделенного объекта куда-нибудь наподобии в текст-бокс,просто для начала в файл записываю

нет модуля,похожего на эти действия?

Cathrin
Участник
Сообщения: 67
Зарегистрирован: 16 май 2012, 10:38
Репутация: 0

Re: attributeMap()

Сообщение Cathrin » 06 июн 2012, 11:16

а на данный код,который я выложила,ошибки не вылетает.просто ничего не происходит

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: attributeMap()

Сообщение Voltron » 06 июн 2012, 11:27

Cathrin писал(а):а на данный код,который я выложила,ошибки не вылетает.просто ничего не происходит
Естественно. Он же не рабочий, код ваш.

Делать все путем копирования существующего, не разбираясь в том, что и почему на самом деле происходит — путь в никуда. Рискну еще раз предложить ознакомиться с разделом 5 Python Tutorial, и разделом 5.8 описания стандартной библиотеки.

Cathrin
Участник
Сообщения: 67
Зарегистрирован: 16 май 2012, 10:38
Репутация: 0

Re: attributeMap()

Сообщение Cathrin » 06 июн 2012, 11:45

Voltron писал(а):Делать все путем копирования существующего, не разбираясь в том, что и почему на самом деле происходит
я как раз и пытаюсь разобраться,а не тупо откуда-то копирую.
Voltron писал(а):ознакомиться с разделом 5 Python Tutorial
я ознакомилась уже давно.Делу это не помогло.я до сих пор не могу разобраться с attributeMap()

просто если вы не знаете в чем тут конкретно может быть дело,и как правильно ,так бы и писали

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: attributeMap()

Сообщение Voltron » 06 июн 2012, 14:28

Cathrin писал(а):просто если вы не знаете в чем тут конкретно может быть дело,и как правильно ,так бы и писали
Видите ли... я как раз знаю.

Вы создали новый объект QgsFeature. Т.е. совсем новый: у него ничего нет, НИ-ЧЕ-ГО. Затем вы запрашиваете атрибуты этого объекта. Естественно, получаете пустой словарь и в файл записывать нечего.

Cathrin
Участник
Сообщения: 67
Зарегистрирован: 16 май 2012, 10:38
Репутация: 0

Re: attributeMap()

Сообщение Cathrin » 07 июн 2012, 08:26

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

f=open('/temp/op.txt', 'w')
feat = QgsFeature()
while provider.nextFeature(feat):
    attrs = feat.attributeMap()
for (k,attr) in attrs.iteritems():
    f.write("%d: %s" % (k,attr.toString())+" | ")
 f.close()
Вот таким образом идет запись,записывает атрибуты вообще всех объектов
Если он новый и у него ничего нет,почему тогда идет запись?
и кстати,вы случайно не знаете,как сделать чтобы он брал атрибуты именно выделенного объекта?
я убираю вайл ,но не фурычит....

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: attributeMap()

Сообщение Voltron » 07 июн 2012, 09:50

Cathrin писал(а):Вот таким образом идет запись,записывает атрибуты вообще всех объектов
Если он новый и у него ничего нет,почему тогда идет запись?
Встречный вопрос. А вы не видите различий между первым и вторым вариантом кода? Во втором варианте у вас идет обращение к объектам слоя, а в первом, вы обращаетесь к «пустому» объекту

Давайте я вам на пальцах попробую объяснить. Представьте, что у вас есть пустая коробочка. Это ваш объект QgsFeature. Что вы сейчас можете из этой коробочки достать? Правильно, ничего. Это то, что вы делаете в первом варианте кода. Но если сначала в коробочку положить что-то, например, конфету, то следующая попытка достать что-либо из коробочки будет успешной. Это второй вариант вашего кода.

Не обижайтесь, но мне кажется, у вас хромает теория. Не по PyQGIS (хотя и по ней тоже), а вообще по основам программирования.
Cathrin писал(а):и кстати,вы случайно не знаете,как сделать чтобы он брал атрибуты именно выделенного объекта?
Разумеется знаю. И вовсе не случайно :-). Нужно сначала получить выделенный объект, а потом вызвать метод attributeMap() у него. Как вы будете получать этот объект зависит от условий. Можно обратиться сразу по ID, можно найти перебором, можно запросом (пространственным или по атрибутам).
Cathrin писал(а):я убираю вайл ,но не фурычит....
Не распарсил.

Cathrin
Участник
Сообщения: 67
Зарегистрирован: 16 май 2012, 10:38
Репутация: 0

Re: attributeMap()

Сообщение Cathrin » 07 июн 2012, 10:11

Voltron писал(а):А вы не видите различий между первым и вторым вариантом кода?
вижу..просто я его реконструировала.
Спасибо за объяснение
Voltron писал(а):Можно обратиться сразу по ID
у меня у объектов этого слоя одинаковый ID,поэтому не подойдет наверное этот способ
Voltron писал(а):можно запросом
а как это сделать запросом?
каким-то образом использовать это : layer = self.iface.activeLayer() ?

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: attributeMap()

Сообщение Voltron » 07 июн 2012, 11:00

Cathrin писал(а):а как это сделать запросом?
Пространственным? Определить, какая операция лучше всего подходит: «intersects», «contains», «equals» или другая. Запустить цикл по объектам слоя и в цикле проверять геометрию каждого объекта

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

layer = self.iface.activeLayer()
ft = QgsFeature()
while layer.nextFeature(ft):
  geom = QgsGeometry(ft.geometry())
  if geom.equals(testGeometry):
    # этот объект отвечает условию, обрабатываем его

Cathrin
Участник
Сообщения: 67
Зарегистрирован: 16 май 2012, 10:38
Репутация: 0

Re: attributeMap()

Сообщение Cathrin » 07 июн 2012, 11:03

Спасибо большое!!!
а attributeMap() где применять?

Ответить

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

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

Сейчас этот форум просматривают: Bing [Bot] и 3 гостя