本文整理汇总了Python中qgis.core.QgsFeature.attribute方法的典型用法代码示例。如果您正苦于以下问题:Python QgsFeature.attribute方法的具体用法?Python QgsFeature.attribute怎么用?Python QgsFeature.attribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsFeature
的用法示例。
在下文中一共展示了QgsFeature.attribute方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: geomModified
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import attribute [as 别名]
def geomModified(layer, featureId):
f = QgsFeature()
if layer.getFeatures(QgsFeatureRequest().setFilterFid(featureId)).nextFeature(f) is False:
return
if f.attribute("update_geometry_alt1") in ('t','f') and f.attribute("update_geometry_alt2") in ('t','f'):
print "qwat: already asked if alternative geometries should be updated"
return
_geometry_alt1_used = f.attribute("_geometry_alt1_used") == 't'
_geometry_alt2_used = f.attribute("_geometry_alt2_used") == 't'
if _geometry_alt1_used and f.attribute("update_geometry_alt1").isNull() or _geometry_alt2_used and f.attribute("update_geometry_alt2").isNull():
dlg = PipeGeomAltDialog()
if f.attribute("update_geometry_alt1").isNull():
dlg.updateAlt1.setChecked( False if _geometry_alt1_used else True )
else:
dlg.updateAlt1.setChecked( True if f.attribute("update_geometry_alt1") == 't' else False )
if f.attribute("update_geometry_alt2").isNull():
dlg.updateAlt2.setChecked( False if _geometry_alt2_used else True )
else:
dlg.updateAlt2.setChecked( True if f.attribute("update_geometry_alt2") == 't' else False )
while not dlg.exec_():
continue
editBuffer = layer.editBuffer()
editBuffer.changeAttributeValue( featureId, layer.fieldNameIndex("update_geometry_alt1"), "t" if dlg.updateAlt1.isChecked() else "f" )
editBuffer.changeAttributeValue( featureId, layer.fieldNameIndex("update_geometry_alt2"), "t" if dlg.updateAlt2.isChecked() else "f" )
示例2: load_from_layer
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import attribute [as 别名]
def load_from_layer(self, layer):
# return False on failure
pr = layer.dataProvider()
fields = pr.fields()
if fields.size() < 1:
return False
field = None
for i, f in enumerate(fields):
if f.name() == "params":
field = i
if field is None:
return False
it = pr.getFeatures()
fet = QgsFeature()
it.nextFeature(fet)
st = fet.attribute(field)
self.unserialize(base64.b64decode(st))
if self.geometry is None:
self.geometry = QgsGeometry(fet.geometry())
self.orig_geometry = [QgsGeometry(fet.geometry())]
return True
示例3: testGdbFilter
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import attribute [as 别名]
def testGdbFilter(self):
""" Test opening a GDB database layer with filter"""
gdb_path = os.path.join(unitTestDataPath(), 'test_gdb.gdb')
l = QgsVectorLayer(gdb_path + '|layerid=1|subset="text" = \'shape 2\'', 'test', 'ogr')
self.assertTrue(l.isValid())
it = l.getFeatures()
f = QgsFeature()
while it.nextFeature(f):
self.assertTrue(f.attribute("text") == "shape 2")
示例4: numericFields
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import attribute [as 别名]
def numericFields(self, layer):
# get attributes of a sample feature and create numeric field name list
numeric_fields = []
f = QgsFeature()
layer.getFeatures().nextFeature(f)
for field in f.fields():
isNumeric = False
try:
float(f.attribute(field.name()))
isNumeric = True
except ValueError:
pass
if isNumeric:
numeric_fields.append(field.name())
return numeric_fields
示例5: getPoiText
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import attribute [as 别名]
def getPoiText(self):
# Return grid references of POIs
poiLayer = None
for layer in self.iface.mapCanvas().layers():
if layer.name() == self.ui.poiLayerComboBox.currentText():
poiLayer = layer
break
if poiLayer == None:
return 'Failed to find POI layer %s' % self.ui.poiLayerComboBox.currentText()
poiString = 'Grid References\n\n'
f = QgsFeature()
fit = poiLayer.getFeatures()
while fit.nextFeature(f):
gridRef = xy_to_osgb(f.geometry().centroid().asPoint()[0], f.geometry().centroid().asPoint()[1], 10)
coordText = '%s\t%s\n' % (f.attribute(self.ui.poiFieldComboBox.currentText()), gridRef)
poiString += coordText
return poiString
示例6: testDuplicateFeature
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import attribute [as 别名]
def testDuplicateFeature(self):
""" test duplicating a feature """
project = QgsProject().instance()
# LAYERS
# - add first layer (parent)
layer1 = QgsVectorLayer("Point?field=fldtxt:string&field=pkid:integer",
"parentlayer", "memory")
# > check first layer (parent)
self.assertTrue(layer1.isValid())
# - set the value for the copy
layer1.setDefaultValueDefinition(1, QgsDefaultValue("rand(1000,2000)"))
# > check first layer (parent)
self.assertTrue(layer1.isValid())
# - add second layer (child)
layer2 = QgsVectorLayer("Point?field=fldtxt:string&field=id:integer&field=foreign_key:integer",
"childlayer", "memory")
# > check second layer (child)
self.assertTrue(layer2.isValid())
# - add layers
project.addMapLayers([layer1, layer2])
# FEATURES
# - add 2 features on layer1 (parent)
l1f1orig = QgsFeature()
l1f1orig.setFields(layer1.fields())
l1f1orig.setAttributes(["F_l1f1", 100])
l1f2orig = QgsFeature()
l1f2orig.setFields(layer1.fields())
l1f2orig.setAttributes(["F_l1f2", 101])
# > check by adding features
self.assertTrue(layer1.dataProvider().addFeatures([l1f1orig, l1f2orig]))
# add 4 features on layer2 (child)
l2f1orig = QgsFeature()
l2f1orig.setFields(layer2.fields())
l2f1orig.setAttributes(["F_l2f1", 201, 100])
l2f2orig = QgsFeature()
l2f2orig.setFields(layer2.fields())
l2f2orig.setAttributes(["F_l2f2", 202, 100])
l2f3orig = QgsFeature()
l2f3orig.setFields(layer2.fields())
l2f3orig.setAttributes(["F_l2f3", 203, 100])
l2f4orig = QgsFeature()
l2f4orig.setFields(layer2.fields())
l2f4orig.setAttributes(["F_l2f4", 204, 101])
# > check by adding features
self.assertTrue(layer2.dataProvider().addFeatures([l2f1orig, l2f2orig, l2f3orig, l2f4orig]))
# RELATION
# - create the relationmanager
relMgr = project.relationManager()
# - create the relation
rel = QgsRelation()
rel.setId('rel1')
rel.setName('childrel')
rel.setReferencingLayer(layer2.id())
rel.setReferencedLayer(layer1.id())
rel.addFieldPair('foreign_key', 'pkid')
rel.setStrength(QgsRelation.Composition)
# > check relation
self.assertTrue(rel.isValid())
# - add relation
relMgr.addRelation(rel)
# > check if referencedLayer is layer1
self.assertEqual(rel.referencedLayer(), layer1)
# > check if referencingLayer is layer2
self.assertEqual(rel.referencingLayer(), layer2)
# > check if the layers are correct in relation when loading from relationManager
relations = project.relationManager().relations()
relation = relations[list(relations.keys())[0]]
# > check if referencedLayer is layer1
self.assertEqual(relation.referencedLayer(), layer1)
# > check if referencingLayer is layer2
self.assertEqual(relation.referencingLayer(), layer2)
# > check the relatedfeatures
'''
# testoutput 1
print( "\nAll Features and relations")
featit=layer1.getFeatures()
f=QgsFeature()
while featit.nextFeature(f):
print( f.attributes())
childFeature = QgsFeature()
relfeatit=rel.getRelatedFeatures(f)
while relfeatit.nextFeature(childFeature):
print( childFeature.attributes() )
print( "\n--------------------------")
print( "\nFeatures on layer1")
for f in layer1.getFeatures():
print( f.attributes() )
print( "\nFeatures on layer2")
for f in layer2.getFeatures():
print( f.attributes() )
'''
# DUPLICATION
#.........这里部分代码省略.........
示例7: run
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import attribute [as 别名]
def run(self):
self.mutex.lock()
self.stopMe = 0
self.mutex.unlock()
interrupted = False
polyProvider = self.layerPoly.dataProvider()
pointProvider = self.layerPoints.dataProvider()
fieldList = ftools_utils.getFieldList(self.layerPoly)
index = polyProvider.fieldNameIndex(unicode(self.fieldName))
if index == -1:
index = polyProvider.fields().count()
fieldList.append( QgsField(unicode(self.fieldName), QVariant.Int, "int", 10, 0, self.tr("point count field")) )
# Add the selected vector fields to the output polygon vector layer
selectedItems = self.attributeList.selectedItems()
for item in selectedItems:
global typeDouble
columnName = unicode(item.text() + "_" + self.statistics)
index = polyProvider.fieldNameIndex(unicode(columnName))
if index == -1:
if item.type() == typeDouble or self.statistics == "mean" or self.statistics == "stddev":
fieldList.append( QgsField(columnName, QVariant.Double, "double", 24, 15, "Value") )
else:
fieldList.append( QgsField(columnName, QVariant.Int, "int", 10, 0, "Value") )
sRs = polyProvider.crs()
if QFile(self.outPath).exists():
if not QgsVectorFileWriter.deleteShapeFile(self.outPath):
return
writer = QgsVectorFileWriter(self.outPath, self.encoding, fieldList,
polyProvider.geometryType(), sRs)
spatialIndex = ftools_utils.createIndex( pointProvider )
self.emit(SIGNAL("rangeChanged(int)"), polyProvider.featureCount() )
polyFeat = QgsFeature()
pntFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
polyFit = polyProvider.getFeatures()
while polyFit.nextFeature(polyFeat):
inGeom = polyFeat.geometry()
atMap = polyFeat.attributes()
outFeat.setAttributes(atMap)
outFeat.setGeometry(inGeom)
count = 0
pointList = []
hasIntersection = True
pointList = spatialIndex.intersects(inGeom.boundingBox())
if len(pointList) > 0:
hasIntersection = True
else:
hasIntersection = False
if hasIntersection:
valueList = {}
for item in selectedItems:
valueList[item.text()] = []
for p in pointList:
pointProvider.getFeatures( QgsFeatureRequest().setFilterFid( p ) ).nextFeature( pntFeat )
tmpGeom = QgsGeometry(pntFeat.geometry())
if inGeom.intersects(tmpGeom):
count += 1
for item in selectedItems:
valueList[item.text()].append(pntFeat.attribute(item.text()))
self.mutex.lock()
s = self.stopMe
self.mutex.unlock()
if s == 1:
interrupted = True
break
atMap.append(count)
# Compute the statistical values for selected vector attributes
for item in selectedItems:
values = valueList[item.text()]
# Check if the input contains non-numeric values
non_numeric_values = False
for value in values:
if not isinstance(value, type(float())) and not isinstance(value, type(int())):
non_numeric_values = True
break
# Jump over invalid values
if non_numeric_values is True:
continue
if values and len(values) > 0:
if self.statistics == "sum":
value = reduce(myAdder, values)
elif self.statistics == "mean":
value = reduce(myAdder, values) / float(len(values))
elif self.statistics == "min":
#.........这里部分代码省略.........
示例8: __adjust
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import attribute [as 别名]
def __adjust(self):
"""
To look for adjustments and to display them
"""
self.__layers = self.__lineVertices(True)
self.__adjustments = []
self.__altitudes = []
for p in range(len(self.__points)):
pt = self.__points[p]
x = pt['x']
y = pt['y']
z = pt['z']
num_lines = len(self.__selectedIds)
drawdown = False
level = None
for layer in self.ownSettings.refLayers:
laySettings = QgsSnappingUtils.LayerConfig(layer, QgsPointLocator.Vertex, self.SEARCH_TOLERANCE,
QgsTolerance.LayerUnits)
f_l = Finder.findClosestFeatureAt(self.toMapCoordinates(layer, QgsPoint(x, y)),
self.canvas(), [laySettings])
if f_l is not None:
feature = f_l[0]
point_v2 = GeometryV2.asPointV2(feature.geometry(), self.__iface)
if point_v2.z() > 0:
if level is not None:
if (level - point_v2.z()) > 0.005:
self.__iface.messageBar().pushMessage(
QCoreApplication.translate(
"VDLTools", "More than one reference point, with 2 different elevations !!"),
level=QgsMessageBar.CRITICAL, duration=0)
self.__cancel()
return
level = point_v2.z()
comp = QCoreApplication.translate("VDLTools", " (at invert)")
if str(feature.attribute(self.ownSettings.levelAtt)) in self.ownSettings.levelVals:
drawdown = True
comp = QCoreApplication.translate("VDLTools", " (on pipe)")
if point_v2.z() == 0:
comp = QCoreApplication.translate("VDLTools", " (no elevation)")
self.__adjustments.append({'point': p, 'previous': point_v2.z(), 'line': False,
'layer': f_l[1], 'comp': comp, 'feature': f_l[0], 'delta': False})
diam = 0
for i in range(num_lines):
if z[i] is None:
continue
id_s = self.__selectedIds[i]
feature = QgsFeature()
self.ownSettings.drawdownLayer.getFeatures(QgsFeatureRequest().setFilterFid(id_s)).nextFeature(feature)
dtemp = feature.attribute(self.ownSettings.pipeDiam)/1000
if dtemp > diam:
diam = dtemp
selected = None
for f in self.ownSettings.drawdownLayer.selectedFeatures():
if f.id() == id_s:
selected = f
break
self.__adjustments.append({'point': p, 'previous': z[i], 'line': True,
'layer': self.ownSettings.drawdownLayer, 'feature': selected, 'delta': True})
for layer in self.__layers:
laySettings = QgsSnappingUtils.LayerConfig(layer, QgsPointLocator.Vertex, self.SEARCH_TOLERANCE,
QgsTolerance.LayerUnits)
f_l = Finder.findClosestFeatureAt(self.toMapCoordinates(layer, QgsPoint(x, y)),
self.canvas(), [laySettings])
if f_l is None:
z.append(None)
else:
if layer == self.ownSettings.drawdownLayer:
f_ok = None
if f_l[0].id() not in self.__selectedIds:
f_ok = f_l[0]
else:
fs = Finder.findFeaturesAt(QgsPoint(x, y), laySettings, self)
for f in fs:
if f.id() not in self.__selectedIds:
vertex = f.geometry().closestVertex(QgsPoint(x, y))
if vertex[4] < self.SEARCH_TOLERANCE:
f_ok = f
break
if f_ok is not None:
closest = f_ok.geometry().closestVertex(QgsPoint(x, y))
line, curved = GeometryV2.asLineV2(f_ok.geometry(), self.__iface)
zp = line.zAt(closest[1])
dtemp = f_ok.attribute(self.ownSettings.pipeDiam) / 1000
if dtemp > diam:
diam = dtemp
self.__adjustments.append({'point': p, 'previous': zp, 'line': False,
'comp': QCoreApplication.translate("VDLTools", " connected"),
'feature': f_ok, 'layer': f_l[1], 'delta': True})
if zp is None or zp != zp:
z.append(0)
else:
z.append(zp)
else:
z.append(None)
else:
zp = GeometryV2.asPointV2(f_l[0].geometry(), self.__iface).z()
#.........这里部分代码省略.........