1

I have a drains layer (polygon) around which I have created buffers of varying distances. I want to find the intersection between the different buffer layers and pipes (line) layer and accordingly assign score in a field. I have used the following code:

    pathName = os.path.dirname(unicode(drainLayer.dataProvider().dataSourceUri()))
    waterLayer.startEditing()
    for filename in os.listdir(pathName):
        if filename.endswith('1.shp') and ('buf' in filename):
            #name = ntpath.basename(filename).split('.')[0]
            buf = QgsVectorLayer(pathName,filename,"ogr")
            for f1 in waterLayer.getFeatures():
                for f2 in buf.getFeatures():
                    if f1.geometry().intersects(f2.geometry()):
                        f1['drainScore']=3
                        waterLayer.updateFeature(f1)
    waterLayer.commitChanges()
    for filename in os.listdir(pathName):
        if filename.endswith('2.shp') and ('buf' in filename):
            #name = ntpath.basename(filename).split('.')[0]
            buf2 = QgsVectorLayer(pathName,filename,"ogr")
            for f1 in waterLayer.getFeatures():
                for f2 in buf2.getFeatures():
                    if (f1.geometry().crosses(f2.geometry())):
                        f1['drainScore']=2
                        waterLayer.updateFeature(f1)
                    else:
                        f1['drainScore'] =1
                        waterLayer.updateFeature(f1)

Wherever the intersections are complete it gives the correct output. But wherever there are partial intersections, it does not identify them. I have used crosses,touches and intersects method in the second 'for' loop.I have also tried processing algorithms like qgis:intersection, qgis:joinattributesbylocation (with crosses as PREDICATE) but none of them recognize partial intersections. when I use the vector tools of intersection and join attributes by location from QGIS 3 desktop, it gives the correct output,i.e, it recognizes partial as well as complete intersection. I have attached an image of the kind of partial intersection I want the code to recognize. enter image description here

  • i had additionally tried clip and difference tools of QGIS also. I observed the same result, QGIS tools gave different outputs as compared to corresponding processing algorithms in python. I had to use a round about way to solve the problem. Am i missing something when using tools and processing.run ? – rao Mar 19 at 12:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.