def test_joined_layers_conversion(self): v1 = QgsVectorLayer("Point?field=id:integer&field=b_id:integer&field=c_id:integer&field=name:string", "A", "memory") self.assertEqual(v1.isValid(), True) v2 = QgsVectorLayer("Point?field=id:integer&field=bname:string&field=bfield:integer", "B", "memory") self.assertEqual(v2.isValid(), True) v3 = QgsVectorLayer("Point?field=id:integer&field=cname:string", "C", "memory") self.assertEqual(v3.isValid(), True) QgsProject.instance().addMapLayers([v1, v2, v3]) joinInfo = QgsVectorJoinInfo() joinInfo.targetFieldName = "b_id" joinInfo.joinLayerId = v2.id() joinInfo.joinFieldName = "id" #joinInfo.prefix = "B_"; v1.addJoin(joinInfo) self.assertEqual(len(v1.fields()), 6) df = QgsVirtualLayerDefinitionUtils.fromJoinedLayer(v1) self.assertEqual(df.query(), 'SELECT t.rowid AS uid, t.id, t.b_id, t.c_id, t.name, j1.bname AS B_bname, j1.bfield AS B_bfield FROM {} AS t LEFT JOIN {} AS j1 ON t."b_id"=j1."id"'.format(v1.id(), v2.id())) # with a field subset v1.removeJoin(v2.id()) joinInfo.setJoinFieldNamesSubset(["bname"]) v1.addJoin(joinInfo) self.assertEqual(len(v1.fields()), 5) df = QgsVirtualLayerDefinitionUtils.fromJoinedLayer(v1) self.assertEqual(df.query(), 'SELECT t.rowid AS uid, t.id, t.b_id, t.c_id, t.name, j1.bname AS B_bname FROM {} AS t LEFT JOIN {} AS j1 ON t."b_id"=j1."id"'.format(v1.id(), v2.id())) joinInfo.setJoinFieldNamesSubset(None) # add a table prefix to the join v1.removeJoin(v2.id()) joinInfo.prefix = "BB_" v1.addJoin(joinInfo) self.assertEqual(len(v1.fields()), 6) df = QgsVirtualLayerDefinitionUtils.fromJoinedLayer(v1) self.assertEqual(df.query(), 'SELECT t.rowid AS uid, t.id, t.b_id, t.c_id, t.name, j1.bname AS BB_bname, j1.bfield AS BB_bfield FROM {} AS t LEFT JOIN {} AS j1 ON t."b_id"=j1."id"'.format(v1.id(), v2.id())) joinInfo.prefix = "" v1.removeJoin(v2.id()) v1.addJoin(joinInfo) # add another join joinInfo2 = QgsVectorJoinInfo() joinInfo2.targetFieldName = "c_id" joinInfo2.joinLayerId = v3.id() joinInfo2.joinFieldName = "id" v1.addJoin(joinInfo2) self.assertEqual(len(v1.fields()), 7) df = QgsVirtualLayerDefinitionUtils.fromJoinedLayer(v1) self.assertEqual(df.query(), ('SELECT t.rowid AS uid, t.id, t.b_id, t.c_id, t.name, j1.bname AS B_bname, j1.bfield AS B_bfield, j2.cname AS C_cname FROM {} AS t ' + 'LEFT JOIN {} AS j1 ON t."b_id"=j1."id" ' + 'LEFT JOIN {} AS j2 ON t."c_id"=j2."id"').format(v1.id(), v2.id(), v3.id())) QgsProject.instance().removeMapLayers([v1.id(), v2.id(), v3.id()])
def test_joined_layers_conversion(self): v1 = QgsVectorLayer("Point?field=id:integer&field=b_id:integer&field=c_id:integer&field=name:string", "A", "memory") self.assertEqual(v1.isValid(), True) v2 = QgsVectorLayer("Point?field=id:integer&field=bname:string&field=bfield:integer", "B", "memory") self.assertEqual(v2.isValid(), True) v3 = QgsVectorLayer("Point?field=id:integer&field=cname:string", "C", "memory") self.assertEqual(v3.isValid(), True) QgsMapLayerRegistry.instance().addMapLayers([v1, v2, v3]) joinInfo = QgsVectorJoinInfo() joinInfo.targetFieldName = "b_id" joinInfo.joinLayerId = v2.id() joinInfo.joinFieldName = "id" #joinInfo.prefix = "B_"; v1.addJoin(joinInfo) self.assertEqual(len(v1.fields()), 6) df = QgsVirtualLayerDefinitionUtils.fromJoinedLayer(v1) self.assertEqual(df.query(), 'SELECT t.rowid AS uid, t.id, t.b_id, t.c_id, t.name, j1.bname AS B_bname, j1.bfield AS B_bfield FROM {} AS t LEFT JOIN {} AS j1 ON t."b_id"=j1."id"'.format(v1.id(), v2.id())) # with a field subset v1.removeJoin(v2.id()) joinInfo.setJoinFieldNamesSubset(["bname"]) v1.addJoin(joinInfo) self.assertEqual(len(v1.fields()), 5) df = QgsVirtualLayerDefinitionUtils.fromJoinedLayer(v1) self.assertEqual(df.query(), 'SELECT t.rowid AS uid, t.id, t.b_id, t.c_id, t.name, j1.bname AS B_bname FROM {} AS t LEFT JOIN {} AS j1 ON t."b_id"=j1."id"'.format(v1.id(), v2.id())) joinInfo.setJoinFieldNamesSubset(None) # add a table prefix to the join v1.removeJoin(v2.id()) joinInfo.prefix = "BB_" v1.addJoin(joinInfo) self.assertEqual(len(v1.fields()), 6) df = QgsVirtualLayerDefinitionUtils.fromJoinedLayer(v1) self.assertEqual(df.query(), 'SELECT t.rowid AS uid, t.id, t.b_id, t.c_id, t.name, j1.bname AS BB_bname, j1.bfield AS BB_bfield FROM {} AS t LEFT JOIN {} AS j1 ON t."b_id"=j1."id"'.format(v1.id(), v2.id())) joinInfo.prefix = "" v1.removeJoin(v2.id()) v1.addJoin(joinInfo) # add another join joinInfo2 = QgsVectorJoinInfo() joinInfo2.targetFieldName = "c_id" joinInfo2.joinLayerId = v3.id() joinInfo2.joinFieldName = "id" v1.addJoin(joinInfo2) self.assertEqual(len(v1.fields()), 7) df = QgsVirtualLayerDefinitionUtils.fromJoinedLayer(v1) self.assertEqual(df.query(), ('SELECT t.rowid AS uid, t.id, t.b_id, t.c_id, t.name, j1.bname AS B_bname, j1.bfield AS B_bfield, j2.cname AS C_cname FROM {} AS t ' + 'LEFT JOIN {} AS j1 ON t."b_id"=j1."id" ' + 'LEFT JOIN {} AS j2 ON t."c_id"=j2."id"').format(v1.id(), v2.id(), v3.id())) QgsMapLayerRegistry.instance().removeMapLayers([v1.id(), v2.id(), v3.id()])
def test_join(self): joinLayer = createJoinLayer() joinLayer2 = createJoinLayer() QgsMapLayerRegistry.instance().addMapLayers([joinLayer, joinLayer2]) layer = createLayerWithOnePoint() join = QgsVectorJoinInfo() join.targetFieldName = "fldint" join.joinLayerId = joinLayer.id() join.joinFieldName = "y" join.memoryCache = True layer.addJoin(join) join2 = QgsVectorJoinInfo() join2.targetFieldName = "fldint" join2.joinLayerId = joinLayer2.id() join2.joinFieldName = "y" join2.memoryCache = True join2.prefix = "custom-prefix_" layer.addJoin(join2) flds = layer.pendingFields() assert len(flds) == 6 assert flds[2].name() == "joinlayer_x" assert flds[3].name() == "joinlayer_z" assert flds[4].name() == "custom-prefix_x" assert flds[5].name() == "custom-prefix_z" assert flds.fieldOrigin(0) == QgsFields.OriginProvider assert flds.fieldOrigin(2) == QgsFields.OriginJoin assert flds.fieldOrigin(3) == QgsFields.OriginJoin assert flds.fieldOriginIndex(0) == 0 assert flds.fieldOriginIndex(2) == 0 assert flds.fieldOriginIndex(3) == 2 f = QgsFeature() fi = layer.getFeatures() assert fi.nextFeature(f) == True attrs = f.attributes() assert len(attrs) == 6 assert attrs[0] == "test" assert attrs[1] == 123 assert attrs[2] == "foo" assert attrs[3] == 321 assert fi.nextFeature(f) == False f2 = layer.getFeatures(QgsFeatureRequest(f.id())).next() assert len(f2.attributes()) == 6 assert f2[2] == "foo" assert f2[3] == 321
def test_join(self): joinLayer = createJoinLayer() joinLayer2 = createJoinLayer() QgsMapLayerRegistry.instance().addMapLayers([joinLayer, joinLayer2]) layer = createLayerWithOnePoint() join = QgsVectorJoinInfo() join.targetFieldName = "fldint" join.joinLayerId = joinLayer.id() join.joinFieldName = "y" join.memoryCache = True layer.addJoin(join) join2 = QgsVectorJoinInfo() join2.targetFieldName = "fldint" join2.joinLayerId = joinLayer2.id() join2.joinFieldName = "y" join2.memoryCache = True join2.prefix = "custom-prefix_" layer.addJoin(join2) flds = layer.pendingFields() self.assertEquals(len(flds), 6) self.assertEquals(flds[2].name(), "joinlayer_x") self.assertEquals(flds[3].name(), "joinlayer_z") self.assertEquals(flds[4].name(), "custom-prefix_x") self.assertEquals(flds[5].name(), "custom-prefix_z") self.assertEquals(flds.fieldOrigin(0), QgsFields.OriginProvider) self.assertEquals(flds.fieldOrigin(2), QgsFields.OriginJoin) self.assertEquals(flds.fieldOrigin(3), QgsFields.OriginJoin) self.assertEquals(flds.fieldOriginIndex(0), 0) self.assertEquals(flds.fieldOriginIndex(2), 0) self.assertEquals(flds.fieldOriginIndex(3), 2) f = QgsFeature() fi = layer.getFeatures() self.assertTrue(fi.nextFeature(f)) attrs = f.attributes() self.assertEquals(len(attrs), 6) self.assertEquals(attrs[0], "test") self.assertEquals(attrs[1], 123) self.assertEquals(attrs[2], "foo") self.assertEquals(attrs[3], 321) self.assertFalse(fi.nextFeature(f)) f2 = layer.getFeatures(QgsFeatureRequest(f.id())).next() self.assertEquals(len(f2.attributes()), 6) self.assertEquals(f2[2], "foo") self.assertEquals(f2[3], 321)
def test_join(self): joinLayer = createJoinLayer() joinLayer2 = createJoinLayer() QgsMapLayerRegistry.instance().addMapLayers([joinLayer, joinLayer2]) layer = createLayerWithOnePoint() join = QgsVectorJoinInfo() join.targetFieldName = "fldint" join.joinLayerId = joinLayer.id() join.joinFieldName = "y" join.memoryCache = True layer.addJoin(join) join2 = QgsVectorJoinInfo() join2.targetFieldName = "fldint" join2.joinLayerId = joinLayer2.id() join2.joinFieldName = "y" join2.memoryCache = True join2.prefix = "custom-prefix_" layer.addJoin(join2) flds = layer.pendingFields() assert len(flds) == 6 assert flds[2].name() == "joinlayer_x" assert flds[3].name() == "joinlayer_z" assert flds[4].name() == "custom-prefix_x" assert flds[5].name() == "custom-prefix_z" assert flds.fieldOrigin(0) == QgsFields.OriginProvider assert flds.fieldOrigin(2) == QgsFields.OriginJoin assert flds.fieldOrigin(3) == QgsFields.OriginJoin assert flds.fieldOriginIndex(0) == 0 assert flds.fieldOriginIndex(2) == 0 assert flds.fieldOriginIndex(3) == 2 f = QgsFeature() fi = layer.getFeatures() assert fi.nextFeature(f) attrs = f.attributes() assert len(attrs) == 6 assert attrs[0] == "test" assert attrs[1] == 123 assert attrs[2] == "foo" assert attrs[3] == 321 assert not fi.nextFeature(f) f2 = layer.getFeatures(QgsFeatureRequest(f.id())).next() assert len(f2.attributes()) == 6 assert f2[2] == "foo" assert f2[3] == 321
def test_join(self): joinLayer = createJoinLayer() joinLayer2 = createJoinLayer() QgsMapLayerRegistry.instance().addMapLayers([joinLayer, joinLayer2]) layer = createLayerWithOnePoint() join = QgsVectorJoinInfo() join.targetFieldName = "fldint" join.joinLayerId = joinLayer.id() join.joinFieldName = "y" join.memoryCache = True layer.addJoin(join) join2 = QgsVectorJoinInfo() join2.targetFieldName = "fldint" join2.joinLayerId = joinLayer2.id() join2.joinFieldName = "y" join2.memoryCache = True join2.prefix = "custom-prefix_" layer.addJoin(join2) flds = layer.pendingFields() self.assertEquals(len(flds), 6) self.assertEquals(flds[2].name(), "joinlayer_x") self.assertEquals(flds[3].name(), "joinlayer_z") self.assertEquals(flds[4].name(), "custom-prefix_x") self.assertEquals(flds[5].name(), "custom-prefix_z") self.assertEquals(flds.fieldOrigin(0), QgsFields.OriginProvider) self.assertEquals(flds.fieldOrigin(2), QgsFields.OriginJoin) self.assertEquals(flds.fieldOrigin(3), QgsFields.OriginJoin) self.assertEquals(flds.fieldOriginIndex(0), 0) self.assertEquals(flds.fieldOriginIndex(2), 0) self.assertEquals(flds.fieldOriginIndex(3), 2) f = QgsFeature() fi = layer.getFeatures() self.assertTrue(fi.nextFeature(f)) attrs = f.attributes() self.assertEquals(len(attrs), 6) self.assertEquals(attrs[0], "test") self.assertEquals(attrs[1], 123) self.assertEquals(attrs[2], "foo") self.assertEquals(attrs[3], 321) self.assertFalse(fi.nextFeature(f)) f2 = next(layer.getFeatures(QgsFeatureRequest(f.id()))) self.assertEquals(len(f2.attributes()), 6) self.assertEquals(f2[2], "foo") self.assertEquals(f2[3], 321)
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 = QgsVectorJoinInfo() join.joinLayerId = fk_layer.id() join.joinFieldName = 'id' join.setJoinFieldNamesSubset([fk_field]) join.targetFieldName = layer_field join.memoryCache = True join.prefix = u'{} '.format(column_header) layer.addJoin(join)
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 = QgsVectorJoinInfo() join.joinLayerId = fk_layer.id() join.joinFieldName = 'id' join.setJoinFieldNamesSubset([fk_field]) join.targetFieldName = layer_field join.memoryCache = True join.prefix = u'{} '.format(column_header) layer.addJoin(join)
def run(self): project_id = self.settings.value("project/id") epsg = self.settings.value("project/epsg") locale = QSettings().value('locale/userLocale')[ 0:2] # this is for multilingual legends # If locale is different to frence or italian, german will be used. # Otherwise we get into troubles with the legends, e.g. locale = "en" # but # there is no english legend (qml file). if locale == "fr": pass elif locale == "it": pass else: locale = "de" if not project_id: self.message_bar.pushCritical("Error", _translate("VeriSO_V+D_FP1", "project_id not set", None)) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_FP1", "FixpunkteKategorie1", None) group += " (" + str(project_id) + ")" # Lagefixpunkte 1 layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP1", "LFP1 Nachführung", None), "featuretype": "fixpunktekatgrie1_lfp1nachfuehrung", "geom": "perimeter", "key": "ogc_fid", "sql": "", "readonly": True, "group": group } # Visibility and if legend and/or groupd should be collapsed can # be set with parameters in the self.layer_loader.load() # method: # load(layer, visibility=True, collapsed_legend=False, # collapsed_group=False) vlayer_lfp1_nf = self.layer_loader.load(layer, False, True) layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP1", "LFP1", None), "featuretype": "fixpunktekatgrie1_lfp1", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, "style": "fixpunkte/lfp2.qml" } vlayer_lfp1 = self.layer_loader.load(layer) # Join two layers (lfp1 and lfp1nachfuehrung) lfp1_field = "entstehung" lfp1_nf_field = "ogc_fid" join_obj = QgsVectorJoinInfo() join_obj.joinLayerId = vlayer_lfp1_nf.id() join_obj.joinFieldName = lfp1_nf_field join_obj.targetFieldName = lfp1_field join_obj.memoryCache = True join_obj.prefix = "lfp1_nf_" vlayer_lfp1.addJoin(join_obj) # This is how WMS layer work. layer = { "type": "wms", "title": _translate("VeriSO_V+D_FP1", "LFP1 Schweiz (WMS)", None), "url": "http://wms.geo.admin.ch/", "layers": "ch.swisstopo.fixpunkte-lfp1", "format": "image/png", "crs": "EPSG:" + str(epsg), "group": group } vlayer = self.layer_loader.load(layer, False, True) # Höhenfixpunkte 1 layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP1", "HFP1 Nachführung", None), "featuretype": "fixpunktekatgrie1_hfp1nachfuehrung", "geom": "perimeter", "key": "ogc_fid", "sql": "", "readonly": True, "group": group } vlayer_hfp1_nf = self.layer_loader.load(layer, False, True) layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP1", "HFP1", None), "featuretype": "fixpunktekatgrie1_hfp1", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, "style": "fixpunkte/hfp2.qml" } vlayer_hfp1 = self.layer_loader.load(layer) # Join two layers (hfp1 and hfp1nachfuehrung) hfp1_field = "entstehung" hfp1_nf_field = "ogc_fid" join_obj = QgsVectorJoinInfo() join_obj.joinLayerId = vlayer_hfp1_nf.id() join_obj.joinFieldName = hfp1_nf_field join_obj.targetFieldName = hfp1_field join_obj.memoryCache = True join_obj.prefix = "hfp1_nf_" vlayer_hfp1.addJoin(join_obj) layer = { "type": "wms", "title": _translate("VeriSO_V+D_FP1", "HFP1 Schweiz (WMS)", None), "url": "http://wms.geo.admin.ch/", "layers": "ch.swisstopo.fixpunkte-hfp1", "format": "image/png", "crs": "EPSG:" + str(epsg), "group": group } vlayer = self.layer_loader.load(layer, False, True) # Business as usual: Gemeindegrenzen layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP1", "Gemeindegrenze", None), "featuretype": "gemeindegrenzen_gemeindegrenze", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, "style": "global_qml/gemeindegrenze/gemgre_strichliert.qml" } gemgrelayer = self.layer_loader.load(layer) # Change map extent. # Bug (?) in QGIS: http://hub.qgis.org/issues/10980 # Closed for the lack of feedback. Upsi... # Still a problem? (sz / 2015-04-12) if gemgrelayer: rect = gemgrelayer.extent() rect.scale(5) self.iface.mapCanvas().setExtent(rect) self.iface.mapCanvas().refresh() # Sometimes it does make much more sense # to zoom to maximal extent: # self.iface.mapCanvas().zoomToFullExtent() except Exception: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.message_bar.pushMessage("Error", str( traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=0) QApplication.restoreOverrideCursor()
def run(self): project_id = self.settings.value("project/id") epsg = self.settings.value("project/epsg") self.project_dir = self.settings.value("project/projectdir") self.project_id = self.settings.value("project/id") locale = QSettings().value('locale/userLocale')[ 0:2] # this is for multilingual legends # If locale is different to frence or italian, german will be used. # Otherwise we get into troubles with the legends, e.g. locale = "en" # but # there is no english legend (qml file). if locale == "fr": pass elif locale == "it": pass else: locale = "de" if not project_id: self.message_bar.pushCritical( "Error", _translate("VeriSO_V+D_FP3", "project_id not set", None)) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_FP3", "FixpunkteKategorie3", None) group += " (" + str(project_id) + ")" layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP3", "Toleranzstufen", None), "featuretype": "tseinteilung_toleranzstufe", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, "style": "tseinteilung/toleranzstufe_" + locale + ".qml" } # Visibility and if legend and/or groupd should be collapsed can # be set with parameters in the self.layer_loader.load() # method: # load(layer, visibility=True, collapsed_legend=False, # collapsed_group=False) vlayer = self.layer_loader.load(layer) layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP3", "LFP3 Nachführung", None), "featuretype": "fixpunktekatgrie3_lfp3nachfuehrung", "geom": "perimeter", "key": "ogc_fid", "sql": "", "readonly": True, "group": group } vlayer_lfp3_nf = self.layer_loader.load(layer, False, True) layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP3", "LFP3", None), "featuretype": "fixpunktekatgrie3_lfp3", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, "style": "fixpunkte/lfp3_" + locale + ".qml" } vlayer_lfp3 = self.layer_loader.load(layer) # Join two layers (lfp3 and lfp3nachfuehrung) lfp3_field = "entstehung" lfp3_nf_field = "ogc_fid" join_obj = QgsVectorJoinInfo() join_obj.joinLayerId = vlayer_lfp3_nf.id() join_obj.joinFieldName = lfp3_nf_field join_obj.targetFieldName = lfp3_field join_obj.memoryCache = True join_obj.prefix = "lfp3_nf_" vlayer_lfp3.addJoin(join_obj) layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP3", "LFP3 ausserhalb " "Gemeinde", None), "featuretype": "t_lfp3_ausserhalb_gemeinde", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, "style": "fixpunkte/lfp3ausserhalb.qml" } vlayer = self.layer_loader.load(layer) layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP3", "LFP3 pro TS", None), "featuretype": "t_lfp3_pro_ts", "key": "ogc_fid", "sql": "", "readonly": True, "group": group } vlayer_lfp3_pro_ts = self.layer_loader.load(layer) layer = { "type": "postgres", "title": _translate("VeriSO_V+D_FP3", "Gemeindegrenze", None), "featuretype": "gemeindegrenzen_gemeindegrenze", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, "style": "global_qml/gemeindegrenze/gemgre_strichliert.qml" } gemgrelayer = self.layer_loader.load(layer) # Change map extent. # Bug (?) in QGIS: http://hub.qgis.org/issues/10980 # Closed for the lack of feedback. Upsi... # Still a problem? (sz / 2015-04-12) # sz / 2015-04-20: # Aaaah: still a problem. Some really strange combination of # checked/unchecked-order-of-layers-thing? # If wms is addes after gemgre then is scales (rect.scale(5))?! # So it seems that the last added layer HAS TO BE unchecked? # No not exactly. Only if a wms is added before? # rect.scale(5) has no effect? # I reopened the ticket / 2015-04-20 / sz if gemgrelayer: rect = gemgrelayer.extent() rect.scale(5) self.iface.mapCanvas().setExtent(rect) self.iface.mapCanvas().refresh() # Sometimes it does make much more sense # to zoom to maximal extent: # self.iface.mapCanvas().zoomToFullExtent() self.export_to_excel(vlayer_lfp3_pro_ts) except Exception: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.message_bar.pushMessage( "Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=0) QApplication.restoreOverrideCursor()