Что же я делаю не так?
Есть 2 слоя в КУГИС 2.4: первый из шейп-файла и содержит 11 объектов, второй из PostGIS и содержит 60 тысяч объектов.
Я пробегаю циклом по объектам первого слоя и пытаюсь найти объект(-ы) на втором. Всё работает, объекты находятся и возвращаются в виде featureIterator.
Так вот, если я не обращаюсь к полученному итератору, то весь код отрабатывается очень быстро, а если я хочу получить объект из итератора, то время работы серьёзно увеличивается.
В первом случае доли секунды, в втором 1 минута с копейками!!!
Код: Выделить всё
query 0:00:00.005000
query 0:00:00.005000
query 0:00:00.004000
query 0:00:00.005000
query 0:00:00.004000
query 0:00:00.004000
query 0:00:00.003000
query 0:00:00.004000
query 0:00:00.005000
query 0:00:00.003000
query 0:00:00.003000
Time 0:00:00.121000
query 0:00:00.044000
query 0:00:00.002000
query 0:00:00.004000
query 0:00:00.001000
query 0:00:00.001000
query 0:00:00.002000
query 0:00:00.002000
query 0:00:00.001000
query 0:00:00.002000
query 0:00:00.001000
query 0:00:00.002000
Time 0:01:17.934000
Код: Выделить всё
from datetime import datetime
import sys
newdata = iface.mapCanvas().layer(0)
existdata = iface.mapCanvas().layer(1)
objs = newdata.getFeatures()
idxNew = newdata.fieldNameIndex('Cadnumber')
idxEx = existdata.fieldNameIndex('Cadnumber')
new_data_count = 0
update_data_count = 0
insert_data_count = 0
start = datetime.now()
for NewObj in objs:
startq = datetime.now()
features = existdata.getFeatures(QgsFeatureRequest().setFilterExpression (u"\"Cadnumber\"= '" + NewObj.attributes()[idxNew] + "'"))
print "query " + str((datetime.now() -startq))
for f in features:
pass#вот тут засада!
end = datetime.now()
print "Time " + str(end - start)