mirror of
https://github.com/qgis/QGIS.git
synced 2025-05-02 00:05:04 -04:00
Update to select by location tool: should run faster for large layers, and requires less memory. Should also fix #1669
git-svn-id: http://svn.osgeo.org/qgis/trunk@13205 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
parent
febbca5692
commit
67376a6ee9
@ -55,23 +55,29 @@ class Dialog(QDialog, Ui_Dialog):
|
|||||||
inputLayer = ftools_utils.getVectorLayerByName(inPoly)
|
inputLayer = ftools_utils.getVectorLayerByName(inPoly)
|
||||||
selectLayer = ftools_utils.getVectorLayerByName(inPts)
|
selectLayer = ftools_utils.getVectorLayerByName(inPts)
|
||||||
inputProvider = inputLayer.dataProvider()
|
inputProvider = inputLayer.dataProvider()
|
||||||
|
allAttrs = inputProvider.attributeIndexes()
|
||||||
|
inputProvider.select(allAttrs)
|
||||||
selectProvider = selectLayer.dataProvider()
|
selectProvider = selectLayer.dataProvider()
|
||||||
|
allAttrs = selectProvider.attributeIndexes()
|
||||||
|
selectProvider.select(allAttrs)
|
||||||
feat = QgsFeature()
|
feat = QgsFeature()
|
||||||
|
infeat = QgsFeature()
|
||||||
geom = QgsGeometry()
|
geom = QgsGeometry()
|
||||||
selectedSet = []
|
selectedSet = []
|
||||||
selectProvider.nextFeature(feat)
|
index = ftools_utils.createIndex(inputProvider)
|
||||||
geomLayer = QgsGeometry(feat.geometry())
|
#selectProvider.nextFeature(feat)
|
||||||
|
#geomLayer = QgsGeometry(feat.geometry())
|
||||||
self.progressBar.setMaximum( inputProvider.featureCount() + selectProvider.featureCount() )
|
self.progressBar.setMaximum(selectProvider.featureCount())
|
||||||
|
|
||||||
while selectProvider.nextFeature(feat):
|
while selectProvider.nextFeature(feat):
|
||||||
geomLayer = geomLayer.combine(QgsGeometry(feat.geometry()))
|
|
||||||
self.progressBar.setValue( self.progressBar.value() + 1 )
|
|
||||||
while inputProvider.nextFeature(feat):
|
|
||||||
geom = QgsGeometry(feat.geometry())
|
geom = QgsGeometry(feat.geometry())
|
||||||
if geom.intersects(geomLayer):
|
intersects = index.intersects(geom.boundingBox())
|
||||||
selectedSet.append(feat.id())
|
for id in intersects:
|
||||||
self.progressBar.setValue( self.progressBar.value() + 1 )
|
inputProvider.featureAtId(int(id), infeat, True)
|
||||||
|
tmpGeom = QgsGeometry( infeat.geometry() )
|
||||||
|
if geom.intersects(tmpGeom):
|
||||||
|
selectedSet.append(infeat.id())
|
||||||
|
self.progressBar.setValue(self.progressBar.value()+1)
|
||||||
if modify == self.tr("adding to current selection"):
|
if modify == self.tr("adding to current selection"):
|
||||||
selectedSet = list(set(inputLayer.selectedFeaturesIds()).union(selectedSet))
|
selectedSet = list(set(inputLayer.selectedFeaturesIds()).union(selectedSet))
|
||||||
elif modify == self.tr("removing from current selection"):
|
elif modify == self.tr("removing from current selection"):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user