attributeMap()

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: attributeMap()

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

Видимо, там, где обработка объекта, отвечающего условию. Т.е. внутри if

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

Re: attributeMap()

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

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

 attrs = ft.attributeMap()
for (k,attr) in attrs.iteritems():
                    f.write("%d: %s" % (k,attr.toString())+" | ")
это я пишу после If.
ничего не записывает..видимо я делаю что-то не так?(

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

Re: attributeMap()

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

А вы вообще в if попадаете? Чему у вас равна testGeometry? В слое есть объекты с геометрией равной testGeometry?

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

Re: attributeMap()

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

Дело в том,что я программирую в PyScripter.
и напрямую его не запускаю,так как сразу вылетает море ошибок,решать которые уже нет сил.
а если выполнять через Qgis,ввиде модуля,то работает всё отлично

Поэтому пошагово программу мне и не запустить.
а самая первая ошибка вылетает "ImportError:No module named PyQt4.QtCore"
Хотя по идее он есть.

и да,наверное,testGeometry получается пустая.

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

Re: attributeMap()

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

Cathrin писал(а):и да,наверное,testGeometry получается пустая.
Вот и ответ на ваш вопрос. Если вы сравниваете с пустой геометрией, то естественно, ни один объект не удовлетворяет условию, и внутрь if'а вы не попадаете.

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

Re: attributeMap()

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

а почему она пустая?
как мне сделать что бы она не была пустой?

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

Re: attributeMap()

Сообщение Voltron » 07 июн 2012, 12:19

Cathrin писал(а):а почему она пустая?
Потому что, вероятно, вы ее не инициализировали
Cathrin писал(а):как мне сделать что бы она не была пустой?
Инициализировать ее. Допустим, вам надо сравнить объекты слоя с полигоном, тогда у вас будет что-то вроде

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

testGeometry = QgsGeometry.fromPolygon(<тут_описание_полигона>)

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

Re: attributeMap()

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

А что в описании писать?
С каким полигоном мне сравнивать?

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

Re: attributeMap()

Сообщение Voltron » 07 июн 2012, 13:26

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

А вообще это был пример. Я не знаю, может вам и не с полигоном надо сравнивать, может, вам вообще ничего сравнивать не надо.

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

Re: attributeMap()

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

а я не понимаю зачем сравнивать((
и если я не сравню ни с чем,то и работать не будет?
можно инициализировать её,ни с чем не сравнив?

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

Re: attributeMap()

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

вот я нашла как его можно примерно заполнить

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

testGeometry = QgsGeometry.fromPolygon( [ [ QgsPoint(1,1), QgsPoint(2,2), QgsPoint(2,1) ] ] )
но не поняла,точки мне оставить такими же?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: attributeMap()

Сообщение Denis Rykov » 08 июн 2012, 08:41

Сравнение вам предлагается в качестве способа выбора нужных объектов. Объект можно выбрать либо пространственным запросом (например, выбрать все объекты, находящиеся внутри заданного полигона), либо атрибутивным (например, выбрать все объекты, у которых значение поля "X" равно "Y"). В самом первом сообщении топика я читаю "нужно записать атрибуты выделенного объекта в файл", в этом случае "выделенность" своего рода аттрибутивный признак и из консоли QGIS получить список всех выделенных объектов можно с помощью метода векторного слоя selectedFeatures. Таким образом, записать в файл аттрибуты выделенных объектов, работая в консоли QGIS, можно следующим образом:

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

f=open('c:/personal/gislab/attr.txt', 'wt')
layer = qgis.utils.iface.activeLayer()
feats = layer.selectedFeatures()
for feat in feats:
    attrs = feat.attributeMap()
    for (k,attr) in attrs.iteritems():
        f.write("%d: %s\n" % (k, attr.toString()))
f.close()
Spatial is now, more than ever, just another column- The Geometry Column.

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

Re: attributeMap()

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

Всё работает!
Спасибо огромное!

ещё вопросик небольшой
выводом этих атрибутов можно управлять?
ну допустим если выводит лишние,или если нужно только 3,а выводит 4

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: attributeMap()

Сообщение Denis Rykov » 08 июн 2012, 08:59

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

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

for (k,attr) in attrs.iteritems():
    if k in [0,1,2]:    
        f.write("%d: %s\n" % (k, attr.toString()))
Spatial is now, more than ever, just another column- The Geometry Column.

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

Re: attributeMap()

Сообщение Cathrin » 08 июн 2012, 09:03

да,замечательно,ещё раз спасибо)
а ещё такой нюанс..
у меня есть атрибут "площадь"
и при выводе он к ней добавляет в конец цифру 2
тоесть если на самом деле площадь 181,он выводит 1812
и так со всеми объектами
странно так...
не знаете почему он может так выводить?

Ответить

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость