def linearMatrix(self, writer, provider1, provider2, index1, index2, nearest, distArea, matType, sindex, progressBar): if nearest > 1: inFeat = QgsFeature() outFeat = QgsFeature() inGeom = QgsGeometry() outGeom = QgsGeometry() start = 15.00 add = 85.00 / provider1.featureCount() while provider1.nextFeature(inFeat): inGeom = inFeat.geometry() inID = inFeat.attributeMap()[index1].toString() featList = sindex.nearestNeighbor(inGeom.asPoint(), nearest) distList = [] vari = 0.00 for i in featList: provider2.featureAtId(int(i), outFeat, True, [index2]) outID = outFeat.attributeMap()[index2].toString() outGeom = outFeat.geometry() dist = distArea.measureLine(inGeom.asPoint(), outGeom.asPoint()) if dist > 0: if matType == "Linear": writer.writerow([unicode(inID), unicode(outID), str(dist)]) else: distList.append(float(dist)) if matType == "Summary": mean = sum(distList) / len(distList) for i in distList: vari = vari + ((i - mean)*(i - mean)) vari = sqrt(vari / len(distList)) writer.writerow([unicode(inID), str(mean), str(vari), str(min(distList)), str(max(distList))]) start = start + add progressBar.setValue(start) del writer else: # print our message to user? break