Beispiel #1
0
    def test_zoom_to_layer(self):
        zoom_layer_name = layer_interaction.biuniquify_layer_name(
            'Test_zoom_to_layer')
        zoom_layer = QgsVectorLayer('Polygon?crs=EPSG:3857', zoom_layer_name,
                                    'memory', False)
        inactive_layer_name = layer_interaction.biuniquify_layer_name(
            'Layer_to_be_activated_and_deactivated_again')
        inactive_layer = QgsVectorLayer('Polygon?crs=EPSG:3857',
                                        inactive_layer_name, 'memory', False)

        self.layer_list.extend([zoom_layer_name, inactive_layer_name])

        reg = QgsMapLayerRegistry.instance()
        reg.addMapLayer(zoom_layer)
        reg.addMapLayer(inactive_layer)

        self.iface.setActiveLayer(inactive_layer)
        self.assertEqual(
            inactive_layer, self.iface.activeLayer(),
            'The layer \"{}\" has not been activated'.format(
                inactive_layer_name))
        # if the given zoom_layer was set active, it has been found and used as the basis for the zoom
        # in that case, the formerly activated layer has to be inactive now!
        layer_interaction.zoom_to_layer(self.iface, zoom_layer_name)
        self.assertEqual(zoom_layer, self.iface.activeLayer())
        self.assertNotEqual(inactive_layer, self.iface.activeLayer())
    def test_add_layer_to_registry(self):
        layer_name = layer_interaction.biuniquify_layer_name('this_layer_was_added_for_testing_purpose')

        layer = QgsVectorLayer('Polygon?crs=EPSG:3857', layer_name, 'memory', False)

        number_of_layers = len(QgsMapLayerRegistry.instance().mapLayers())
        layer_interaction.add_layer_to_registry(layer)
        self.layer_list.append(layer.name())

        map_layers = QgsMapLayerRegistry.instance().mapLayers()
        actual = len(map_layers)
        expected = number_of_layers + 1
        message = 'An error occured when adding a layer to the MapLayerRegistry. {} is not {}!'.format(actual, expected)
        self.assertEqual(actual, expected, message)

        layer_added = False
        for layer_key in map_layers:

            if map_layers[layer_key].name() == layer_name:
                layer_added = True
                break

        self.assertTrue(layer_added, 'An error occured when adding a layer to the MapLayerRegistry.')
        number_of_layers = len(map_layers)
        layer_interaction.add_layer_to_registry(None)
        self.assertEqual(len(QgsMapLayerRegistry.instance().mapLayers()), number_of_layers, 'An error occured when trying to add a none-type-layer to the MapLayerRegistry. The number of layers should not increase.')
Beispiel #3
0
    def test_add_layer_to_registry(self):
        layer_name = layer_interaction.biuniquify_layer_name(
            'this_layer_was_added_for_testing_purpose')

        layer = QgsVectorLayer('Polygon?crs=EPSG:3857', layer_name, 'memory',
                               False)

        number_of_layers = len(QgsMapLayerRegistry.instance().mapLayers())
        layer_interaction.add_layer_to_registry(layer)
        self.layer_list.append(layer.name())

        map_layers = QgsMapLayerRegistry.instance().mapLayers()
        actual = len(map_layers)
        expected = number_of_layers + 1
        message = 'An error occured when adding a layer to the MapLayerRegistry. {} is not {}!'.format(
            actual, expected)
        self.assertEqual(actual, expected, message)

        layer_added = False
        for layer_key in map_layers:

            if map_layers[layer_key].name() == layer_name:
                layer_added = True
                break

        self.assertTrue(
            layer_added,
            'An error occured when adding a layer to the MapLayerRegistry.')
        number_of_layers = len(map_layers)
        layer_interaction.add_layer_to_registry(None)
        self.assertEqual(
            len(QgsMapLayerRegistry.instance().mapLayers()), number_of_layers,
            'An error occured when trying to add a none-type-layer to the MapLayerRegistry. The number of layers should not increase.'
        )
    def test_get_raster_layer_list(self):
        wms_url_with_parameters = self.valid_wms_url
        # use this list for proper testing...
        visibility = [True, False, True, True, True, False]
        # when debugging, use the list below instead
        # visibility = [True]


        for i, visible in enumerate(visibility):
            layer_name = layer_interaction.biuniquify_layer_name('r{}_visible:{}'.format(i, visible))
            rlayer = QgsRasterLayer(wms_url_with_parameters, layer_name, 'wms')
            self.assertTrue(rlayer.isValid(), layer_name.join(' is not a valid raster layer'))
            QgsMapLayerRegistry.instance().addMapLayer(rlayer)
            self.iface.legendInterface().setLayerVisible(rlayer, visible)
            self.layer_list.append(layer_name)

        # get a list of all visible wms layers
        expected_layers = {}
        actual_layers = {}
        visible_raster_layers = layer_interaction.get_raster_layer_list(self.iface, 'visible')
        for i, visible in enumerate(visibility):
            if visible:
                expected_layers[self.layer_list[i]] = True

        for layer in visible_raster_layers:
            if '_visible:' in layer.name():
                actual_layers[str(layer.name())] = True

        self.assertDictEqual(expected_layers, actual_layers, 'The returned layers do not match the expected layers.\n\t Expected: {0}\n\t received: {1}.'.format(expected_layers, actual_layers))

        # get a list of all invisible wms layers
        expected_layers = {}
        actual_layers = {}
        invisible_raster_layers = layer_interaction.get_raster_layer_list(self.iface, 'invisible')
        for i, visible in enumerate(visibility):
            if not visible:
                expected_layers[self.layer_list[i]] = False

        for layer in invisible_raster_layers:
            if '_visible:' in layer.name():
                actual_layers[str(layer.name())] = True if layer.name().endswith('True') else False

        self.assertDictEqual(expected_layers, actual_layers, 'The returned layers do not match the expected layers.\n\t Expected: {0}\n\t received: {1}.'.format(expected_layers, actual_layers))

        # get a list of wms layers
        expected_layers = {}
        actual_layers = {}
        invisible_raster_layers = layer_interaction.get_raster_layer_list(self.iface, 'all')
        for i, visible in enumerate(visibility):
            expected_layers[self.layer_list[i]] = visible

        for layer in invisible_raster_layers:
            if '_visible:' in layer.name():
                actual_layers[str(layer.name())] = True if layer.name().endswith('True') else False

        self.assertDictEqual(expected_layers, actual_layers, 'The returned layers do not match the expected layers.\n\t Expected: {0}\n\t received: {1}.'.format(expected_layers, actual_layers))
    def test_zoom_to_layer(self):
        zoom_layer_name = layer_interaction.biuniquify_layer_name('Test_zoom_to_layer')
        zoom_layer = QgsVectorLayer('Polygon?crs=EPSG:3857', zoom_layer_name, 'memory', False)
        inactive_layer_name = layer_interaction.biuniquify_layer_name('Layer_to_be_activated_and_deactivated_again')
        inactive_layer = QgsVectorLayer('Polygon?crs=EPSG:3857', inactive_layer_name, 'memory', False)

        self.layer_list.extend([zoom_layer_name, inactive_layer_name])

        reg = QgsMapLayerRegistry.instance()
        reg.addMapLayer(zoom_layer)
        reg.addMapLayer(inactive_layer)

        self.iface.setActiveLayer(inactive_layer)
        self.assertEqual(inactive_layer, self.iface.activeLayer(), 'The layer \"{}\" has not been activated'.format(inactive_layer_name))
        # if the given zoom_layer was set active, it has been found and used as the basis for the zoom
        # in that case, the formerly activated layer has to be inactive now!
        layer_interaction.zoom_to_layer(self.iface, zoom_layer_name)
        self.assertEqual(zoom_layer, self.iface.activeLayer())
        self.assertNotEqual(inactive_layer, self.iface.activeLayer())
    def test_find_layer_by_name(self):

        reg = QgsMapLayerRegistry.instance()

        v1_name = layer_interaction.biuniquify_layer_name('layer1')
        v2_name = layer_interaction.biuniquify_layer_name('layer2')
        v3_name = layer_interaction.biuniquify_layer_name('layer3')
        reg.addMapLayer(QgsVectorLayer('Polygon?crs=EPSG:3857', v1_name, 'memory', False))
        self.layer_list.append(v1_name)
        reg.addMapLayer(QgsVectorLayer('Point?crs=EPSG:3857', v2_name, 'memory', False))
        self.layer_list.append(v2_name)
        reg.addMapLayer(QgsVectorLayer('Point?crs=EPSG:3857', v3_name, 'memory', False))
        self.layer_list.append(v3_name)

        layer = layer_interaction.find_layer_by_name(None)
        self.assertIsNone(layer, 'An error occured when trying to find a layer passing a none-type name.')

        layer = layer_interaction.find_layer_by_name('')
        self.assertIsNone(layer, 'An error occured when trying to find a layer passing an empty name.')

        layer = layer_interaction.find_layer_by_name('awdalwd')
        self.assertIsNone(layer, 'An error occured when trying to find a layer passing a non-existing name.')

        layer1 = layer_interaction.find_layer_by_name(v1_name)
        layer2 = layer_interaction.find_layer_by_name(v2_name)
        layer3 = layer_interaction.find_layer_by_name(v3_name)

        layer1_exists = layer2_exists = layer3_exists = False

        for key, layer_value in reg.mapLayers().iteritems():
            if layer_value == layer1:
                layer1_exists = True
            elif layer_value == layer2:
                layer2_exists = True
            elif layer_value == layer3:
                layer3_exists = True

        self.assertTrue(layer1_exists, 'An error occured when trying to find the previously added layer ' + layer1.name() + '.')
        self.assertTrue(layer2_exists, 'An error occured when trying to find the previously added layer ' + layer2.name() + '.')
        self.assertTrue(layer3_exists, 'An error occured when trying to find the previously added layer ' + layer3.name() + '.')
    def test_biuniquify_layer_name(self):
        layer1_name = 'asdhhkhlu18927309hgdkaghdzuz7817982_unique'
        layer2_name = 'asdhhkhlu18927309hgdkaghdzuz781712ziadgwz_unique'
        layer3_name = ''

        self.assertIsNone(layer_interaction.find_layer_by_name(layer1_name), 'Default layer name (\"{}\") is not unique!'.format(layer1_name))
        self.assertIsNone(layer_interaction.find_layer_by_name(layer2_name), 'Default layer name (\"{}\") is not unique!'.format(layer2_name))

        layer1 = QgsVectorLayer('Polygon?crs=EPSG:3857', layer1_name, 'memory', False)
        layer2 = QgsVectorLayer('Polygon?crs=EPSG:3857', layer2_name, 'memory', False)

        self.layer_list.extend([layer1_name, layer2_name])

        reg = QgsMapLayerRegistry.instance()
        reg.addMapLayer(layer1)
        reg.addMapLayer(layer2)

        self.assertEqual('', layer_interaction.biuniquify_layer_name(''))
        self.assertEqual('', layer_interaction.biuniquify_layer_name(None))

        # create a new unique name and add a layer with that name, to check the correctness of the functions while loop
        layer3_name = layer_interaction.biuniquify_layer_name(layer1_name)
        self.assertEqual(layer1_name + '0', layer3_name)

        layer3 = QgsVectorLayer('Polygon?crs=EPSG:3857', layer3_name, 'memory', False)
        reg.addMapLayer(layer3)
        self.layer_list.extend([layer3_name])

        self.assertEqual(layer1_name +'1', layer_interaction.biuniquify_layer_name(layer1_name))
        self.assertEqual(layer1_name +'2', layer_interaction.biuniquify_layer_name(layer1_name + str(2)))
        self.assertEqual(layer2_name +'0', layer_interaction.biuniquify_layer_name(layer2_name))
Beispiel #8
0
    def test_write_vector_layer_to_disk(self):

        v_layer_name = layer_interaction.biuniquify_layer_name(
            'MyWriteTestLayer')
        v_layer = QgsVectorLayer('Polygon?crs=EPSG:3857', v_layer_name,
                                 'memory', False)

        test_path = path.join('./', v_layer_name)

        if path.exists(test_path + '.shp'):
            appendix = 0
            temp_path = test_path
            while path.exists(temp_path + '.shp'):
                appendix += 1
                temp_path = test_path + str(appendix)

            test_path = temp_path
            v_layer_name += str(appendix)

        invalid_path = path.join(test_path, 'InvalidPath')

        return_layer = layer_interaction.write_vector_layer_to_disk(
            v_layer, invalid_path)
        self.assertIsNone(return_layer)
        return_layer = layer_interaction.write_vector_layer_to_disk(
            None, invalid_path)
        self.assertIsNone(return_layer)

        return_layer = layer_interaction.write_vector_layer_to_disk(
            v_layer, test_path)
        self.assertIsNotNone(return_layer)
        self.assertEqual(return_layer.name(), v_layer_name)
        self.assertTrue(path.exists(test_path + '.shp'))

        return_layer = layer_interaction.write_vector_layer_to_disk(
            v_layer, test_path + '.shp')
        self.assertIsNotNone(return_layer)
        self.assertEqual(return_layer.name(), v_layer_name + '1')
        self.assertTrue(path.exists(test_path + '1.shp'))

        test_dir = path.dirname(test_path)
        for subdir, dirs, files in walk(test_dir):
            for file in files:
                if file.startswith(v_layer_name) or file.startswith(
                        v_layer_name + '1'):
                    try:
                        remove(path.join(test_dir, file))
                    except:
                        print('\tTest layer could not be deleted.')
    def test_trigger_edit_mode(self):
        iface = self.iface

        reg = QgsMapLayerRegistry.instance()
        edit_layer_name = layer_interaction.biuniquify_layer_name('MylayerForEditing')
        edit_layer = QgsVectorLayer('Polygon?crs=EPSG:3857', edit_layer_name, 'memory', False)
        reg.addMapLayer(edit_layer)
        self.layer_list.append(edit_layer_name)

        layer_interaction.trigger_edit_mode(self.iface, edit_layer_name)

        self.assertTrue(edit_layer.isEditable())

        layer_interaction.trigger_edit_mode(self.iface, edit_layer_name, 'off')
        self.assertFalse(edit_layer.isEditable())
Beispiel #10
0
    def test_trigger_edit_mode(self):
        iface = self.iface

        reg = QgsMapLayerRegistry.instance()
        edit_layer_name = layer_interaction.biuniquify_layer_name(
            'MylayerForEditing')
        edit_layer = QgsVectorLayer('Polygon?crs=EPSG:3857', edit_layer_name,
                                    'memory', False)
        reg.addMapLayer(edit_layer)
        self.layer_list.append(edit_layer_name)

        layer_interaction.trigger_edit_mode(self.iface, edit_layer_name)

        self.assertTrue(edit_layer.isEditable())

        layer_interaction.trigger_edit_mode(self.iface, edit_layer_name, 'off')
        self.assertFalse(edit_layer.isEditable())
    def create_layer_with_features(self, name, type='Polygon'):
        v_layer_name = li.biuniquify_layer_name(name)

        if type == 'Point':
            v_layer = QgsVectorLayer('{}?crs=EPSG:3857'.format(type), v_layer_name, 'memory', False)
        else:
            v_layer = HybridLayer(type, v_layer_name)
            provider = v_layer.dataProvider()
            v_layer.startEditing()

            attributes = [QgsField('COLOR_RED', QVariant.String),
                          QgsField('COLOR_GRE', QVariant.String),
                          QgsField('COLOR_BLU', QVariant.String),
                          QgsField('COLOR_ALP', QVariant.String)]
            provider.addAttributes(attributes)
            v_layer.commitChanges()

        return v_layer
    def test_write_vector_layer_to_disk(self):

        v_layer_name = layer_interaction.biuniquify_layer_name('MyWriteTestLayer')
        v_layer = QgsVectorLayer('Polygon?crs=EPSG:3857', v_layer_name, 'memory', False)

        test_path = path.join('./', v_layer_name)

        if path.exists(test_path + '.shp'):
            appendix = 0
            temp_path = test_path
            while path.exists(temp_path + '.shp'):
                appendix += 1
                temp_path = test_path + str(appendix)

            test_path = temp_path
            v_layer_name += str(appendix)

        invalid_path = path.join(test_path, 'InvalidPath')

        return_layer = layer_interaction.write_vector_layer_to_disk(v_layer, invalid_path)
        self.assertIsNone(return_layer)
        return_layer = layer_interaction.write_vector_layer_to_disk(None, invalid_path)
        self.assertIsNone(return_layer)

        return_layer = layer_interaction.write_vector_layer_to_disk(v_layer, test_path)
        self.assertIsNotNone(return_layer)
        self.assertEqual(return_layer.name(), v_layer_name)
        self.assertTrue(path.exists(test_path + '.shp'))

        return_layer = layer_interaction.write_vector_layer_to_disk(v_layer, test_path + '.shp')
        self.assertIsNotNone(return_layer)
        self.assertEqual(return_layer.name(), v_layer_name + '1')
        self.assertTrue(path.exists(test_path + '1.shp'))

        test_dir = path.dirname(test_path)
        for subdir, dirs, files in walk(test_dir):
            for file in files:
                if file.startswith(v_layer_name) or file.startswith(v_layer_name + '1'):
                    try:
                        remove(path.join(test_dir, file))
                    except:
                        print('\tTest layer could not be deleted.')
Beispiel #13
0
    def test_create_temporary_layer(self):

        layer_name = layer_type = ''
        self.assertIsNone(
            layer_interaction.create_temporary_layer(layer_name, layer_type),
            'An error occured when trying to create a layer with an invalid type'
        )

        layer_name = layer_type = None
        self.assertIsNone(
            layer_interaction.create_temporary_layer(layer_name, layer_type),
            'An error occured when trying to create a layer with an invalid type'
        )

        layer_name = layer_interaction.biuniquify_layer_name('MyLayer')
        layer_type = 'Shapefile'
        crs_name = ''
        layer = layer_interaction.create_temporary_layer(
            layer_name, layer_type, crs_name)
        self.assertIsInstance(
            layer, QgsVectorLayer,
            'An error occured when trying to create a layer')
        self.assertEqual(
            layer.name(), layer_name,
            'An error occured when trying to create a layer: The layers name should be '
            + layer_name)
        self.assertEqual(
            layer.type(), 0,
            'An error occured when trying to create a layer. The layer type should be 0 (VectorLayer).'
        )
        self.assertEqual(layer.crs().toProj4(), '')

        crs_name = 'Ejkajwdiojkl'
        layer = layer_interaction.create_temporary_layer(
            layer_name, layer_type, crs_name)
        self.assertIsInstance(
            layer, QgsVectorLayer,
            'An error occured when trying to create a layer with an invalid crs.'
        )
        self.assertEqual(layer.name(), layer_name)
        self.assertEqual(layer.type(), 0)
        self.assertEqual(layer.crs().toProj4(), '')
    def test_hide_or_remove_layer(self):

        iface = self.iface

        reg = QgsMapLayerRegistry.instance()
        v1_name = layer_interaction.biuniquify_layer_name('layer1')

        reg.addMapLayer(QgsVectorLayer('Polygon?crs=EPSG:3857', v1_name, 'memory', False))
        self.layer_list.append(v1_name)
        self.assertEqual(reg.mapLayersByName(v1_name)[0].name(), v1_name, 'Layer was not added.')

        layer_interaction.unhide_or_remove_layer(v1_name, 'hide', iface)
        v1_layer = layer_interaction.find_layer_by_name(v1_name)
        self.assertFalse(iface.legendInterface().isLayerVisible(v1_layer))

        layer_interaction.unhide_or_remove_layer(v1_name, 'unhide', iface)
        self.assertTrue(iface.legendInterface().isLayerVisible(v1_layer))

        layer_interaction.unhide_or_remove_layer(v1_name, 'remove')
        self.assertEqual(reg.mapLayersByName(v1_name), [], 'Layer was not removed.')
    def create_layer_with_features(self, name, type='Polygon'):
        v_layer_name = li.biuniquify_layer_name(name)

        if type == 'Point':
            v_layer = QgsVectorLayer('{}?crs=EPSG:3857'.format(type),
                                     v_layer_name, 'memory', False)
        else:
            v_layer = HybridLayer(type, v_layer_name)
            provider = v_layer.dataProvider()
            v_layer.startEditing()

            attributes = [
                QgsField('COLOR_RED', QVariant.String),
                QgsField('COLOR_GRE', QVariant.String),
                QgsField('COLOR_BLU', QVariant.String),
                QgsField('COLOR_ALP', QVariant.String)
            ]
            provider.addAttributes(attributes)
            v_layer.commitChanges()

        return v_layer
    def test_create_temporary_layer(self):

        layer_name = layer_type = ''
        self.assertIsNone(layer_interaction.create_temporary_layer(layer_name,layer_type), 'An error occured when trying to create a layer with an invalid type')

        layer_name = layer_type = None
        self.assertIsNone(layer_interaction.create_temporary_layer(layer_name,layer_type), 'An error occured when trying to create a layer with an invalid type')

        layer_name = layer_interaction.biuniquify_layer_name('MyLayer')
        layer_type = 'Shapefile'
        crs_name = ''
        layer = layer_interaction.create_temporary_layer(layer_name,layer_type, crs_name)
        self.assertIsInstance(layer,QgsVectorLayer, 'An error occured when trying to create a layer')
        self.assertEqual(layer.name(),layer_name, 'An error occured when trying to create a layer: The layers name should be ' + layer_name)
        self.assertEqual(layer.type(),0, 'An error occured when trying to create a layer. The layer type should be 0 (VectorLayer).')
        self.assertEqual(layer.crs().toProj4(), '')

        crs_name = 'Ejkajwdiojkl'
        layer = layer_interaction.create_temporary_layer(layer_name,layer_type, crs_name)
        self.assertIsInstance(layer,QgsVectorLayer, 'An error occured when trying to create a layer with an invalid crs.')
        self.assertEqual(layer.name(),layer_name)
        self.assertEqual(layer.type(),0)
        self.assertEqual(layer.crs().toProj4(), '')
Beispiel #17
0
    def test_hide_or_remove_layer(self):

        iface = self.iface

        reg = QgsMapLayerRegistry.instance()
        v1_name = layer_interaction.biuniquify_layer_name('layer1')

        reg.addMapLayer(
            QgsVectorLayer('Polygon?crs=EPSG:3857', v1_name, 'memory', False))
        self.layer_list.append(v1_name)
        self.assertEqual(
            reg.mapLayersByName(v1_name)[0].name(), v1_name,
            'Layer was not added.')

        layer_interaction.unhide_or_remove_layer(v1_name, 'hide', iface)
        v1_layer = layer_interaction.find_layer_by_name(v1_name)
        self.assertFalse(iface.legendInterface().isLayerVisible(v1_layer))

        layer_interaction.unhide_or_remove_layer(v1_name, 'unhide', iface)
        self.assertTrue(iface.legendInterface().isLayerVisible(v1_layer))

        layer_interaction.unhide_or_remove_layer(v1_name, 'remove')
        self.assertEqual(reg.mapLayersByName(v1_name), [],
                         'Layer was not removed.')
Beispiel #18
0
    def test_biuniquify_layer_name(self):
        layer1_name = 'asdhhkhlu18927309hgdkaghdzuz7817982_unique'
        layer2_name = 'asdhhkhlu18927309hgdkaghdzuz781712ziadgwz_unique'
        layer3_name = ''

        self.assertIsNone(
            layer_interaction.find_layer_by_name(layer1_name),
            'Default layer name (\"{}\") is not unique!'.format(layer1_name))
        self.assertIsNone(
            layer_interaction.find_layer_by_name(layer2_name),
            'Default layer name (\"{}\") is not unique!'.format(layer2_name))

        layer1 = QgsVectorLayer('Polygon?crs=EPSG:3857', layer1_name, 'memory',
                                False)
        layer2 = QgsVectorLayer('Polygon?crs=EPSG:3857', layer2_name, 'memory',
                                False)

        self.layer_list.extend([layer1_name, layer2_name])

        reg = QgsMapLayerRegistry.instance()
        reg.addMapLayer(layer1)
        reg.addMapLayer(layer2)

        self.assertEqual('', layer_interaction.biuniquify_layer_name(''))
        self.assertEqual('', layer_interaction.biuniquify_layer_name(None))

        # create a new unique name and add a layer with that name, to check the correctness of the functions while loop
        layer3_name = layer_interaction.biuniquify_layer_name(layer1_name)
        self.assertEqual(layer1_name + '0', layer3_name)

        layer3 = QgsVectorLayer('Polygon?crs=EPSG:3857', layer3_name, 'memory',
                                False)
        reg.addMapLayer(layer3)
        self.layer_list.extend([layer3_name])

        self.assertEqual(layer1_name + '1',
                         layer_interaction.biuniquify_layer_name(layer1_name))
        self.assertEqual(
            layer1_name + '2',
            layer_interaction.biuniquify_layer_name(layer1_name + str(2)))
        self.assertEqual(layer2_name + '0',
                         layer_interaction.biuniquify_layer_name(layer2_name))
Beispiel #19
0
    def test_find_layer_by_name(self):

        reg = QgsMapLayerRegistry.instance()

        v1_name = layer_interaction.biuniquify_layer_name('layer1')
        v2_name = layer_interaction.biuniquify_layer_name('layer2')
        v3_name = layer_interaction.biuniquify_layer_name('layer3')
        reg.addMapLayer(
            QgsVectorLayer('Polygon?crs=EPSG:3857', v1_name, 'memory', False))
        self.layer_list.append(v1_name)
        reg.addMapLayer(
            QgsVectorLayer('Point?crs=EPSG:3857', v2_name, 'memory', False))
        self.layer_list.append(v2_name)
        reg.addMapLayer(
            QgsVectorLayer('Point?crs=EPSG:3857', v3_name, 'memory', False))
        self.layer_list.append(v3_name)

        layer = layer_interaction.find_layer_by_name(None)
        self.assertIsNone(
            layer,
            'An error occured when trying to find a layer passing a none-type name.'
        )

        layer = layer_interaction.find_layer_by_name('')
        self.assertIsNone(
            layer,
            'An error occured when trying to find a layer passing an empty name.'
        )

        layer = layer_interaction.find_layer_by_name('awdalwd')
        self.assertIsNone(
            layer,
            'An error occured when trying to find a layer passing a non-existing name.'
        )

        layer1 = layer_interaction.find_layer_by_name(v1_name)
        layer2 = layer_interaction.find_layer_by_name(v2_name)
        layer3 = layer_interaction.find_layer_by_name(v3_name)

        layer1_exists = layer2_exists = layer3_exists = False

        for key, layer_value in reg.mapLayers().iteritems():
            if layer_value == layer1:
                layer1_exists = True
            elif layer_value == layer2:
                layer2_exists = True
            elif layer_value == layer3:
                layer3_exists = True

        self.assertTrue(
            layer1_exists,
            'An error occured when trying to find the previously added layer '
            + layer1.name() + '.')
        self.assertTrue(
            layer2_exists,
            'An error occured when trying to find the previously added layer '
            + layer2.name() + '.')
        self.assertTrue(
            layer3_exists,
            'An error occured when trying to find the previously added layer '
            + layer3.name() + '.')
    def test_if_parameter_info_is_added_to_a_layer(self):
        # create a temporary layer
        v_layer_name = layer_interaction.biuniquify_layer_name('my_test_layer')
        v_layer = QgsVectorLayer('Point?crs=EPSG:3857', v_layer_name, 'memory', False)

        provider = v_layer.dataProvider()
        v_layer.startEditing()

        attributes = [QgsField('00Test_no_R', QVariant.Double),
                      QgsField('00Test_no_G', QVariant.Double),
                      QgsField('00Test_no_B', QVariant.Double),
                      QgsField('00Test_no_a', QVariant.Double),
                      QgsField('01Testyl_R', QVariant.Double),
                      QgsField('01Testyl_G', QVariant.Double),
                      QgsField('01Testyl_B', QVariant.Double),
                      QgsField('01Testyl_a', QVariant.Double),
                      QgsField('02Test_no_R', QVariant.Double),
                      QgsField('02Test_no_G', QVariant.Double),
                      QgsField('02Test_no_B', QVariant.Double),
                      QgsField('02Test_no_a', QVariant.Double)]

        provider.addAttributes(attributes)
        name_to_index = provider.fieldNameMap()
        r_index = name_to_index['01Testyl_R']
        g_index = name_to_index['01Testyl_G']
        b_index = name_to_index['01Testyl_B']
        a_index = name_to_index['01Testyl_a']

        # Add features (color-values) to provider
        feature1 = QgsFeature()
        feature1.setAttributes([0, 0, 0, 0, 0, 0.0, 255.0, 255, 0, 0, 0, 0])
        feature2 = QgsFeature()
        feature2.setAttributes([0, 0, 0, 0, 170, 12, 17, 36, 0, 0, 0, 0])
        feature3 = QgsFeature()
        feature3.setAttributes([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
        provider.addFeatures([feature1, feature2, feature3])

        v_layer.commitChanges()
        # create color values which shall be added
        color_dict = {'RGBa(0, 0, 255, 255)': ('height', 0, 4),
                'RGBa(170, 12, 17, 36)': ('height', 4,8)}
        field_name_prefix = '01Testyl'
        layer_interaction.add_parameter_info_to_layer(color_dict, field_name_prefix, v_layer)

        field_names = provider.fieldNameMap()
        self.assertTrue('01Testyl_L' in field_names)
        self.assertTrue('01Testyl_H' in field_names)
        self.assertTrue('01Testyl_P' in field_names)
        self.assertTrue('01Testyl_0' not in field_names)
        self.assertTrue('01Testyl_1' not in field_names)

        for feat in provider.getFeatures():
            if feat.attribute('01Testyl_R') == 0 and feat.attribute('01Testyl_a') == 255:
                self.assertEqual(feat.attribute('01Testyl_P'), 'height')
                self.assertEqual(feat.attribute('01Testyl_L'), 0)
                self.assertEqual(feat.attribute('01Testyl_H'), 4)
            if feat.attribute('01Testyl_R') == 170 and feat.attribute('01Testyl_a') == 36:
                self.assertEqual(feat.attribute('01Testyl_P'), 'height')
                self.assertEqual(feat.attribute('01Testyl_L'), 4)
                self.assertEqual(feat.attribute('01Testyl_H'), 8)
            if feat.attribute('01Testyl_R') == 0 and feat.attribute('01Testyl_a') == 0:
                self.assertEqual(feat.attribute('01Testyl_P'), None)
                self.assertEqual(feat.attribute('01Testyl_L'), None)
                self.assertEqual(feat.attribute('01Testyl_H'), None)
Beispiel #21
0
    def test_if_parameter_info_is_added_to_a_layer(self):
        # create a temporary layer
        v_layer_name = layer_interaction.biuniquify_layer_name('my_test_layer')
        v_layer = QgsVectorLayer('Point?crs=EPSG:3857', v_layer_name, 'memory',
                                 False)

        provider = v_layer.dataProvider()
        v_layer.startEditing()

        attributes = [
            QgsField('00Test_no_R', QVariant.Double),
            QgsField('00Test_no_G', QVariant.Double),
            QgsField('00Test_no_B', QVariant.Double),
            QgsField('00Test_no_a', QVariant.Double),
            QgsField('01Testyl_R', QVariant.Double),
            QgsField('01Testyl_G', QVariant.Double),
            QgsField('01Testyl_B', QVariant.Double),
            QgsField('01Testyl_a', QVariant.Double),
            QgsField('02Test_no_R', QVariant.Double),
            QgsField('02Test_no_G', QVariant.Double),
            QgsField('02Test_no_B', QVariant.Double),
            QgsField('02Test_no_a', QVariant.Double)
        ]

        provider.addAttributes(attributes)
        name_to_index = provider.fieldNameMap()
        r_index = name_to_index['01Testyl_R']
        g_index = name_to_index['01Testyl_G']
        b_index = name_to_index['01Testyl_B']
        a_index = name_to_index['01Testyl_a']

        # Add features (color-values) to provider
        feature1 = QgsFeature()
        feature1.setAttributes([0, 0, 0, 0, 0, 0.0, 255.0, 255, 0, 0, 0, 0])
        feature2 = QgsFeature()
        feature2.setAttributes([0, 0, 0, 0, 170, 12, 17, 36, 0, 0, 0, 0])
        feature3 = QgsFeature()
        feature3.setAttributes([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
        provider.addFeatures([feature1, feature2, feature3])

        v_layer.commitChanges()
        # create color values which shall be added
        color_dict = {
            'RGBa(0, 0, 255, 255)': ('height', 0, 4),
            'RGBa(170, 12, 17, 36)': ('height', 4, 8)
        }
        field_name_prefix = '01Testyl'
        layer_interaction.add_parameter_info_to_layer(color_dict,
                                                      field_name_prefix,
                                                      v_layer)

        field_names = provider.fieldNameMap()
        self.assertTrue('01Testyl_L' in field_names)
        self.assertTrue('01Testyl_H' in field_names)
        self.assertTrue('01Testyl_P' in field_names)
        self.assertTrue('01Testyl_0' not in field_names)
        self.assertTrue('01Testyl_1' not in field_names)

        for feat in provider.getFeatures():
            if feat.attribute('01Testyl_R') == 0 and feat.attribute(
                    '01Testyl_a') == 255:
                self.assertEqual(feat.attribute('01Testyl_P'), 'height')
                self.assertEqual(feat.attribute('01Testyl_L'), 0)
                self.assertEqual(feat.attribute('01Testyl_H'), 4)
            if feat.attribute('01Testyl_R') == 170 and feat.attribute(
                    '01Testyl_a') == 36:
                self.assertEqual(feat.attribute('01Testyl_P'), 'height')
                self.assertEqual(feat.attribute('01Testyl_L'), 4)
                self.assertEqual(feat.attribute('01Testyl_H'), 8)
            if feat.attribute('01Testyl_R') == 0 and feat.attribute(
                    '01Testyl_a') == 0:
                self.assertEqual(feat.attribute('01Testyl_P'), None)
                self.assertEqual(feat.attribute('01Testyl_L'), None)
                self.assertEqual(feat.attribute('01Testyl_H'), None)
Beispiel #22
0
    def test_get_raster_layer_list(self):
        wms_url_with_parameters = self.valid_wms_url
        # use this list for proper testing...
        visibility = [True, False, True, True, True, False]
        # when debugging, use the list below instead
        # visibility = [True]

        for i, visible in enumerate(visibility):
            layer_name = layer_interaction.biuniquify_layer_name(
                'r{}_visible:{}'.format(i, visible))
            rlayer = QgsRasterLayer(wms_url_with_parameters, layer_name, 'wms')
            self.assertTrue(rlayer.isValid(),
                            layer_name.join(' is not a valid raster layer'))
            QgsMapLayerRegistry.instance().addMapLayer(rlayer)
            self.iface.legendInterface().setLayerVisible(rlayer, visible)
            self.layer_list.append(layer_name)

        # get a list of all visible wms layers
        expected_layers = {}
        actual_layers = {}
        visible_raster_layers = layer_interaction.get_raster_layer_list(
            self.iface, 'visible')
        for i, visible in enumerate(visibility):
            if visible:
                expected_layers[self.layer_list[i]] = True

        for layer in visible_raster_layers:
            if '_visible:' in layer.name():
                actual_layers[str(layer.name())] = True

        self.assertDictEqual(
            expected_layers, actual_layers,
            'The returned layers do not match the expected layers.\n\t Expected: {0}\n\t received: {1}.'
            .format(expected_layers, actual_layers))

        # get a list of all invisible wms layers
        expected_layers = {}
        actual_layers = {}
        invisible_raster_layers = layer_interaction.get_raster_layer_list(
            self.iface, 'invisible')
        for i, visible in enumerate(visibility):
            if not visible:
                expected_layers[self.layer_list[i]] = False

        for layer in invisible_raster_layers:
            if '_visible:' in layer.name():
                actual_layers[str(
                    layer.name())] = True if layer.name().endswith(
                        'True') else False

        self.assertDictEqual(
            expected_layers, actual_layers,
            'The returned layers do not match the expected layers.\n\t Expected: {0}\n\t received: {1}.'
            .format(expected_layers, actual_layers))

        # get a list of wms layers
        expected_layers = {}
        actual_layers = {}
        invisible_raster_layers = layer_interaction.get_raster_layer_list(
            self.iface, 'all')
        for i, visible in enumerate(visibility):
            expected_layers[self.layer_list[i]] = visible

        for layer in invisible_raster_layers:
            if '_visible:' in layer.name():
                actual_layers[str(
                    layer.name())] = True if layer.name().endswith(
                        'True') else False

        self.assertDictEqual(
            expected_layers, actual_layers,
            'The returned layers do not match the expected layers.\n\t Expected: {0}\n\t received: {1}.'
            .format(expected_layers, actual_layers))