本文整理汇总了Python中qgis.core.QgsFeatureRequest类的典型用法代码示例。如果您正苦于以下问题:Python QgsFeatureRequest类的具体用法?Python QgsFeatureRequest怎么用?Python QgsFeatureRequest使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了QgsFeatureRequest类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: get_feature_value
def get_feature_value(self, model=None):
self.layer.startEditing()
feature = None
request = QgsFeatureRequest()
if model is None:
model = self.host.model()
request.setFilterFid(model.id)
feature_itr = self.layer.getFeatures(request)
for feat in feature_itr:
feature = feat
break
exp = QgsExpression(self.column.expression)
if exp.hasParserError():
raise Exception(exp.parserErrorString())
exp.prepare(self.layer.pendingFields())
if feature is not None:
value = exp.evaluate(feature)
return value
else:
return None
示例2: _getXYvalues
def _getXYvalues(self, ts_layer, dateField, valueField):
# utility function used to get the X and Y values
x, y = [], []
# get indexes of date (x) and value (y) fields
dateIdx, valueIdx = None, None
for idx, fld in enumerate(ts_layer.dataProvider().fields()):
if fld.name().lower() == dateField:
dateIdx = idx
elif fld.name().lower() == valueField:
valueIdx = idx
if dateIdx is None or valueIdx is None:
QgsMessageLog.logMessage("field %s -> index %s, field %s -> index %s. Exiting" % (dateField, dateIdx, valueField, valueIdx), "PSTimeSeriesViewer")
return
# fetch and loop through all the features
request = QgsFeatureRequest()
request.setSubsetOfAttributes([dateIdx, valueIdx])
for f in ts_layer.getFeatures( request ):
# get x and y values
a = f.attributes()
x.append( QDate.fromString( a[ dateIdx ], "yyyyMMdd" ).toPyDate() )
y.append( float(a[ valueIdx ]) )
return x, y
示例3: updateGui
def updateGui(self, feature):
# The important part: get the feature iterator with an expression
request = QgsFeatureRequest().setFilterExpression ( u'"pand_id" = \'' + unicode(feature['gebouwnummer']) + '\'' )
request.setFlags( QgsFeatureRequest.NoGeometry )
features = self.geomLayer.getFeatures( request )
atr = None
fields = self.geomLayer.pendingFields()
field_names = [field.name() for field in fields]
for elem in features:
self.editFeature = elem
atr = dict(zip(field_names, elem.attributes()))
if atr is not None:
atr = {i:j for i,j in atr.items() if j }
self.newGroupBox.hide()
self.editGroupBox.show()
self.verwijderWidget.show()
self.showValues(feature, atr)
self.actionButtonBox.setDisabled(True)
else:
self.newGroupBox.show()
self.editGroupBox.hide()
self.verwijderWidget.hide()
self.editFeature = None
self.statusNieuwLabel.setText(unicode(feature['status']))
self.pandidLabel.setText(unicode(feature['gebouwnummer']))
示例4: processAlgorithm
def processAlgorithm(self, progress):
network = dataobjects.getObjectFromUri(
self.getParameterValue(self.NETWORK_LAYER))
# Ensure that upstream and downstream arc detected
idxUpArcId= findField(network, 'UpArcId')
if idxUpArcId == -1:
raise GeoAlgorithmExecutionException(
self.tr('Seems upstream and downstream arcs is not set. '
'Please run corresponding tool and try again.'))
# First add new fields to the network layer
networkProvider = network.dataProvider()
(idxStrahler, fieldList) = findOrCreateField(network,
network.pendingFields(), 'StrahOrder', QVariant.Int, 10, 0)
writer = self.getOutputFromName(self.STRAHLER_ORDER).getVectorWriter(
fieldList.toList(), networkProvider.geometryType(),
networkProvider.crs())
# Generate helper dictionaries
myNetwork, arcsPerNodeId = makeHelperDictionaries(network)
# Write output file
for f in network.getFeatures():
writer.addFeature(f)
del writer
vl = QgsVectorLayer(self.getOutputValue(self.STRAHLER_ORDER), 'tmp', 'ogr')
provider = vl.dataProvider()
# calculate Strahler orders
# Algorithm at pages 65-66 "Automated AGQ4Vector Watershed.pdf"
req = QgsFeatureRequest()
progress.setInfo(self.tr('Calculating Strahler orders...'))
# Iterate over upsteram node ids starting from the last ones
# which represents source arcs
for nodeId in sorted(myNetwork.keys(), reverse=True):
f = vl.getFeatures(req.setFilterFid(myNetwork[nodeId])).next()
fid = f.id()
upstreamArcs = f['UpArcId']
if upstreamArcs == NULL:
provider.changeAttributeValues({fid:{idxStrahler: 1}})
else:
orders = []
for i in upstreamArcs.split(','):
f = vl.getFeatures(req.setFilterFid(int(i))).next()
if f['StrahOrder']:
orders.append(f['StrahOrder'])
orders.sort(reverse=True)
if len(orders) == 1:
order = orders[0]
elif len(orders) >= 2:
diff = orders[0] - orders[1]
if diff == 0:
order = orders[0] + 1
else:
order = max([orders[0], orders[1]])
provider.changeAttributeValues({fid:{idxStrahler: order}})
示例5: __call__
def __call__(self):
if self.rect:
rq = QgsFeatureRequest()
rq.setFilterRect(self.rect)
features = self.layer.getFeatures(rq)
else:
features = self.layer.getFeatures()
for where in self.wheres:
if self.DEBUG: "Has filter"
#TODO Index lookup
# if self.index:
# if self.DEBUG: print "Has index"
# min = 6163
# max = 6164
# iters = [iter(self.index[code]) for code in xrange(min, max + 1)]
# features = itertools.chain(*iters)
features = where(features)
# TODO Clean up
if self.limit:
if self.DEBUG: print "Has Limit"
for count in xrange(self.limit):
if self.selectstatment:
yield self.selectstatment(features.next())
else:
yield features.next()
else:
for f in features:
if self.selectstatment:
yield self.selectstatment(f)
else:
yield f
示例6: print_attribute_table
def print_attribute_table(layer, limit=-1):
"""Print the attribute table in the console.
:param layer: The layer to print.
:type layer: QgsVectorLayer
:param limit: The limit in the query.
:type limit: integer
"""
if layer.wkbType() == QGis.WKBNoGeometry:
geometry = False
else:
geometry = True
headers = []
if geometry:
headers.append('geom')
headers.extend(
[f.name() + ' : ' + str(f.type()) for f in layer.fields().toList()])
request = QgsFeatureRequest()
request.setLimit(limit)
data = []
for feature in layer.getFeatures(request):
attributes = []
if geometry:
attributes.append(feature.geometry().type())
attributes.extend(feature.attributes())
data.append(attributes)
print pretty_table(data, headers)
示例7: __get_text_flaeche
def __get_text_flaeche(self, quelle, gstk, layer, fld_name):
text = {}
#performance! filter by bb of gstk first
feat_req = QgsFeatureRequest()
feat_req.setFilterRect(gstk.geometry().boundingBox())
for feat in layer.getFeatures(feat_req):
if feat.geometry().intersects(gstk.geometry()):
#no fld_name defined: means yes/no only
if fld_name is None:
attr_val = u'Ja'
else:
attr_val = feat[fld_name]
#convert everything to string
#JSON only allows for string keys -> settingsfile
if isinstance( attr_val, (int, long)):
attr_val = unicode(attr_val)
elif isinstance(attr_val, float):
attr_val = u'{0:.0f}'.format(attr_val)
#replace attribute values with mapping text from settings file
if not quelle.text is None:
if attr_val in quelle.text:
attr_val = quelle.text[attr_val]
flaeche = feat.geometry().intersection(gstk.geometry()).area()
if fld_name in text:
text[attr_val] += flaeche
else:
text[attr_val] = flaeche
if len(text) < 1 and fld_name is None:
text[u'Nein'] = 0
elif len(text) < 1 and not fld_name is None:
text[u'Nein'] = 0
return text
示例8: writeTmpLayer
def writeTmpLayer(layer, restrictToExtent, iface, extent):
fields = layer.fields()
usedFields = []
for count, field in enumerate(fields):
fieldIndex = fields.indexFromName(unicode(field.name()))
editorWidget = layer.editorWidgetSetup(fieldIndex).type()
addField = False
try:
if layer.renderer().classAttribute() == field.name():
addField = True
except:
pass
if layer.customProperty("labeling/fieldName") == field.name():
addField = True
if (editorWidget != 'Hidden'):
addField = True
if addField:
usedFields.append(count)
uri = TYPE_MAP[layer.wkbType()]
crs = layer.crs()
if crs.isValid():
uri += '?crs=' + crs.authid()
for field in usedFields:
fieldIndex = layer.fields().indexFromName(unicode(
layer.fields().field(field).name()))
editorWidget = layer.editorWidgetSetup(fieldIndex).type()
fieldType = layer.fields().field(field).type()
fieldName = layer.fields().field(field).name()
if (editorWidget == 'Hidden'):
fieldName = "q2wHide_" + fieldName
fieldType = "double" if (fieldType == QVariant.Double or
fieldType == QVariant.Int) else ("string")
uri += '&field=' + unicode(fieldName) + ":" + fieldType
newlayer = QgsVectorLayer(uri, layer.name(), 'memory')
writer = newlayer.dataProvider()
outFeat = QgsFeature()
if restrictToExtent and extent == "Canvas extent":
canvas = iface.mapCanvas()
extent = canvas.extent()
canvasCRS = canvas.mapSettings().destinationCrs()
layerCRS = layer.crs()
try:
transform = QgsCoordinateTransform(canvasCRS, layerCRS,
QgsProject.instance())
except:
transform = QgsCoordinateTransform(canvasCRS, layerCRS)
projectedExtent = transform.transformBoundingBox(extent)
request = QgsFeatureRequest(projectedExtent)
request.setFlags(QgsFeatureRequest.ExactIntersect)
features = layer.getFeatures(request)
else:
features = layer.getFeatures()
for feature in features:
if feature.geometry() is not None:
outFeat.setGeometry(feature.geometry())
attrs = [feature[f] for f in usedFields]
if attrs:
outFeat.setAttributes(attrs)
writer.addFeatures([outFeat])
return newlayer
示例9: exportImages
def exportImages(layer, field, layerFileName):
field_index = layer.fields().indexFromName(field)
widget = layer.editorWidgetSetup(field_index).type()
if widget != 'Photo':
return
fr = QgsFeatureRequest()
fr.setSubsetOfAttributes([field_index])
for feature in layer.getFeatures(fr):
photo_file_name = feature.attribute(field)
if type(photo_file_name) is not unicode:
continue
source_file_name = photo_file_name
if not os.path.isabs(source_file_name):
prj_fname = QgsProject.instance().fileName()
source_file_name = os.path.join(os.path.dirname(prj_fname),
source_file_name)
photo_file_name = re.sub(r'[\\/:]', '_', photo_file_name).strip()
photo_file_name = os.path.join(os.path.dirname(layerFileName),
'..', 'images', photo_file_name)
try:
shutil.copyfile(source_file_name, photo_file_name)
except IOError as e:
pass
示例10: get_wkt
def get_wkt(self, spatial_column, feature_id):
"""
Gets feature geometry in Well-Known Text
format and returns it.
:param spatial_column: The spatial column name.
:type spatial_column: String
:param feature_id: Feature id
:type feature_id: Integer
:return: Well-Known Text format of a geometry
:rtype: WKT
"""
geom_wkt = None
fid = feature_id
request = QgsFeatureRequest()
request.setFilterFid(fid)
features = self.layer.getFeatures(request)
geom_col_obj = self.entity.columns[spatial_column]
geom_type = geom_col_obj.geometry_type()
# get the wkt of the geometry
for feature in features:
geometry = feature.geometry()
if geometry.isGeosValid():
if geom_type in ['MULTIPOLYGON', 'MULTILINESTRING']:
geometry.convertToMultiType()
geom_wkt = geometry.exportToWkt()
return geom_wkt
示例11: findFeaturesAt
def findFeaturesAt(mapPoint, layerConfig, mapTool):
"""
To find features from a given position in a given layer
:param mapPoint: the map position
:param layerConfig: the layer in which we are looking for features
:param mapTool: a QgsMapTool instance
:return: features found in layer
"""
if layerConfig is None:
return None
tolerance = layerConfig.tolerance
if layerConfig.unit == QgsTolerance.Pixels:
layTolerance = Finder.calcCanvasTolerance(mapTool.toCanvasCoordinates(mapPoint), layerConfig.layer, mapTool,
tolerance)
elif layerConfig.unit == QgsTolerance.ProjectUnits:
layTolerance = Finder.calcMapTolerance(mapPoint, layerConfig.layer, mapTool, tolerance)
else:
layTolerance = tolerance
layPoint = mapTool.toLayerCoordinates(layerConfig.layer, mapPoint)
searchRect = QgsRectangle(layPoint.x() - layTolerance, layPoint.y() - layTolerance,
layPoint.x() + layTolerance, layPoint.y() + layTolerance)
request = QgsFeatureRequest()
request.setFilterRect(searchRect)
request.setFlags(QgsFeatureRequest.ExactIntersect)
features = []
for feature in layerConfig.layer.getFeatures(request):
if layerConfig.layer.geometryType() == QGis.Polygon:
dist, nearest, vertex = feature.geometry().closestSegmentWithContext(mapPoint)
if QgsGeometry.fromPoint(nearest).intersects(searchRect):
features.append(QgsFeature(feature))
else:
features.append(QgsFeature(feature))
return features
示例12: testRectAndFids
def testRectAndFids(self):
"""
Test the combination of a filter rect along with filterfids
"""
# first get feature ids
ids = {f['pk']: f.id() for f in self.source.getFeatures()}
extent = QgsRectangle(-70, 67, -60, 80)
request = QgsFeatureRequest().setFilterFids([ids[3], ids[4]]).setFilterRect(extent)
result = set([f['pk'] for f in self.source.getFeatures(request)])
all_valid = (all(f.isValid() for f in self.source.getFeatures(request)))
expected = [4]
assert set(expected) == result, 'Expected {} and got {} when testing for combination of filterRect and expression'.format(set(expected), result)
self.assertTrue(all_valid)
# shouldn't matter what order this is done in
request = QgsFeatureRequest().setFilterRect(extent).setFilterFids([ids[3], ids[4]])
result = set([f['pk'] for f in self.source.getFeatures(request)])
all_valid = (all(f.isValid() for f in self.source.getFeatures(request)))
expected = [4]
assert set(
expected) == result, 'Expected {} and got {} when testing for combination of filterRect and expression'.format(
set(expected), result)
self.assertTrue(all_valid)
# test that results match QgsFeatureRequest.acceptFeature
for f in self.source.getFeatures():
self.assertEqual(request.acceptFeature(f), f['pk'] in expected)
示例13: _get_tvalue
def _get_tvalue(self, id, epoch, symbol, get_first):
req = QgsFeatureRequest()
exp = self._time_query_string(epoch, self.timeColumn, symbol)
exp += self._id_query_string(id)
req.setFilterExpression(exp)
warn(exp)
s = self.timeLayer.subsetString()
self.timeLayer.setSubsetString("")
featIt = self.timeLayer.layer.dataProvider().getFeatures(req)
self.timeLayer.setSubsetString(s)
feats = list(featIt)
if get_first:
subList = feats[:min(20, len(feats))]
else:
subList = feats[-min(20, len(feats)):]
feats = sorted(subList,
key=lambda feat: self.getStartEpochFromFeature(feat, self.timeLayer))
if not feats:
return None
if get_first:
feat = feats[0]
else:
feat = feats[-1]
curr_epoch = self.getStartEpochFromFeature(feat, self.timeLayer)
return curr_epoch
示例14: clone_layer
def clone_layer(layer, keep_selection=True):
"""Duplicate the layer by taking the same source and copying keywords.
:param keep_selection: If we should keep the selection. Default to true.
:type keep_selection: bool
:param layer: Layer to be duplicated.
:type layer: QgsMapLayer
:return: The new QgsMapLayer object.
:rtype: QgsMapLayer
"""
if is_vector_layer(layer):
new_layer = QgsVectorLayer(
layer.source(), layer.name(), layer.providerType())
if keep_selection and layer.selectedFeatureCount() > 0:
request = QgsFeatureRequest()
request.setFilterFids(layer.selectedFeatureIds())
request.setFlags(QgsFeatureRequest.NoGeometry)
iterator = layer.getFeatures(request)
new_layer.setSelectedFeatures([k.id() for k in iterator])
else:
new_layer = QgsRasterLayer(
layer.source(), layer.name(), layer.providerType())
new_layer.keywords = copy_layer_keywords(layer.keywords)
return layer
示例15: writePolygonFeature
def writePolygonFeature(self, layer, attributes_dict):
polygons_svg = []
request = QgsFeatureRequest()
request.setFilterRect(self.iface.mapCanvas().extent())
for feature in layer.getFeatures(request):
polygons_svg.append(self.writePolygonToSVG(feature, attributes_dict))
return polygons_svg