attributeMap()
- 
				Voltron
 - Гуру
 - Сообщения: 2627
 - Зарегистрирован: 29 мар 2007, 14:12
 - Репутация: 34
 - Откуда: Ukraine
 
Re: attributeMap()
Видимо, там, где обработка объекта, отвечающего условию. Т.е. внутри if
			
			
									
						
										
						- 
				Cathrin
 - Участник
 - Сообщения: 67
 - Зарегистрирован: 16 май 2012, 10:38
 - Репутация: 0
 
Re: attributeMap()
Код: Выделить всё
 attrs = ft.attributeMap()
for (k,attr) in attrs.iteritems():
                    f.write("%d: %s" % (k,attr.toString())+" | ")
ничего не записывает..видимо я делаю что-то не так?(
- 
				Voltron
 - Гуру
 - Сообщения: 2627
 - Зарегистрирован: 29 мар 2007, 14:12
 - Репутация: 34
 - Откуда: Ukraine
 
Re: attributeMap()
А вы вообще в if попадаете? Чему у вас равна testGeometry? В слое есть объекты с геометрией равной testGeometry?
			
			
									
						
										
						- 
				Cathrin
 - Участник
 - Сообщения: 67
 - Зарегистрирован: 16 май 2012, 10:38
 - Репутация: 0
 
Re: attributeMap()
Дело в том,что я программирую в PyScripter.
и напрямую его не запускаю,так как сразу вылетает море ошибок,решать которые уже нет сил.
а если выполнять через Qgis,ввиде модуля,то работает всё отлично
Поэтому пошагово программу мне и не запустить.
а самая первая ошибка вылетает "ImportError:No module named PyQt4.QtCore"
Хотя по идее он есть.
и да,наверное,testGeometry получается пустая.
			
			
									
						
										
						и напрямую его не запускаю,так как сразу вылетает море ошибок,решать которые уже нет сил.
а если выполнять через Qgis,ввиде модуля,то работает всё отлично
Поэтому пошагово программу мне и не запустить.
а самая первая ошибка вылетает "ImportError:No module named PyQt4.QtCore"
Хотя по идее он есть.
и да,наверное,testGeometry получается пустая.
- 
				Voltron
 - Гуру
 - Сообщения: 2627
 - Зарегистрирован: 29 мар 2007, 14:12
 - Репутация: 34
 - Откуда: Ukraine
 
Re: attributeMap()
Вот и ответ на ваш вопрос. Если вы сравниваете с пустой геометрией, то естественно, ни один объект не удовлетворяет условию, и внутрь if'а вы не попадаете.Cathrin писал(а):и да,наверное,testGeometry получается пустая.
- 
				Cathrin
 - Участник
 - Сообщения: 67
 - Зарегистрирован: 16 май 2012, 10:38
 - Репутация: 0
 
Re: attributeMap()
а почему она пустая?
как мне сделать что бы она не была пустой?
			
			
									
						
										
						как мне сделать что бы она не была пустой?
- 
				Voltron
 - Гуру
 - Сообщения: 2627
 - Зарегистрирован: 29 мар 2007, 14:12
 - Репутация: 34
 - Откуда: Ukraine
 
Re: attributeMap()
Потому что, вероятно, вы ее не инициализировалиCathrin писал(а):а почему она пустая?
Инициализировать ее. Допустим, вам надо сравнить объекты слоя с полигоном, тогда у вас будет что-то вродеCathrin писал(а):как мне сделать что бы она не была пустой?
Код: Выделить всё
testGeometry = QgsGeometry.fromPolygon(<тут_описание_полигона>)- 
				Cathrin
 - Участник
 - Сообщения: 67
 - Зарегистрирован: 16 май 2012, 10:38
 - Репутация: 0
 
Re: attributeMap()
А что в описании писать?
С каким полигоном мне сравнивать?
			
			
									
						
										
						С каким полигоном мне сравнивать?
- 
				Voltron
 - Гуру
 - Сообщения: 2627
 - Зарегистрирован: 29 мар 2007, 14:12
 - Репутация: 34
 - Откуда: Ukraine
 
Re: attributeMap()
В описании у вас должен быть список, состоящий из объектов QgsPolyline (см. описание QgsPolygon)Cathrin писал(а):А что в описании писать? С каким полигоном мне сравнивать?
А вообще это был пример. Я не знаю, может вам и не с полигоном надо сравнивать, может, вам вообще ничего сравнивать не надо.
- 
				Cathrin
 - Участник
 - Сообщения: 67
 - Зарегистрирован: 16 май 2012, 10:38
 - Репутация: 0
 
Re: attributeMap()
а я не понимаю зачем сравнивать((
и если я не сравню ни с чем,то и работать не будет?
можно инициализировать её,ни с чем не сравнив?
			
			
									
						
										
						и если я не сравню ни с чем,то и работать не будет?
можно инициализировать её,ни с чем не сравнив?
- 
				Cathrin
 - Участник
 - Сообщения: 67
 - Зарегистрирован: 16 май 2012, 10:38
 - Репутация: 0
 
Re: attributeMap()
вот я нашла как его можно примерно заполнить
но не поняла,точки мне оставить такими же?
			
			
									
						
										
						Код: Выделить всё
testGeometry = QgsGeometry.fromPolygon( [ [ QgsPoint(1,1), QgsPoint(2,2), QgsPoint(2,1) ] ] )- Denis Rykov
 - Гуру
 - Сообщения: 3376
 - Зарегистрирован: 11 апр 2008, 21:09
 - Репутация: 529
 - Ваше звание: Author
 - Контактная информация:
 
Re: attributeMap()
Сравнение вам предлагается в качестве способа выбора нужных объектов. Объект можно выбрать либо пространственным запросом (например, выбрать все объекты, находящиеся внутри заданного полигона), либо атрибутивным (например, выбрать все объекты, у которых значение поля "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()
Всё работает!
Спасибо огромное!
ещё вопросик небольшой
выводом этих атрибутов можно управлять?
ну допустим если выводит лишние,или если нужно только 3,а выводит 4
			
			
									
						
										
						Спасибо огромное!
ещё вопросик небольшой
выводом этих атрибутов можно управлять?
ну допустим если выводит лишние,или если нужно только 3,а выводит 4
- Denis Rykov
 - Гуру
 - Сообщения: 3376
 - Зарегистрирован: 11 апр 2008, 21:09
 - Репутация: 529
 - Ваше звание: Author
 - Контактная информация:
 
Re: attributeMap()
Конечно можно, просто добавьте условие проверки индекса атрибутивного поля:
			
			
									
						
							Код: Выделить всё
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()
да,замечательно,ещё раз спасибо)
а ещё такой нюанс..
у меня есть атрибут "площадь"
и при выводе он к ней добавляет в конец цифру 2
тоесть если на самом деле площадь 181,он выводит 1812
и так со всеми объектами
странно так...
не знаете почему он может так выводить?
			
			
									
						
										
						а ещё такой нюанс..
у меня есть атрибут "площадь"
и при выводе он к ней добавляет в конец цифру 2
тоесть если на самом деле площадь 181,он выводит 1812
и так со всеми объектами
странно так...
не знаете почему он может так выводить?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей