查詢過慮實現方式
通過給getFeatures()傳遞 QgsFeatureRequest對象,實現數據的過慮,下邊是一個查詢的例子:
request = QgsFeatureRequest()
request.setFilterRect(areaOfInterest)
for feature in layer.getFeatures(request):
# do whatever you need with the feature
基於空間范圍的查詢
向QgsFeatureRequest的構造函數里傳遞一個 QgsRectangle 對象實現空間范圍內的過慮查詢:
rect=QgsRectangle(121.11,31.11,121.12,31.12)
request = QgsFeatureRequest(rect)
基於字段過慮的查詢
向QgsFeatureRequest的構造函數里傳遞一個 QgsExpression 對象實現字段的過慮查詢:
# The expression will filter the features where the field "location_name" contains
# the word "Lake" (case insensitive) exp = QgsExpression('location_name ILIKE \'%Lake%\'') request = QgsFeatureRequest(exp)
QgsExpression的詳細語法參考: Expressions, Filtering and Calculating Values 。
QgsFeatureRequest還可以用來指定返回的字段,即只返回所有要素中需要的字段。
# Only return selected fields
request.setSubsetOfAttributes([0,2]) # More user friendly version request.setSubsetOfAttributes(['name','id'],layer.pendingFields()) # Don't return geometry objects request.setFlags(QgsFeatureRequest.NoGeometry)
提示
可以設置QgsFeatureRequest.NoGeometry不返回幾何信息來提升查詢的速度。