本文整理汇总了Python中qgis.core.QgsFeatureRequest.setFilterFids方法的典型用法代码示例。如果您正苦于以下问题:Python QgsFeatureRequest.setFilterFids方法的具体用法?Python QgsFeatureRequest.setFilterFids怎么用?Python QgsFeatureRequest.setFilterFids使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsFeatureRequest
的用法示例。
在下文中一共展示了QgsFeatureRequest.setFilterFids方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: clone_layer
# 需要导入模块: from qgis.core import QgsFeatureRequest [as 别名]
# 或者: from qgis.core.QgsFeatureRequest import setFilterFids [as 别名]
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
示例2: test_sql2
# 需要导入模块: from qgis.core import QgsFeatureRequest [as 别名]
# 或者: from qgis.core.QgsFeatureRequest import setFilterFids [as 别名]
def test_sql2(self):
l2 = QgsVectorLayer(os.path.join(self.testDataDir, "france_parts.shp"), "france_parts", "ogr", False)
self.assertEqual(l2.isValid(), True)
QgsProject.instance().addMapLayer(l2)
query = toPercent("SELECT * FROM france_parts")
l4 = QgsVectorLayer("?query=%s&uid=ObjectId" % query, "tt", "virtual")
self.assertEqual(l4.isValid(), True)
self.assertEqual(l4.dataProvider().wkbType(), 3)
self.assertEqual(l4.dataProvider().crs().postgisSrid(), 4326)
n = 0
r = QgsFeatureRequest(QgsRectangle(-1.677, 49.624, -0.816, 49.086))
for f in l4.getFeatures(r):
self.assertEqual(f.geometry() is not None, True)
self.assertEqual(f.attributes()[0], 2661)
n += 1
self.assertEqual(n, 1)
# use uid
query = toPercent("SELECT * FROM france_parts")
l5 = QgsVectorLayer("?query=%s&geometry=geometry:polygon:4326&uid=ObjectId" % query, "tt", "virtual")
self.assertEqual(l5.isValid(), True)
idSum = sum(f.id() for f in l5.getFeatures())
self.assertEqual(idSum, 10659)
r = QgsFeatureRequest(2661)
idSum2 = sum(f.id() for f in l5.getFeatures(r))
self.assertEqual(idSum2, 2661)
r = QgsFeatureRequest()
r.setFilterFids([2661, 2664])
self.assertEqual(sum(f.id() for f in l5.getFeatures(r)), 2661 + 2664)
# test attribute subset
r = QgsFeatureRequest()
r.setFlags(QgsFeatureRequest.SubsetOfAttributes)
r.setSubsetOfAttributes([1])
s = [(f.id(), f.attributes()[1]) for f in l5.getFeatures(r)]
self.assertEqual(sum([x[0] for x in s]), 10659)
self.assertEqual(sum([x[1] for x in s]), 3064.0)
# test NoGeometry
# by request flag
r = QgsFeatureRequest()
r.setFlags(QgsFeatureRequest.NoGeometry)
self.assertEqual(all([not f.hasGeometry() for f in l5.getFeatures(r)]), True)
# test subset
self.assertEqual(l5.dataProvider().featureCount(), 4)
l5.setSubsetString("ObjectId = 2661")
idSum2 = sum(f.id() for f in l5.getFeatures(r))
self.assertEqual(idSum2, 2661)
self.assertEqual(l5.dataProvider().featureCount(), 1)
示例3: copy_layer
# 需要导入模块: from qgis.core import QgsFeatureRequest [as 别名]
# 或者: from qgis.core.QgsFeatureRequest import setFilterFids [as 别名]
def copy_layer(source, target):
"""Copy a vector layer to another one.
:param source: The vector layer to copy.
:type source: QgsVectorLayer
:param target: The destination.
:type source: QgsVectorLayer
"""
out_feature = QgsFeature()
target.startEditing()
request = QgsFeatureRequest()
aggregation_layer = False
if source.keywords.get('layer_purpose') == 'aggregation':
try:
use_selected_only = source.use_selected_features_only
except AttributeError:
use_selected_only = False
# We need to check if the user wants selected feature only and if there
# is one minimum selected.
if use_selected_only and source.selectedFeatureCount() > 0:
request.setFilterFids(source.selectedFeatureIds())
aggregation_layer = True
for i, feature in enumerate(source.getFeatures(request)):
geom = feature.geometry()
if aggregation_layer and feature.hasGeometry():
# See issue https://github.com/inasafe/inasafe/issues/3713
# and issue https://github.com/inasafe/inasafe/issues/3927
# Also handle if feature has no geometry.
was_valid, geom = geometry_checker(geom)
if not geom:
LOGGER.info(
'One geometry in the aggregation layer is still invalid '
'after cleaning.')
out_feature.setGeometry(geom)
out_feature.setAttributes(feature.attributes())
target.addFeature(out_feature)
target.commitChanges()
示例4: data
# 需要导入模块: from qgis.core import QgsFeatureRequest [as 别名]
# 或者: from qgis.core.QgsFeatureRequest import setFilterFids [as 别名]
def data( self ):
if self._dataLoaded:
return self._x, self._y, self._z
self._dataLoaded=True
self._x = None
self._y = None
self._z = None
self._gridShape=None
self._gridTested=False
self._dataLoaded=True
source=self._source
zField=self._zField
if source is None or zField is None or zField == '':
return self._x, self._y, self._z
discardTolerance=self._discardTolerance
feedback=self._feedback
total = source.featureCount()
percent = 100.0 / total if total > 0 else 0
count = 0
x = list()
y = list()
z = list()
try:
if source.fields().lookupField(zField) >= 0:
zField='"'+zField.replace('"','""')+'"'
expression=QgsExpression(zField)
if expression.hasParserError():
raise ContourError(tr("Cannot parse")+" "+zField)
fields=source.fields()
context=QgsExpressionContext()
context.setFields(fields)
if not expression.prepare(context):
raise ContourError(tr("Cannot evaluate value")+ " "+zField)
request = QgsFeatureRequest()
request.setSubsetOfAttributes( expression.referencedColumns(),fields)
if self._sourceFids is not None:
request.setFilterFids(self._sourceFids)
for current,feat in enumerate(source.getFeatures( request )):
try:
if feedback.isCanceled():
raise ContourError('Cancelled by user')
feedback.setProgress(int(current * percent))
context.setFeature(feat)
zval=expression.evaluate(context)
try:
zval=float(zval)
except ValueError:
raise ContourError(tr("Z value {0} is not number")
.format(zval))
if zval is not None:
fgeom = feat.geometry()
if QgsWkbTypes.flatType(fgeom.wkbType()) != QgsWkbTypes.Point:
raise ContourError(tr("Invalid geometry type for contouring - must be point geometry"))
geom=fgeom.asPoint()
x.append(geom.x())
y.append(geom.y())
z.append(zval)
except Exception as ex:
raise
count = count + 1
npt=len(x)
if npt > 0:
x=np.array(x)
y=np.array(y)
z=np.array(z)
if discardTolerance > 0:
index=ContourUtils.discardDuplicatePoints(
x,y,discardTolerance,self.crs().isGeographic())
npt1=len(index)
if npt1 < npt:
x=x[index]
y=y[index]
z=z[index]
feedback.pushInfo(tr("{0} near duplicate points discarded - tolerance {1}")
.format(npt-npt1,discardTolerance))
except ContourError as ce:
feedback.reportError(ce.message())
feedback.setProgress(0)
return self._x,self._y,self._z
finally:
feedback.setProgress(0)
if len(x) < 3:
feedback.reportError(tr("Too few points to contour"))
return self._x, self._y, self._z
self._x=x
self._y=y
self._z=z
return self._x, self._y, self._z
示例5: __init__
# 需要导入模块: from qgis.core import QgsFeatureRequest [as 别名]
# 或者: from qgis.core.QgsFeatureRequest import setFilterFids [as 别名]
def __init__(self, layer, parent=None):
"""Constructor
:param layer: QGIS layer with selected entities
:type layer: QgsVectorLayer
:param parent: Parent object
:type parent: QWidget
"""
super(SOSPlotDialog, self).__init__(parent)
# Set up the user interface from Designer.
self.layer = layer
if type(self.layer) <> type (QgsVectorLayer()) :
raise TypeError(self.tr("Selector layer isn't a vector layer"))
if self.layer.selectedFeatureCount() == 0:
raise ValueError (self.tr("No features selected"))
self.setupUi(self)
map (lambda w: w.setRange(-maxFloat,maxFloat),[self.xMinFloat, self.xMaxFloat, self.yMinFloat, self.yMaxFloat])
def DateTimeEdit2SpinBox (widget):
widget.setValue = lambda value: widget.setDateTime(mpdates.num2date(value))
widget.value = lambda: mpdates.date2num(widget.dateTime().toPyDateTime())
map(DateTimeEdit2SpinBox, [self.xMinTime, self.xMaxTime, self.yMinTime, self.yMaxTime])
request = QgsFeatureRequest()
request.setFlags(QgsFeatureRequest.NoGeometry)
request.setFilterFids(self.layer.selectedFeaturesIds())
self.foiList = set([f.attribute("foi") for f in layer.getFeatures(request)])
self.foiList = list(self.foiList)
self.foiList.sort()
self.plotWidget.genColorMap (len(self.foiList))
self.xProperty.addItems([str(f.name()) for f in list(layer.pendingFields())[2:]])
self.yProperty.addItems([str(f.name()) for f in list(layer.pendingFields())[2:]])
self.xProperty.setCurrentIndex (0)
self.yProperty.setCurrentIndex (1)
self.draw()
self.plotWidget.title = self.layer.name()
self.plotWidget.xLabel = self.xProperty.currentText()
self.plotWidget.yLabel = self.yProperty.currentText()
self.plotWidget.picked.connect (self.dataSeriePicked)
self.plotWidget.axisChanged.connect (self.axisLimChanged)
self.title.editingFinished.connect(lambda: self.optionsToPlot(option='title'))
self.legendChk.stateChanged.connect(lambda v: self.optionsToPlot(option='legend'))
self.legendPos.currentIndexChanged.connect(lambda v: self.optionsToPlot(option='legend'))
self.legendCols.valueChanged.connect(lambda v: self.optionsToPlot(option='legend'))
self.gridChk.stateChanged.connect(lambda v: self.optionsToPlot(option='grid'))
self.xSorted.toggled.connect(self.optionsToPlot)
self.ySorted.toggled.connect(self.optionsToPlot)
self.timeFormat.editingFinished.connect(self.optionsToPlot)
self.xProperty.currentIndexChanged.connect(lambda v: self.optionsToPlot(option='xProperty'))
self.xLabel.editingFinished.connect(lambda: self.optionsToPlot(option='xLabel'))
self.xMinFloat.editingFinished.connect(lambda: self.optionsToPlot(option='xRange'))
self.xMaxFloat.editingFinished.connect(lambda: self.optionsToPlot(option='xRange'))
self.xMinTime.editingFinished.connect(lambda: self.optionsToPlot(option='xRange'))
self.xMaxTime.editingFinished.connect(lambda: self.optionsToPlot(option='xRange'))
self.yProperty.currentIndexChanged.connect(lambda v: self.optionsToPlot(option='yProperty'))
self.yLabel.editingFinished.connect(lambda: self.optionsToPlot(option='yLabel'))
self.yMinFloat.editingFinished.connect(lambda: self.optionsToPlot(option='yRange'))
self.yMaxFloat.editingFinished.connect(lambda: self.optionsToPlot(option='yRange'))
self.yMinTime.editingFinished.connect(lambda: self.optionsToPlot(option='yRange'))
self.yMaxTime.editingFinished.connect(lambda: self.optionsToPlot(option='yRange'))
map (lambda k: self.lineStyle.addItem(k, self.StylesTable.lineStyles[k]), sorted(self.StylesTable.lineStyles))
map (lambda k: self.marker.addItem(k, self.StylesTable.markers[k]), sorted(self.StylesTable.markers))
self.defaultStyle.button(QtGui.QDialogButtonBox.Reset).clicked.connect(self.restoreDefaultStyle)
self.defaultStyle.button(QtGui.QDialogButtonBox.Apply).clicked.connect(lambda: self.optionsToPlot (option='defaultStyle'))
map(lambda b: b.setAutoDefault(False), self.defaultStyle.buttons())
self.optionsFromPlot()
self.stylesTable.setItemDelegateForColumn (1, ColorButtonDelegate(self))
self.stylesTable.setItemDelegateForColumn (2, ComboBoxDelegate(self,self.StylesTable.lineStyles))
self.stylesTable.setItemDelegateForColumn (3, DoubleSpinBoxDelegate(self, (0,100)))
self.stylesTable.setItemDelegateForColumn (4, ComboBoxDelegate(self,self.StylesTable.markers))
self.stylesTable.setItemDelegateForColumn (5, DoubleSpinBoxDelegate(self, (0,100)))
self.stylesTable.setItemDelegateForColumn (6, SliderDelegate(self, (0.0,1.0)))
示例6: run_checks
# 需要导入模块: from qgis.core import QgsFeatureRequest [as 别名]
# 或者: from qgis.core.QgsFeatureRequest import setFilterFids [as 别名]
def run_checks():
self.assertEqual([f.name() for f in vl.fields()], ['fid', 'type', 'value'])
# expression
req = QgsFeatureRequest()
req.setFilterExpression("value=16")
it = vl.getFeatures(req)
f = QgsFeature()
self.assertTrue(it.nextFeature(f))
self.assertEqual(f.id(), 5)
self.assertEqual(f.attributes(), [5, 2, 16])
self.assertEqual([field.name() for field in f.fields()], ['fid', 'type', 'value'])
self.assertEqual(f.geometry().asWkt(), 'Point (5 5)')
# filter fid
req = QgsFeatureRequest()
req.setFilterFid(5)
it = vl.getFeatures(req)
f = QgsFeature()
self.assertTrue(it.nextFeature(f))
self.assertEqual(f.id(), 5)
self.assertEqual(f.attributes(), [5, 2, 16])
self.assertEqual([field.name() for field in f.fields()], ['fid', 'type', 'value'])
self.assertEqual(f.geometry().asWkt(), 'Point (5 5)')
# filter fids
req = QgsFeatureRequest()
req.setFilterFids([5])
it = vl.getFeatures(req)
f = QgsFeature()
self.assertTrue(it.nextFeature(f))
self.assertEqual(f.id(), 5)
self.assertEqual(f.attributes(), [5, 2, 16])
self.assertEqual([field.name() for field in f.fields()], ['fid', 'type', 'value'])
self.assertEqual(f.geometry().asWkt(), 'Point (5 5)')
# check with subset of attributes
req = QgsFeatureRequest()
req.setFilterFids([5])
req.setSubsetOfAttributes([2])
it = vl.getFeatures(req)
f = QgsFeature()
self.assertTrue(it.nextFeature(f))
self.assertEqual(f.id(), 5)
self.assertEqual(f.attributes()[2], 16)
self.assertEqual([field.name() for field in f.fields()], ['fid', 'type', 'value'])
self.assertEqual(f.geometry().asWkt(), 'Point (5 5)')
# filter rect and expression
req = QgsFeatureRequest()
req.setFilterExpression("value=16 or value=14")
req.setFilterRect(QgsRectangle(4.5, 4.5, 5.5, 5.5))
it = vl.getFeatures(req)
f = QgsFeature()
self.assertTrue(it.nextFeature(f))
self.assertEqual(f.id(), 5)
self.assertEqual(f.attributes(), [5, 2, 16])
self.assertEqual([field.name() for field in f.fields()], ['fid', 'type', 'value'])
self.assertEqual(f.geometry().asWkt(), 'Point (5 5)')
# filter rect and fids
req = QgsFeatureRequest()
req.setFilterFids([3, 5])
req.setFilterRect(QgsRectangle(4.5, 4.5, 5.5, 5.5))
it = vl.getFeatures(req)
f = QgsFeature()
self.assertTrue(it.nextFeature(f))
self.assertEqual(f.id(), 5)
self.assertEqual(f.attributes(), [5, 2, 16])
self.assertEqual([field.name() for field in f.fields()], ['fid', 'type', 'value'])
self.assertEqual(f.geometry().asWkt(), 'Point (5 5)')
# Ensure that orig_ogc_fid is still retrieved even if attribute subset is passed
req = QgsFeatureRequest()
req.setSubsetOfAttributes([])
it = vl.getFeatures(req)
ids = []
geoms = {}
while it.nextFeature(f):
ids.append(f.id())
geoms[f.id()] = f.geometry().asWkt()
self.assertCountEqual(ids, [3, 4, 5])
self.assertEqual(geoms, {3: 'Point (3 3)', 4: 'Point (4 4)', 5: 'Point (5 5)'})
示例7: findAtPoint
# 需要导入模块: from qgis.core import QgsFeatureRequest [as 别名]
# 或者: from qgis.core.QgsFeatureRequest import setFilterFids [as 别名]
def findAtPoint(self, layer, point, canvas, onlyTheClosestOne=True, onlyIds=False):
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
# recupera il valore del raggio di ricerca
settings = QgsSettings()
radius = settings.value( "/Map/searchRadiusMM", Qgis.DEFAULT_SEARCH_RADIUS_MM, type=float)
if radius <= 0:
radius = Qgis.DEFAULT_SEARCH_RADIUS_MM
radius = canvas.extent().width() * radius/100
# crea il rettangolo da usare per la ricerca
rect = QgsRectangle()
rect.setXMinimum(point.x() - radius)
rect.setXMaximum(point.x() + radius)
rect.setYMinimum(point.y() - radius)
rect.setYMaximum(point.y() + radius)
rect = canvas.mapSettings().mapToLayerCoordinates(layer, rect)
# recupera le feature che intersecano il rettangolo
ret = None
if onlyTheClosestOne:
request=QgsFeatureRequest()
request.setFilterRect(rect)
minDist = -1
featureId = None
rect = QgsGeometry.fromRect(rect)
count = 0
for f in layer.getFeatures(request):
if onlyTheClosestOne:
geom = f.geometry()
distance = geom.distance(rect)
if minDist < 0 or distance < minDist:
minDist = distance
featureId = f.id()
if onlyIds:
ret = featureId
elif featureId != None:
f = QgsFeature()
feats = layer.getFeature( QgsFeatureRequest(featureId) )
feats.nextFeature(f)
ret = f
else:
IDs = []
for f in layer.getFeatures():
IDs.append( f.id() )
if onlyIds:
ret = IDs
else:
ret = []
request = QgsFeatureRequest()
QgsFeatureRequest.setFilterFids(IDs)
for f in layer.getFeatures( request ):
ret.append( f )
QApplication.restoreOverrideCursor()
return ret