示例#1
0
    def joinLayer(self, targetlayer, pkfield, sourcelayer, fkfield):
        """
        Join the results of the SQL Server query to the pg layer
        """

        joinInfo = QgsVectorLayerJoinInfo()
        # Backward compatbility QGIS3=>2
        if qversion == 3:
            joinInfo.setTargetFieldName(pkfield)
            joinInfo.setJoinLayer(sourcelayer)
            joinInfo.setJoinFieldName(fkfield)
            joinInfo.setUsingMemoryCache(True)
        else:  # QGIS 2
            joinInfo.targetFieldName = pkfield
            joinInfo.joinLayerId = sourcelayer.id()
            joinInfo.joinFieldName = fkfield
            joinInfo.memoryCache = True
        targetlayer.addJoin(joinInfo)
        targetlayer.updateFields()
        return targetlayer
示例#2
0
    def execute_layers_join(layer, layer_field, column_header, fk_layer,
                            fk_field):
        """
        Joins two layers with specified field.
        :param layer: The destination layer of the merge.
        :type layer: QgsVectorLayer
        :param layer_field: The source layer of the merge.
        :type layer_field: String
        :param fk_layer: The foreign key layer object.
        :type fk_layer: QgsVectorLayer
        :param fk_field: The foreign key layer field name.
        :type fk_field: String
        :return:
        :rtype:
        """
        join = QgsVectorLayerJoinInfo()
        join.joinLayerId = fk_layer.id()
        join.joinFieldName = 'id'

        join.setJoinFieldNamesSubset([fk_field])
        join.targetFieldName = layer_field
        join.memoryCache = True
        join.prefix = '{} '.format(column_header)
        layer.addJoin(join)