Last active
January 10, 2020 22:17
-
-
Save Alex-Devoid/5e643922c7936f6d37ecb2b2c85d1a5d to your computer and use it in GitHub Desktop.
PyQGIS: Check if each feature intersects with features from multiple layers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| canvas= qgis.utils.iface.mapCanvas() | |
| layers = dict((k.name(),i) for i, k in enumerate(canvas.layers())) | |
| print(layers) | |
| ## parcel layer showing property | |
| layer1 = canvas.layer(14) | |
| provider = layer1.dataProvider() | |
| #main highway | |
| #comine the geometries of all the features in each buffer | |
| l_buffer = QgsGeometry.fromWkt('GEOMETRYCOLLECTION EMPTY') | |
| leftBuffer11 = canvas.layer(5) | |
| for feature in leftBuffer11.getFeatures(): | |
| l_buffer = l_buffer.combine(feature.geometry()) | |
| c_buffer = QgsGeometry.fromWkt('GEOMETRYCOLLECTION EMPTY') | |
| centerBuffer11 = canvas.layer(4) | |
| for feature in centerBuffer11.getFeatures(): | |
| c_buffer = c_buffer.combine(feature.geometry()) | |
| r_buffer = QgsGeometry.fromWkt('GEOMETRYCOLLECTION EMPTY') | |
| rightBuffer11 = canvas.layer(3) | |
| for feature in rightBuffer11.getFeatures(): | |
| r_buffer = r_buffer.combine(feature.geometry()) | |
| #connection to highway | |
| l_buffer_connection = QgsGeometry.fromWkt('GEOMETRYCOLLECTION EMPTY') | |
| leftBuffer11_connection = canvas.layer(2) | |
| for feature in leftBuffer11_connection.getFeatures(): | |
| l_buffer_connection = l_buffer_connection.combine(feature.geometry()) | |
| c_buffer_connection = QgsGeometry.fromWkt('GEOMETRYCOLLECTION EMPTY') | |
| centerBuffer11_connection = canvas.layer(1) | |
| for feature in centerBuffer11_connection.getFeatures(): | |
| c_buffer_connection = c_buffer_connection.combine(feature.geometry()) | |
| r_buffer_connection = QgsGeometry.fromWkt('GEOMETRYCOLLECTION EMPTY') | |
| rightBuffer11_connection = canvas.layer(0) | |
| for feature in rightBuffer11_connection.getFeatures(): | |
| r_buffer_connection = r_buffer_connection.combine(feature.geometry()) | |
| #create the fields for the buffer checks | |
| layer1.startEditing() | |
| #main highway | |
| myField = QgsField( 'buLeft', QVariant.String ) | |
| myField1 = QgsField( 'buRight', QVariant.String ) | |
| myField2 = QgsField( 'buCenter', QVariant.String ) | |
| #Highway connection | |
| myFieldc = QgsField( 'buLeftc', QVariant.String ) | |
| myField1c = QgsField( 'buRightc', QVariant.String ) | |
| myField2c = QgsField( 'buCenterc', QVariant.String ) | |
| ## field for all buffers | |
| myField3 = QgsField( 'buAll', QVariant.String ) | |
| provider.addAttributes([myField,myField1,myField2,myFieldc,myField1c,myField2c,myField3]) | |
| layer1.updateFields() | |
| idxLc = layer1.fields().indexFromName('buLeftc') | |
| idxRc = layer1.fields().indexFromName('buRightc') | |
| idxCc = layer1.fields().indexFromName('buCenterc') | |
| idxL = layer1.fields().indexFromName('buLeft') | |
| idxR = layer1.fields().indexFromName('buRight') | |
| idxC = layer1.fields().indexFromName('buCenter') | |
| idxA = layer1.fields().indexFromName('buAll') | |
| features1 = layer1.getFeatures() | |
| ##check it each parcel intersects with each buffer | |
| for feature in features1: | |
| intersectL = feature.geometry().intersects(l_buffer) | |
| intersectC = feature.geometry().intersects(c_buffer) | |
| intersectR = feature.geometry().intersects(r_buffer) | |
| intersectLc = feature.geometry().intersects(l_buffer_connection) | |
| intersectCc = feature.geometry().intersects(c_buffer_connection) | |
| intersectRc = feature.geometry().intersects(r_buffer_connection) | |
| if all( [intersectL,intersectC,intersectR] ) or all( [intersectLc,intersectCc,intersectRc] ): | |
| intersectA = True | |
| else: | |
| intersectA = False | |
| layer1.changeAttributeValue(feature.id(), idxLc, str(intersectLc)) | |
| layer1.changeAttributeValue(feature.id(), idxRc, str(intersectRc)) | |
| layer1.changeAttributeValue(feature.id(), idxCc, str(intersectCc)) | |
| layer1.changeAttributeValue(feature.id(), idxL, str(intersectL)) | |
| layer1.changeAttributeValue(feature.id(), idxR, str(intersectR)) | |
| layer1.changeAttributeValue(feature.id(), idxC, str(intersectC)) | |
| layer1.changeAttributeValue(feature.id(), idxA, str(intersectA)) | |
| layer1.commitChanges() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment