def __init__(self, iface): super(ComplexCheck, self).__init__(iface) self.iface = iface self.message_bar = self.iface.messageBar() self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) self.settings = QSettings("CatAIS", "VeriSO")
def do_show_single_topic_layer(self, layer): """Loads an interlis table from the database into the map canvas. Uses an universal 'load layer' method. """ layer["type"] = str(self.provider) layer_loader = LoadLayer(self.iface) layer_loader.load(layer)
def __init__(self, iface): QObject.__init__(self) self.iface = iface self.message_bar = self.iface.messageBar() self.canvas = self.iface.mapCanvas() self.settings = QSettings("CatAIS", "VeriSO") self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface)
def do_show_baselayer(self, layer): """Load a baselayer into map canvas. Uses an universal 'load layer' method. """ QApplication.setOverrideCursor(Qt.WaitCursor) try: layer_loader = LoadLayer(self.iface) layer_loader.load(layer, True, True) # Do not show legend for baselayers -> collapse legend. except Exception, e: QApplication.restoreOverrideCursor() QgsMessageLog.logMessage(str(e), "VeriSO_V+D", QgsMessageLog.CRITICAL) return
def do_show_baselayer(self, layer): """Load a baselayer into map canvas. Uses an universal 'load layer' method. """ QApplication.setOverrideCursor(Qt.WaitCursor) try: layer_loader = LoadLayer(self.iface) layer_loader.load(layer, visible=True, collapsed_legend=True) except Exception as e: QApplication.restoreOverrideCursor() QgsMessageLog.logMessage(str(e), self.module_name, Qgis.Critical) return QApplication.restoreOverrideCursor()
def do_show_baselayer(self, layer): """Load a baselayer into map canvas. Uses an universal 'load layer' method. """ QApplication.setOverrideCursor(Qt.WaitCursor) try: layer_loader = LoadLayer(self.iface) layer_loader.load( layer, True, True) # Do not show legend for baselayers -> collapse legend. except Exception, e: QApplication.restoreOverrideCursor() QgsMessageLog.logMessage(str(e), "VeriSO_V+D", QgsMessageLog.CRITICAL) return
def __init__(self, iface, module, tr_tag): # TODO remove debugging trace # import pydevd # pydevd.settrace('localhost', port=53100, stdoutToServer=True, stderrToServer=True) QObject.__init__(self) self.iface = iface self.message_bar = self.iface.messageBar() self.canvas = self.iface.mapCanvas() self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) self.settings = QSettings("CatAIS", "VeriSO") self.project_id = None self.epsg = None self.tr_tag = tr_tag # "VeriSO_V+D_Defects" or "VeriSO_EE_Defects"
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS","VeriSO") 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 == "fr": pass elif locale == "it": pass else: locale = "de" if not project_id: self.iface.messageBar().pushMessage("Error", _translate("VeriSO_V+D_BB", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_BB", "Bodenbedeckung - Checklayer", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "BB.Strassennetz", None) layer["featuretype"] = "bodenbedeckung_boflaeche" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "bodenbedeckung/boflaeche_strassennetz.qml" vlayer = self.layer_loader.load(layer, True, True) except Exception: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.iface.messageBar().pushMessage("Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor()
class LoadDefects(QObject): def __init__(self, iface, module, tr_tag): # TODO remove debugging trace # import pydevd # pydevd.settrace('localhost', port=53100, stdoutToServer=True, stderrToServer=True) QObject.__init__(self) self.iface = iface self.message_bar = self.iface.messageBar() self.canvas = self.iface.mapCanvas() self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) self.settings = QSettings("CatAIS", "VeriSO") self.project_id = None self.epsg = None self.tr_tag = tr_tag # "VeriSO_V+D_Defects" or "VeriSO_EE_Defects" def run(self): try: self.project_id = self.settings.value("project/id") self.epsg = self.settings.value("project/epsg") group = tr(u"Mängel", self.tr_tag, None) group += " (" + str(self.project_id) + ")" layer = { "type": "postgres", "title": tr(u"Mängelliste (Punkte)", self.tr_tag, None), "featuretype": "t_maengel", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": group, "style": "global_qml/maengel/maengel_punkt.qml" } vlayer = self.layer_loader.load(layer) if vlayer: vlayer.setEditorLayout(QgsVectorLayer.GeneratedLayout) ogc_fid_idx = vlayer.fieldNameIndex("ogc_fid") topic_idx = vlayer.fieldNameIndex("topic") bemerkung_idx = vlayer.fieldNameIndex("bemerkung") datum_idx = vlayer.fieldNameIndex("datum") vlayer.addAttributeAlias(topic_idx, tr("Topic:", self.tr_tag, None)) vlayer.addAttributeAlias(bemerkung_idx, tr("bemekung:", self.tr_tag, None)) vlayer.setEditorWidgetV2(ogc_fid_idx, "Hidden") vlayer.setEditorWidgetV2(topic_idx, "Enumeration") vlayer.setEditorWidgetV2(bemerkung_idx, "TextEdit") vlayer.setEditorWidgetV2Config( bemerkung_idx, {"IsMultiline": True }) # See gui/editorwidgets/qgstexteditwrapper.cpp for all # the parameters. vlayer.setEditorWidgetV2(datum_idx, "Hidden") layer = { "type": "postgres", "title": tr(u"Mängelliste (Linien)", self.tr_tag, None), "featuretype": "t_maengel_linie", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": group, "style": "global_qml/maengel/maengel_linie.qml" } vlayer = self.layer_loader.load(layer) if vlayer: vlayer.setEditorLayout(QgsVectorLayer.GeneratedLayout) ogc_fid_idx = vlayer.fieldNameIndex("ogc_fid") topic_idx = vlayer.fieldNameIndex("topic") bemerkung_idx = vlayer.fieldNameIndex("bemerkung") datum_idx = vlayer.fieldNameIndex("datum") vlayer.addAttributeAlias(topic_idx, tr("Topic:", self.tr_tag, None)) vlayer.addAttributeAlias(bemerkung_idx, tr("Bemerkung:", self.tr_tag, None)) vlayer.setEditorWidgetV2(ogc_fid_idx, "Hidden") vlayer.setEditorWidgetV2(topic_idx, "Enumeration") vlayer.setEditorWidgetV2(bemerkung_idx, "TextEdit") vlayer.setEditorWidgetV2Config( bemerkung_idx, {"IsMultiline": True }) # See gui/editorwidgets/qgstexteditwrapper.cpp for all # the parameters. vlayer.setEditorWidgetV2(datum_idx, "Hidden") """layer = { "type": "postgres", "title": tr(u"Mängelliste (Polygone)", self.tr_tag, None), "featuretype": "t_maengel_polygon", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": group, "style": "global_qml/maengel/maengel_polygon.qml" } vlayer = self.layer_loader.load(layer) if vlayer: vlayer.setEditorLayout(QgsVectorLayer.GeneratedLayout) ogc_fid_idx = vlayer.fieldNameIndex("ogc_fid") topic_idx = vlayer.fieldNameIndex("topic") bemerkung_idx = vlayer.fieldNameIndex("bemerkung") datum_idx = vlayer.fieldNameIndex("datum") vlayer.addAttributeAlias(topic_idx, tr("Topic:", self.tr_tag, None)) vlayer.addAttributeAlias(bemerkung_idx, tr("Bemerkung:", self.tr_tag, None)) vlayer.setEditorWidgetV2(ogc_fid_idx, "Hidden") vlayer.setEditorWidgetV2(topic_idx, "Enumeration") vlayer.setEditorWidgetV2(bemerkung_idx, "TextEdit") vlayer.setEditorWidgetV2Config(bemerkung_idx, { "IsMultiline": True }) # See gui/editorwidgets/qgstexteditwrapper.cpp for all # the parameters. vlayer.setEditorWidgetV2(datum_idx, "Hidden")""" 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()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS","VeriSO") 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.iface.messageBar().pushMessage("Error", _translate("VeriSO_V+D_FP3", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_FP3", "FixpunkteKategorie3", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "Toleranzstufen", None) # Translate with Qt Linguist. German translation not necessary since this text will be used when language is missing. layer["featuretype"] = "tseinteilung_toleranzstufe" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["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 = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "LFP3 Nachführung", None) layer["featuretype"] = "fixpunktekategorie3_lfp3nachfuehrung" layer["geom"] = "perimeter" # If no geometry attribute is set, the layer will be loaded as geoemtryless. layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer_lfp3_nf = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "LFP3", None) layer["featuretype"] = "fixpunktekategorie3_lfp3" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["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 = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "LFP3 ausserhalb Gemeinde", None) layer["featuretype"] = "t_lfp3_ausserhalb_gemeinde" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "fixpunkte/lfp3ausserhalb.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "LFP3 pro TS", None) layer["featuretype"] = "t_lfp3_pro_ts" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer_lfp3_pro_ts = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "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.iface.messageBar().pushMessage("Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor() def export_to_excel(self, vlayer): try: import xlsxwriter except Exception, e: self.iface.messageBar().pushMessage("Error", str(e), level=QgsMessageBar.CRITICAL, duration=10) return # Create excel file. filename = QDir.convertSeparators(QDir.cleanPath(os.path.join(self.project_dir, "lfp3_pro_ts.xlsx"))) workbook = xlsxwriter.Workbook(filename) fmt_bold = workbook.add_format({'bold': True, 'font_name':'Cadastra'}) fmt_bold_border = workbook.add_format({'bold': True, 'border': 1, 'font_name':'Cadastra'}) fmt_border = workbook.add_format({'border': 1, 'font_name':'Cadastra'}) fmt_border_decimal = workbook.add_format({'border': 1, 'font_name':'Cadastra', 'num_format':'0.00'}) fmt_header = workbook.add_format({'bg_color': '#CACACA', 'border': 1, 'font_name':'Cadastra'}) fmt_italic = workbook.add_format({'italic': True, 'border': 1, 'font_name':'Cadastra'}) fmt_sum = workbook.add_format({'bold': True, 'font_color': 'blue', 'border': 1, 'font_name':'Cadastra'}) fmt_sum_decimal = workbook.add_format({'bold': True, 'font_color': 'blue', 'border': 1, 'font_name':'Cadastra', 'num_format':'0.00'}) # Create the worksheet for the points defects. worksheet = workbook.add_worksheet( _translate("VeriSO_V+D_FP3", u'LFP3 pro TS', None)) worksheet.set_paper(9) worksheet.set_portrait() # Write project name into worksheet. worksheet.write(0, 0, _translate("VeriSO_V+D_FP3", "Operat: ", None), fmt_bold) worksheet.write(0, 1, self.project_id, fmt_bold) # Write headers. worksheet.write(4, 0, _translate("VeriSO_V+D_FP3", "Toleranzstufe", None), fmt_header) worksheet.write(4, 1, _translate("VeriSO_V+D_FP3", "Fläche TS [ha]", None), fmt_header) worksheet.write(4, 2, _translate("VeriSO_V+D_FP3", "Ist-Anzahl LFP3", None), fmt_header) worksheet.write(4, 3, _translate("VeriSO_V+D_FP3", "Soll-Anzahl LFP3", None), fmt_header) worksheet.write(4, 4, _translate("VeriSO_V+D_FP3", "Ist-Soll LFP3", None), fmt_header) # Loop through features and add them to worksheet. iter = vlayer.getFeatures() j = 0 ts_idx = vlayer.fieldNameIndex("toleranzstufe") area_idx = vlayer.fieldNameIndex("flaeche") current_idx = vlayer.fieldNameIndex("ist_anzahl") target_idx = vlayer.fieldNameIndex("soll_anzahl") start_row = 5 sum_area = 0 sum_current = 0 sum_target = 0 sum_diff = 0 for feature in iter: ts = feature.attributes()[ts_idx] area = feature.attributes()[area_idx] current = feature.attributes()[current_idx] target = feature.attributes()[target_idx] worksheet.write(start_row+j, 0, ts, fmt_bold_border) worksheet.write(start_row+j, 1, area, fmt_border_decimal) worksheet.write(start_row+j, 2, current, fmt_border) worksheet.write(start_row+j, 3, target, fmt_border) worksheet.write(start_row+j, 4, (current - target), fmt_border) sum_area += area sum_current += current sum_target += target sum_diff += (current - target) j += 1 # do not forget sum/total worksheet.write(start_row+j, 0, _translate("VeriSO_V+D_FP3", "Total", None), fmt_bold_border) worksheet.write(start_row+j, 1, sum_area, fmt_sum_decimal) worksheet.write(start_row+j, 2, sum_current, fmt_sum) worksheet.write(start_row+j, 3, sum_target, fmt_sum) worksheet.write(start_row+j, 4, sum_diff, fmt_sum) # Close excel file. workbook.close()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS", "VeriSO") 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.iface.messageBar().pushMessage( "Error", _translate("VeriSO_V+D_FP1", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_FP1", "FixpunkteKategorie1", None) group += " (" + str(project_id) + ")" # Lagefixpunkte 1 layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP1", "LFP1 Nachführung", None) layer["featuretype"] = "fixpunktekategorie1_lfp1nachfuehrung" layer[ "geom"] = "perimeter" # If no geometry attribute is set, the layer will be loaded as geoemtryless. layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["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 = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP1", "LFP1", None) layer["featuretype"] = "fixpunktekategorie1_lfp1" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["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 = {} layer["type"] = "wms" layer["title"] = _translate("VeriSO_V+D_FP1", "LFP1 Schweiz (WMS)", None) layer["url"] = "http://wms.geo.admin.ch/" layer["layers"] = "ch.swisstopo.fixpunkte-lfp1" layer["format"] = "image/png" layer["crs"] = "EPSG:" + str(epsg) layer["group"] = group vlayer = self.layer_loader.load(layer, False, True) # Höhenfixpunkte 1 layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP1", "HFP1 Nachführung", None) layer["featuretype"] = "fixpunktekategorie1_hfp1nachfuehrung" layer["geom"] = "perimeter" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer_hfp1_nf = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP1", "HFP1", None) layer["featuretype"] = "fixpunktekategorie1_hfp1" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["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 = {} layer["type"] = "wms" layer["title"] = _translate("VeriSO_V+D_FP1", "HFP1 Schweiz (WMS)", None) layer["url"] = "http://wms.geo.admin.ch/" layer["layers"] = "ch.swisstopo.fixpunkte-hfp1" layer["format"] = "image/png" layer["crs"] = "EPSG:" + str(epsg) layer["group"] = group vlayer = self.layer_loader.load(layer, False, True) # Business as usual: Gemeindegrenzen layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP1", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "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.iface.messageBar().pushMessage( "Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor()
class ComplexCheck(ComplexCheckBase): names = OrderedDict() names['de'] = u'Isolierte Übrigen Gebäudeteile' names['fr'] = u'Parties isolées des bâtiments' def __init__(self, iface): super(ComplexCheck, self).__init__(iface) self.iface = iface self.message_bar = self.iface.messageBar() self.canvas = self.iface.mapCanvas() self.settings = QSettings("CatAIS", "VeriSO") self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) 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("Isolierte Uebrigen Gebaeudeteile", "project_id not set", None)) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("Veribe", "Isolierte_Uebrigen_Gebaeudeteile", None) group += " (" + str(project_id) + ")" layer = { "type": "postgres", "title": _translate("Veribe", "Isolierte Uebrigen Gebaeudeteile Flachen", None), "featuretype": "v_uebriger_gebaeudeteil_isolierte_flaeche", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, } vlayer = self.layer_loader.load(layer) layer = { "type": "postgres", "title": _translate("Veribe", "Isolierte Uebrigen Gebaeudeteile Linien", None), "featuretype": "v_uebriger_gebaeudeteil_isolierte_linien", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, } vlayer = self.layer_loader.load(layer) layer = { "type": "postgres", "title": _translate("Veribe", "Isolierte Uebrigen Gebaeudeteile Punkte", None), "featuretype": "v_uebriger_gebaeudeteil_isolierte_punkte", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, } vlayer = self.layer_loader.load(layer) # 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) 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=Qgis.Critical, duration=0) QApplication.restoreOverrideCursor()
class ComplexCheck(ComplexCheckBase): names = OrderedDict() names['de'] = u'Übersicht' names['fr'] = "Vue d'ensemble" def __init__(self, iface): super(ComplexCheck, self).__init__(iface) self.iface = iface self.message_bar = self.iface.messageBar() self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) self.settings = QSettings("CatAIS", "VeriSO") 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_EE_FP3", "project_id not set", None)) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_EE_FP3", "FixpunkteKategorie3", None) group += " (" + str(project_id) + ")" layer = { "type": "postgres", "title": _translate("VeriSO_EE_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_EE_FP3", "LFP3 Nachführung", None), "featuretype": "fixpunktekategorie3_lfp3nachfuehrung", "geom": "perimeter", "key": "ogc_fid", "sql": "", "readonly": True, "group": group } vlayer = self.layer_loader.load(layer, False, True) layer = { "type": "postgres", "title": _translate("VeriSO_EE_FP3", "LFP3", None), "featuretype": "fixpunktekategorie3_lfp3", "geom": "geometrie", "key": "ogc_fid", "sql": "", "readonly": True, "group": group, "style": "fixpunkte/lfp3_" + locale + ".qml" } vlayer = self.layer_loader.load(layer) layer = { "type": "postgres", "title": _translate("VeriSO_EE_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) # This is how WMS layer work. layer = { "type": "wms", "title": _translate("VeriSO_EE_FP3", "LFP1 + LFP2 Schweiz", None), "url": "http://wms.geo.admin.ch/", "layers": "ch.swisstopo.fixpunkte-lfp1," "ch.swisstopo.fixpunkte-lfp2", "format": "image/png", "crs": "EPSG:" + str(epsg), "group": group } vlayer = self.layer_loader.load(layer, False, True) layer = { "type": "postgres", "title": _translate("VeriSO_EE_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) 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()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS","VeriSO") project_id = self.settings.value("project/id") epsg = self.settings.value("project/epsg") locale = QSettings().value('locale/userLocale')[0:2] if not project_id: self.iface.messageBar().pushMessage("Error", _translate("VeriSO_EE_Geb_Check", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_EE_Geb_Check", "Gebaeudeadressen - Checklayer", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Check", "Spinnennetz", None) layer["featuretype"] = "t_gebaeudeadressen_spinnennetz" layer["geom"] = "line" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "gebaeudeadressen/spinnennetz_blau.qml" vlayer = self.layer_loader.load(layer, False) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Check", "Kürzeste Linie", None) layer["featuretype"] = "t_shortestline_hausnummerpos" layer["geom"] = "the_geom" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "gebaeudeadressen/shortestline_linie.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Check", "HausnummerPos", None) layer["featuretype"] = "v_gebaeudeadressen_hausnummerpos" layer["geom"] = "pos" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/shortestline_hausnummerpos.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Check", "Gebaeude > 12m2 ohne Eingang", None) layer["featuretype"] = "t_gebaeude_groesser_12m2_ohne_eingang" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/gebaeude_12m2_ohne_eingang.qml" vlayer = self.layer_loader.load(layer) except Exception, e: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.iface.messageBar().pushMessage("Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS","VeriSO") 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.iface.messageBar().pushMessage("Error", _translate("VeriSO_EE_FP3", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_EE_FP3", "FixpunkteKategorie3", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "Toleranzstufen", None) # Translate with Qt Linguist. German translation not necessary since this text will be used when language is missing. layer["featuretype"] = "tseinteilung_toleranzstufe" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["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 = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "LFP3 Nachführung", None) layer["featuretype"] = "fixpunktekategorie3_lfp3nachfuehrung" layer["geom"] = "perimeter" # If no geometry attribute is set, the layer will be loaded as geoemtryless. layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "LFP3", None) layer["featuretype"] = "fixpunktekategorie3_lfp3" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "fixpunkte/lfp3_"+locale+".qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "LFP3 ausserhalb Gemeinde", None) layer["featuretype"] = "t_lfp3_ausserhalb_gemeinde" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "fixpunkte/lfp3ausserhalb.qml" vlayer = self.layer_loader.load(layer) # This is how WMS layer work. layer = {} layer["type"] = "wms" layer["title"] = _translate("VeriSO_EE_FP3", "LFP1 + LFP2 Schweiz", None) layer["url"] = "http://wms.geo.admin.ch/" layer["layers"] = "ch.swisstopo.fixpunkte-lfp1,ch.swisstopo.fixpunkte-lfp2" layer["format"] = "image/png" layer["crs"] = "EPSG:" + str(epsg) layer["group"] = group vlayer = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "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.iface.messageBar().pushMessage("Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS","VeriSO") 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.iface.messageBar().pushMessage("Error", _translate("VeriSO_V+D_FP2", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_FP2", "FixpunkteKategorie2", None) group += " (" + str(project_id) + ")" # Lagefixpunkte 2 layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP2", "LFP2 Nachführung", None) layer["featuretype"] = "fixpunktekategorie2_lfp2nachfuehrung" layer["geom"] = "perimeter" # If no geometry attribute is set, the layer will be loaded as geoemtryless. layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["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_lfp2_nf = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP2", "LFP2", None) layer["featuretype"] = "fixpunktekategorie2_lfp2" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "fixpunkte/lfp2.qml" vlayer_lfp2 = self.layer_loader.load(layer) # Join two layers (lfp2 and lfp2nachfuehrung) lfp2_field = "entstehung" lfp2_nf_field = "ogc_fid" join_obj = QgsVectorJoinInfo() join_obj.joinLayerId = vlayer_lfp2_nf.id() join_obj.joinFieldName = lfp2_nf_field join_obj.targetFieldName = lfp2_field join_obj.memoryCache = True join_obj.prefix = "lfp2_nf_" vlayer_lfp2.addJoin(join_obj) # This is how WMS layer work. layer = {} layer["type"] = "wms" layer["title"] = _translate("VeriSO_V+D_FP2", "LFP2 Schweiz (WMS)", None) layer["url"] = "http://wms.geo.admin.ch/" layer["layers"] = "ch.swisstopo.fixpunkte-lfp2" layer["format"] = "image/png" layer["crs"] = "EPSG:" + str(epsg) layer["group"] = group vlayer = self.layer_loader.load(layer, False, True) # Höhenfixpunkte 2 layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP2", "HFP2 Nachführung", None) layer["featuretype"] = "fixpunktekategorie2_hfp2nachfuehrung" layer["geom"] = "perimeter" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer_hfp2_nf = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP2", "HFP2", None) layer["featuretype"] = "fixpunktekategorie2_hfp2" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "fixpunkte/hfp2.qml" vlayer_hfp2 = self.layer_loader.load(layer) # Join two layers (hfp2 and hfp2nachfuehrung) hfp2_field = "entstehung" hfp2_nf_field = "ogc_fid" join_obj = QgsVectorJoinInfo() join_obj.joinLayerId = vlayer_hfp2_nf.id() join_obj.joinFieldName = hfp2_nf_field join_obj.targetFieldName = hfp2_field join_obj.memoryCache = True join_obj.prefix = "hfp2_nf_" vlayer_hfp2.addJoin(join_obj) layer = {} layer["type"] = "wms" layer["title"] = _translate("VeriSO_V+D_FP2", "HFP2 Schweiz (WMS)", None) layer["url"] = "http://wms.geo.admin.ch/" layer["layers"] = "ch.swisstopo.fixpunkte-hfp2" layer["format"] = "image/png" layer["crs"] = "EPSG:" + str(epsg) layer["group"] = group vlayer = self.layer_loader.load(layer, False, True) # Business as usual: Gemeindegrenzen layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP2", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "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.iface.messageBar().pushMessage("Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS", "VeriSO") 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.iface.messageBar().pushMessage( "Error", _translate("VeriSO_V+D_FP3", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_FP3", "FixpunkteKategorie3", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate( "VeriSO_V+D_FP3", "Toleranzstufen", None ) # Translate with Qt Linguist. German translation not necessary since this text will be used when language is missing. layer["featuretype"] = "tseinteilung_toleranzstufe" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["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 = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "LFP3 Nachführung", None) layer["featuretype"] = "fixpunktekategorie3_lfp3nachfuehrung" layer[ "geom"] = "perimeter" # If no geometry attribute is set, the layer will be loaded as geoemtryless. layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer_lfp3_nf = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "LFP3", None) layer["featuretype"] = "fixpunktekategorie3_lfp3" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["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 = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "LFP3 ausserhalb Gemeinde", None) layer["featuretype"] = "t_lfp3_ausserhalb_gemeinde" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "fixpunkte/lfp3ausserhalb.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "LFP3 pro TS", None) layer["featuretype"] = "t_lfp3_pro_ts" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer_lfp3_pro_ts = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_FP3", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "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.iface.messageBar().pushMessage( "Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor() def export_to_excel(self, vlayer): try: import xlsxwriter except Exception, e: self.iface.messageBar().pushMessage("Error", str(e), level=QgsMessageBar.CRITICAL, duration=10) return # Create excel file. filename = QDir.convertSeparators( QDir.cleanPath(os.path.join(self.project_dir, "lfp3_pro_ts.xlsx"))) workbook = xlsxwriter.Workbook(filename) fmt_bold = workbook.add_format({'bold': True, 'font_name': 'Cadastra'}) fmt_bold_border = workbook.add_format({ 'bold': True, 'border': 1, 'font_name': 'Cadastra' }) fmt_border = workbook.add_format({ 'border': 1, 'font_name': 'Cadastra' }) fmt_border_decimal = workbook.add_format({ 'border': 1, 'font_name': 'Cadastra', 'num_format': '0.00' }) fmt_header = workbook.add_format({ 'bg_color': '#CACACA', 'border': 1, 'font_name': 'Cadastra' }) fmt_italic = workbook.add_format({ 'italic': True, 'border': 1, 'font_name': 'Cadastra' }) fmt_sum = workbook.add_format({ 'bold': True, 'font_color': 'blue', 'border': 1, 'font_name': 'Cadastra' }) fmt_sum_decimal = workbook.add_format({ 'bold': True, 'font_color': 'blue', 'border': 1, 'font_name': 'Cadastra', 'num_format': '0.00' }) # Create the worksheet for the points defects. worksheet = workbook.add_worksheet( _translate("VeriSO_V+D_FP3", u'LFP3 pro TS', None)) worksheet.set_paper(9) worksheet.set_portrait() # Write project name into worksheet. worksheet.write(0, 0, _translate("VeriSO_V+D_FP3", "Operat: ", None), fmt_bold) worksheet.write(0, 1, self.project_id, fmt_bold) # Write headers. worksheet.write(4, 0, _translate("VeriSO_V+D_FP3", "Toleranzstufe", None), fmt_header) worksheet.write(4, 1, _translate("VeriSO_V+D_FP3", "Fläche TS [ha]", None), fmt_header) worksheet.write(4, 2, _translate("VeriSO_V+D_FP3", "Ist-Anzahl LFP3", None), fmt_header) worksheet.write(4, 3, _translate("VeriSO_V+D_FP3", "Soll-Anzahl LFP3", None), fmt_header) worksheet.write(4, 4, _translate("VeriSO_V+D_FP3", "Ist-Soll LFP3", None), fmt_header) # Loop through features and add them to worksheet. iter = vlayer.getFeatures() j = 0 ts_idx = vlayer.fieldNameIndex("toleranzstufe") area_idx = vlayer.fieldNameIndex("flaeche") current_idx = vlayer.fieldNameIndex("ist_anzahl") target_idx = vlayer.fieldNameIndex("soll_anzahl") start_row = 5 sum_area = 0 sum_current = 0 sum_target = 0 sum_diff = 0 for feature in iter: ts = feature.attributes()[ts_idx] area = feature.attributes()[area_idx] current = feature.attributes()[current_idx] target = feature.attributes()[target_idx] worksheet.write(start_row + j, 0, ts, fmt_bold_border) worksheet.write(start_row + j, 1, area, fmt_border_decimal) worksheet.write(start_row + j, 2, current, fmt_border) worksheet.write(start_row + j, 3, target, fmt_border) worksheet.write(start_row + j, 4, (current - target), fmt_border) sum_area += area sum_current += current sum_target += target sum_diff += (current - target) j += 1 # do not forget sum/total worksheet.write(start_row + j, 0, _translate("VeriSO_V+D_FP3", "Total", None), fmt_bold_border) worksheet.write(start_row + j, 1, sum_area, fmt_sum_decimal) worksheet.write(start_row + j, 2, sum_current, fmt_sum) worksheet.write(start_row + j, 3, sum_target, fmt_sum) worksheet.write(start_row + j, 4, sum_diff, fmt_sum) # Close excel file. workbook.close()
class LoadDefects(QObject): def __init__(self, iface): self.iface = iface self.canvas = self.iface.mapCanvas() self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): try: self.settings = QSettings("CatAIS","VeriSO") self.project_id = self.settings.value("project/id") self.epsg = self.settings.value("project/epsg") group = _translate("VeriSO_V+D_Defects", "Mängel", None) group += " (" + str(self.project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_Defects", "Mängelliste (Punkte)", None) layer["featuretype"] = "t_maengel_punkt" layer["geom"] = "the_geom" layer["key"] = "ogc_fid" layer["readonly"] = False layer["sql"] = "" layer["group"] = group layer["style"] = "maengel/maengel_punkt.qml" vlayer = self.layer_loader.load(layer) if vlayer: vlayer.setEditorLayout(QgsVectorLayer.GeneratedLayout) ogc_fid_idx = vlayer.fieldNameIndex("ogc_fid") topic_idx = vlayer.fieldNameIndex("topic") bemerkung_idx = vlayer.fieldNameIndex("bemerkung") datum_idx = vlayer.fieldNameIndex("datum") vlayer.addAttributeAlias(topic_idx, _translate("VeriSO_V+D_Defects", "Topic:", None)) vlayer.addAttributeAlias(bemerkung_idx, _translate("VeriSO_V+D_Defects", "Bemerkung:", None)) vlayer.setEditorWidgetV2(ogc_fid_idx, "Hidden") vlayer.setEditorWidgetV2(topic_idx, "Enumeration") vlayer.setEditorWidgetV2(bemerkung_idx, "TextEdit") vlayer.setEditorWidgetV2Config(bemerkung_idx, {"IsMultiline": True}) # See gui/editorwidgets/qgstexteditwrapper.cpp for all the parameters. vlayer.setEditorWidgetV2(datum_idx, "Hidden") layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_Defects", "Mängelliste (Linien)", None) layer["featuretype"] = "t_maengel_linie" layer["geom"] = "the_geom" layer["key"] = "ogc_fid" layer["readonly"] = False layer["sql"] = "" layer["group"] = group layer["style"] = "maengel/maengel_linie.qml" vlayer = self.layer_loader.load(layer) if vlayer: vlayer.setEditorLayout(QgsVectorLayer.GeneratedLayout) ogc_fid_idx = vlayer.fieldNameIndex("ogc_fid") topic_idx = vlayer.fieldNameIndex("topic") bemerkung_idx = vlayer.fieldNameIndex("bemerkung") datum_idx = vlayer.fieldNameIndex("datum") vlayer.addAttributeAlias(topic_idx, _translate("VeriSO_V+D_Defects", "Topic:", None)) vlayer.addAttributeAlias(bemerkung_idx, _translate("VeriSO_V+D_Defects", "Bemerkung:", None)) vlayer.setEditorWidgetV2(ogc_fid_idx, "Hidden") vlayer.setEditorWidgetV2(topic_idx, "Enumeration") vlayer.setEditorWidgetV2(bemerkung_idx, "TextEdit") vlayer.setEditorWidgetV2Config(bemerkung_idx, {"IsMultiline": True}) # See gui/editorwidgets/qgstexteditwrapper.cpp for all the parameters. vlayer.setEditorWidgetV2(datum_idx, "Hidden") except Exception: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.iface.messageBar().pushMessage("Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=10) QApplication.restoreOverrideCursor()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS", "VeriSO") project_id = self.settings.value("project/id") epsg = self.settings.value("project/epsg") locale = QSettings().value('locale/userLocale')[0:2] if not project_id: self.iface.messageBar().pushMessage( "Error", _translate("VeriSO_EE_Geb_Check", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_EE_Geb_Check", "Gebaeudeadressen - Checklayer", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Check", "Spinnennetz", None) layer["featuretype"] = "t_gebaeudeadressen_spinnennetz" layer["geom"] = "line" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "gebaeudeadressen/spinnennetz_blau.qml" vlayer = self.layer_loader.load(layer, False) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Check", "Kürzeste Linie", None) layer["featuretype"] = "t_shortestline_hausnummerpos" layer["geom"] = "the_geom" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "gebaeudeadressen/shortestline_linie.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Check", "HausnummerPos", None) layer["featuretype"] = "v_gebaeudeadressen_hausnummerpos" layer["geom"] = "pos" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/shortestline_hausnummerpos.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Check", "Gebaeude > 12m2 ohne Eingang", None) layer["featuretype"] = "t_gebaeude_groesser_12m2_ohne_eingang" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/gebaeude_12m2_ohne_eingang.qml" vlayer = self.layer_loader.load(layer) except Exception, e: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.iface.messageBar().pushMessage( "Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS","VeriSO") project_id = self.settings.value("project/id") epsg = self.settings.value("project/epsg") locale = QSettings().value('locale/userLocale')[0:2] if not project_id: self.iface.messageBar().pushMessage("Error", _translate("VeriSO_EE_Geb_Basis", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_EE_Geb_Basis", "Gebaeudeadressen - Basislayer", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "Bodenbedeckung", None) layer["featuretype"] = "bodenbedeckung_boflaeche" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" # Use 'LIKE' instead of 'IN' or '='. Now you can model extensions like different kinds of 'uebrige_befestigte'. layer["sql"] = "art_txt LIKE 'Gebaeude%' OR art_txt LIKE 'befestigt.Strasse_Weg%' OR art_txt LIKE 'befestigt.Trottoir%' OR art_txt LIKE 'befestigt.uebrige_befestigte%'" layer["readonly"] = True layer["group"] = group layer["style"] = "bodenbedeckung/gebaeude_strassen_trottoir_erschliessung.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 = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "EO.Flaechenelemente", None) layer["featuretype"] = "v_einzelobjekte_flaechenelement" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "art_txt LIKE 'unterirdisches_Gebaeude%' OR art_txt LIKE 'uebriger_Gebaeudeteil%' OR art_txt LIKE 'Reservoir%' OR art_txt LIKE 'Unterstand%'" layer["readonly"] = True layer["group"] = group layer["style"] = "einzelobjekte/eo_flaeche_gebdetail_unterstand_reservoir_unterirdisch.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "EO.Linienelemente", None) layer["featuretype"] = "v_einzelobjekte_linienelement" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "art_txt LIKE 'uebriger_Gebaeudeteil%'" layer["readonly"] = True layer["group"] = group layer["style"] = "einzelobjekte/eo_linie_gebdetail.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "GEB.Nachführung", None) layer["featuretype"] = "gebaeudeadressen_gebnachfuehrung" # layer["geom"] = "perimeter" # Will be loaded as geometryless layer. layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "Benanntes Gebiet", None) layer["featuretype"] = "gebaeudeadressen_benanntesgebiet" layer["geom"] = "flaeche" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "gebaeudeadressen/benanntesgebiet_gruen.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "Strassenstueck (geometrie)", None) layer["featuretype"] = "gebaeudeadressen_strassenstueck" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/strassenachsen_gruen.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "Strassenstueck (anfangspunkt)", None) layer["featuretype"] = "gebaeudeadressen_strassenstueck" layer["geom"] = "anfangspunkt" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/anfangspunkt_gruen.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "Gebaeudeeingang", None) layer["featuretype"] = "gebaeudeadressen_gebaeudeeingang" layer["geom"] = "lage" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/gebaeudeeingang_blaues_viereck_mit_label.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "HausnummerPos", None) layer["featuretype"] = "v_gebaeudeadressen_hausnummerpos" layer["geom"] = "pos" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/hausnummerpos.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "LokalisationsName", None) layer["featuretype"] = "gebaeudeadressen_lokalisationsname" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "LokalisationsNamePos", None) layer["featuretype"] = "t_gebaeudeadressen_lokalisationsnamepos" layer["geom"] = "pos" layer["key"] = "ogc_fid" layer["sql"] = "" layer["group"] = group layer["style"] = "gebaeudeadressen/lokalisationsnamepos.qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_Geb_Basis", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "gemeindegrenze/gemgre_strichliert.qml" gemgrelayer = self.layer_loader.load(layer) if gemgrelayer: rect = gemgrelayer.extent() rect.scale(5) self.iface.mapCanvas().setExtent(rect) self.iface.mapCanvas().refresh() except Exception, e: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.iface.messageBar().pushMessage("Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS", "VeriSO") 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 == "fr": pass elif locale == "it": pass else: locale = "de" if not project_id: self.iface.messageBar().pushMessage( "Error", _translate("VeriSO_V+D_BB", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_BB", "Bodenbedeckung", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "BB.BoFlaeche", None) layer["featuretype"] = "bodenbedeckung_boflaeche" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "bodenbedeckung/boflaeche_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "BB.ProjBoFlaeche", None) layer["featuretype"] = "bodenbedeckung_projboflaeche" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "bodenbedeckung/projboflaeche_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "EO.Flaechenelemente", None) layer["featuretype"] = "v_einzelobjekte_flaechenelement" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "einzelobjekte/eo_flaeche_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "EO.Linienelemente", None) layer["featuretype"] = "v_einzelobjekte_linienelement" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "einzelobjekte/eo_linie_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "EO.Punktelemente", None) layer["featuretype"] = "v_einzelobjekte_punktelement" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "einzelobjekte/eo_punkte_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "BB.Symbole", None) layer["featuretype"] = "v_bodenbedeckung_boflaechesymbol" layer["geom"] = "pos" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "bodenbedeckung/bb_symbole.qml" vlayer = self.layer_loader.load(layer, True, True) # export some statistics here. layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "gemeindegrenze/gemgre_strichliert.qml" gemgrelayer = self.layer_loader.load(layer) if gemgrelayer: rect = gemgrelayer.extent() self.iface.mapCanvas().setExtent(rect) self.iface.mapCanvas().refresh() # self.export_lfp3_pro_ts(vlayer_lfp3_pro_ts) except Exception: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.iface.messageBar().pushMessage( "Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor() def export_lfp3_pro_ts(self, vlayer): try: import xlsxwriter except Exception, e: self.iface.messageBar().pushMessage("Error", str(e), level=QgsMessageBar.CRITICAL, duration=10) return # Create excel file. filename = QDir.convertSeparators( QDir.cleanPath(os.path.join(self.project_dir, "lfp3_pro_ts.xlsx"))) workbook = xlsxwriter.Workbook(filename) fmt_bold = workbook.add_format({'bold': True, 'font_name': 'Cadastra'}) fmt_bold_border = workbook.add_format({ 'bold': True, 'border': 1, 'font_name': 'Cadastra' }) fmt_border = workbook.add_format({ 'border': 1, 'font_name': 'Cadastra' }) fmt_border_decimal = workbook.add_format({ 'border': 1, 'font_name': 'Cadastra', 'num_format': '0.00' }) fmt_header = workbook.add_format({ 'bg_color': '#CACACA', 'border': 1, 'font_name': 'Cadastra' }) fmt_italic = workbook.add_format({ 'italic': True, 'border': 1, 'font_name': 'Cadastra' }) fmt_sum = workbook.add_format({ 'bold': True, 'font_color': 'blue', 'border': 1, 'font_name': 'Cadastra' }) fmt_sum_decimal = workbook.add_format({ 'bold': True, 'font_color': 'blue', 'border': 1, 'font_name': 'Cadastra', 'num_format': '0.00' }) # Create the worksheet for the points defects. worksheet = workbook.add_worksheet( _translate("VeriSO_V+D_BB", u'LFP3 pro TS', None)) worksheet.set_paper(9) worksheet.set_portrait() # Write project name into worksheet. worksheet.write(0, 0, _translate("VeriSO_V+D_BB", "Operat: ", None), fmt_bold) worksheet.write(0, 1, self.project_id, fmt_bold) # Write headers. worksheet.write(4, 0, _translate("VeriSO_V+D_BB", "Toleranzstufe", None), fmt_header) worksheet.write(4, 1, _translate("VeriSO_V+D_BB", "Fläche TS [ha]", None), fmt_header) worksheet.write(4, 2, _translate("VeriSO_V+D_BB", "Ist-Anzahl LFP3", None), fmt_header) worksheet.write(4, 3, _translate("VeriSO_V+D_BB", "Soll-Anzahl LFP3", None), fmt_header) worksheet.write(4, 4, _translate("VeriSO_V+D_BB", "Ist-Soll LFP3", None), fmt_header) # Loop through features and add them to worksheet. iter = vlayer.getFeatures() j = 0 ts_idx = vlayer.fieldNameIndex("toleranzstufe") area_idx = vlayer.fieldNameIndex("flaeche") current_idx = vlayer.fieldNameIndex("ist_anzahl") target_idx = vlayer.fieldNameIndex("soll_anzahl") start_row = 5 sum_area = 0 sum_current = 0 sum_target = 0 sum_diff = 0 for feature in iter: ts = feature.attributes()[ts_idx] area = feature.attributes()[area_idx] current = feature.attributes()[current_idx] target = feature.attributes()[target_idx] worksheet.write(start_row + j, 0, ts, fmt_bold_border) worksheet.write(start_row + j, 1, area, fmt_border_decimal) worksheet.write(start_row + j, 2, current, fmt_border) worksheet.write(start_row + j, 3, target, fmt_border) worksheet.write(start_row + j, 4, (current - target), fmt_border) sum_area += area sum_current += current sum_target += target sum_diff += (current - target) j += 1 # do not forget sum/total worksheet.write(start_row + j, 0, _translate("VeriSO_V+D_BB", "Total", None), fmt_bold_border) worksheet.write(start_row + j, 1, sum_area, fmt_sum_decimal) worksheet.write(start_row + j, 2, sum_current, fmt_sum) worksheet.write(start_row + j, 3, sum_target, fmt_sum) worksheet.write(start_row + j, 4, sum_diff, fmt_sum) # Close excel file. workbook.close()
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS","VeriSO") 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 == "fr": pass elif locale == "it": pass else: locale = "de" if not project_id: self.iface.messageBar().pushMessage("Error", _translate("VeriSO_V+D_BB", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_V+D_BB", "Bodenbedeckung", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "BB.BoFlaeche", None) layer["featuretype"] = "bodenbedeckung_boflaeche" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "bodenbedeckung/boflaeche_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "BB.ProjBoFlaeche", None) layer["featuretype"] = "bodenbedeckung_projboflaeche" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "bodenbedeckung/projboflaeche_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "EO.Flaechenelemente", None) layer["featuretype"] = "v_einzelobjekte_flaechenelement" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "einzelobjekte/eo_flaeche_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "EO.Linienelemente", None) layer["featuretype"] = "v_einzelobjekte_linienelement" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "einzelobjekte/eo_linie_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "EO.Punktelemente", None) layer["featuretype"] = "v_einzelobjekte_punktelement" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "einzelobjekte/eo_punkte_color.qml" vlayer = self.layer_loader.load(layer, True, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "BB.Symbole", None) layer["featuretype"] = "v_bodenbedeckung_boflaechesymbol" layer["geom"] = "pos" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "bodenbedeckung/bb_symbole.qml" vlayer = self.layer_loader.load(layer, True, True) # export some statistics here. layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_V+D_BB", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "gemeindegrenze/gemgre_strichliert.qml" gemgrelayer = self.layer_loader.load(layer) if gemgrelayer: rect = gemgrelayer.extent() self.iface.mapCanvas().setExtent(rect) self.iface.mapCanvas().refresh() # self.export_lfp3_pro_ts(vlayer_lfp3_pro_ts) except Exception: QApplication.restoreOverrideCursor() exc_type, exc_value, exc_traceback = sys.exc_info() self.iface.messageBar().pushMessage("Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor() def export_lfp3_pro_ts(self, vlayer): try: import xlsxwriter except Exception, e: self.iface.messageBar().pushMessage("Error", str(e), level=QgsMessageBar.CRITICAL, duration=10) return # Create excel file. filename = QDir.convertSeparators(QDir.cleanPath(os.path.join(self.project_dir, "lfp3_pro_ts.xlsx"))) workbook = xlsxwriter.Workbook(filename) fmt_bold = workbook.add_format({'bold': True, 'font_name':'Cadastra'}) fmt_bold_border = workbook.add_format({'bold': True, 'border': 1, 'font_name':'Cadastra'}) fmt_border = workbook.add_format({'border': 1, 'font_name':'Cadastra'}) fmt_border_decimal = workbook.add_format({'border': 1, 'font_name':'Cadastra', 'num_format':'0.00'}) fmt_header = workbook.add_format({'bg_color': '#CACACA', 'border': 1, 'font_name':'Cadastra'}) fmt_italic = workbook.add_format({'italic': True, 'border': 1, 'font_name':'Cadastra'}) fmt_sum = workbook.add_format({'bold': True, 'font_color': 'blue', 'border': 1, 'font_name':'Cadastra'}) fmt_sum_decimal = workbook.add_format({'bold': True, 'font_color': 'blue', 'border': 1, 'font_name':'Cadastra', 'num_format':'0.00'}) # Create the worksheet for the points defects. worksheet = workbook.add_worksheet( _translate("VeriSO_V+D_BB", u'LFP3 pro TS', None)) worksheet.set_paper(9) worksheet.set_portrait() # Write project name into worksheet. worksheet.write(0, 0, _translate("VeriSO_V+D_BB", "Operat: ", None), fmt_bold) worksheet.write(0, 1, self.project_id, fmt_bold) # Write headers. worksheet.write(4, 0, _translate("VeriSO_V+D_BB", "Toleranzstufe", None), fmt_header) worksheet.write(4, 1, _translate("VeriSO_V+D_BB", "Fläche TS [ha]", None), fmt_header) worksheet.write(4, 2, _translate("VeriSO_V+D_BB", "Ist-Anzahl LFP3", None), fmt_header) worksheet.write(4, 3, _translate("VeriSO_V+D_BB", "Soll-Anzahl LFP3", None), fmt_header) worksheet.write(4, 4, _translate("VeriSO_V+D_BB", "Ist-Soll LFP3", None), fmt_header) # Loop through features and add them to worksheet. iter = vlayer.getFeatures() j = 0 ts_idx = vlayer.fieldNameIndex("toleranzstufe") area_idx = vlayer.fieldNameIndex("flaeche") current_idx = vlayer.fieldNameIndex("ist_anzahl") target_idx = vlayer.fieldNameIndex("soll_anzahl") start_row = 5 sum_area = 0 sum_current = 0 sum_target = 0 sum_diff = 0 for feature in iter: ts = feature.attributes()[ts_idx] area = feature.attributes()[area_idx] current = feature.attributes()[current_idx] target = feature.attributes()[target_idx] worksheet.write(start_row+j, 0, ts, fmt_bold_border) worksheet.write(start_row+j, 1, area, fmt_border_decimal) worksheet.write(start_row+j, 2, current, fmt_border) worksheet.write(start_row+j, 3, target, fmt_border) worksheet.write(start_row+j, 4, (current - target), fmt_border) sum_area += area sum_current += current sum_target += target sum_diff += (current - target) j += 1 # do not forget sum/total worksheet.write(start_row+j, 0, _translate("VeriSO_V+D_BB", "Total", None), fmt_bold_border) worksheet.write(start_row+j, 1, sum_area, fmt_sum_decimal) worksheet.write(start_row+j, 2, sum_current, fmt_sum) worksheet.write(start_row+j, 3, sum_target, fmt_sum) worksheet.write(start_row+j, 4, sum_diff, fmt_sum) # Close excel file. workbook.close()
class LoadDefectsBase(QObject): def __init__(self, iface, tr_tag): QObject.__init__(self) self.iface = iface self.message_bar = self.iface.messageBar() self.canvas = self.iface.mapCanvas() self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) self.settings = QSettings("CatAIS", "VeriSO") self.project_id = None self.epsg = None self.tr_tag = tr_tag # "VeriSO (V+D)", "VeriSO (EE)" self.project_id = self.settings.value("project/id") self.epsg = self.settings.value("project/epsg") self.dbuser = self.settings.value("project/dbuser") self.group = tr(u"Mängel", self.tr_tag, None) self.group += " (" + str(self.project_id) + ")" # this can be overriden in ApplicationModule.do_load_defects before # calling ApplicationModule.run() self.layers = { 'point': { "type": "postgres", "title": tr(u"Mängelliste (Punkte)", self.tr_tag, None), "featuretype": "t_maengel_punkt", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": self.group, "style": "global_qml/maengel/maengel_punkt.qml", "fields": { 'ogc_fid': { 'widget': 'Hidden' }, 'topic': { 'widget': 'Enumeration', 'alias': 'Topic:' }, 'bemerkung': { 'widget': 'TextEdit', 'alias': 'Bemekung:', 'config': { "IsMultiline": True } }, 'datum': { 'widget': 'Hidden' } } }, 'line': { "type": "postgres", "title": tr(u"Mängelliste (Linien)", self.tr_tag, None), "featuretype": "t_maengel_linie", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": self.group, "style": "global_qml/maengel/maengel_linie.qml", "fields": { 'ogc_fid': { 'widget': 'Hidden' }, 'topic': { 'widget': 'Enumeration', 'alias': 'Topic:' }, 'bemerkung': { 'widget': 'TextEdit', 'alias': 'Bemekung:', 'config': { "IsMultiline": True } }, 'datum': { 'widget': 'Hidden' } } }, 'polygon': { "type": "postgres", "title": tr(u"Mängelliste (Polygone)", self.tr_tag, None), "featuretype": "t_maengel_polygon", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": self.group, "style": "global_qml/maengel/maengel_polygon.qml", "fields": { 'ogc_fid': { 'widget': 'Hidden' }, 'topic': { 'widget': 'Enumeration', 'alias': 'Topic:' }, 'bemerkung': { 'widget': 'TextEdit', 'alias': 'Bemekung:', 'config': { "IsMultiline": True } }, 'datum': { 'widget': 'Hidden' } } } } def run(self): loaded_layers = {} for layer in self.layers: try: loaded_layer = self._load_defect_layer(self.layers[layer]) loaded_layers[layer] = { 'qgis_layer': loaded_layer, 'info': self.layers[layer] } 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=Qgis.Critical, duration=0) QApplication.restoreOverrideCursor() return loaded_layers def _load_defect_layer(self, layer): combo_box_code = (" if {0}.currentIndex() == -1:\n" " i = {0}.findText('{1}')\n" " {0}.setCurrentIndex(i)\n") line_edit_code = (" if {0}.text() in ['', 'NULL']:\n" " {0}.setText('{1}')\n") text_edit_code = (" if {0}.toPlainText() in ['', 'NULL']:\n" " {0}.setPlainText('{1}')\n") widget_type_map = { 'Enumeration': ['QComboBox', combo_box_code], 'TextEdit': ['QLineEdit', line_edit_code], 'PlainTextEdit': ['QPlainTextEdit', text_edit_code] } code_imports = [] generated_code = '' loaded_layer = self.layer_loader.load(layer) if loaded_layer: loaded_layer.editFormConfig().setLayout( QgsEditFormConfig.GeneratedLayout) edit_form_config = loaded_layer.editFormConfig() for field_name in layer['fields']: field = layer['fields'][field_name] idx = loaded_layer.fields().indexFromName(field_name) if 'alias' in field: loaded_layer.setFieldAlias( idx, tr(field['alias'], self.tr_tag, None)) if 'default' in field: default = QgsDefaultValue(field['default']) loaded_layer.setDefaultValueDefinition(idx, default) if 'readonly' in field: edit_form_config.setReadOnly(idx, field['readonly']) if 'writable_only_by' in field: if not db_user_has_role(self.dbuser, field['writable_only_by']): edit_form_config.setReadOnly(idx, True) return loaded_layer
def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface)
def __init__(self, iface, tr_tag): QObject.__init__(self) self.iface = iface self.message_bar = self.iface.messageBar() self.canvas = self.iface.mapCanvas() self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) self.settings = QSettings("CatAIS", "VeriSO") self.project_id = None self.epsg = None self.tr_tag = tr_tag # "VeriSO (V+D)", "VeriSO (EE)" self.project_id = self.settings.value("project/id") self.epsg = self.settings.value("project/epsg") self.dbuser = self.settings.value("project/dbuser") self.group = tr(u"Mängel", self.tr_tag, None) self.group += " (" + str(self.project_id) + ")" # this can be overriden in ApplicationModule.do_load_defects before # calling ApplicationModule.run() self.layers = { 'point': { "type": "postgres", "title": tr(u"Mängelliste (Punkte)", self.tr_tag, None), "featuretype": "t_maengel_punkt", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": self.group, "style": "global_qml/maengel/maengel_punkt.qml", "fields": { 'ogc_fid': { 'widget': 'Hidden' }, 'topic': { 'widget': 'Enumeration', 'alias': 'Topic:' }, 'bemerkung': { 'widget': 'TextEdit', 'alias': 'Bemekung:', 'config': { "IsMultiline": True } }, 'datum': { 'widget': 'Hidden' } } }, 'line': { "type": "postgres", "title": tr(u"Mängelliste (Linien)", self.tr_tag, None), "featuretype": "t_maengel_linie", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": self.group, "style": "global_qml/maengel/maengel_linie.qml", "fields": { 'ogc_fid': { 'widget': 'Hidden' }, 'topic': { 'widget': 'Enumeration', 'alias': 'Topic:' }, 'bemerkung': { 'widget': 'TextEdit', 'alias': 'Bemekung:', 'config': { "IsMultiline": True } }, 'datum': { 'widget': 'Hidden' } } }, 'polygon': { "type": "postgres", "title": tr(u"Mängelliste (Polygone)", self.tr_tag, None), "featuretype": "t_maengel_polygon", "geom": "the_geom", "key": "ogc_fid", "readonly": False, "sql": "", "group": self.group, "style": "global_qml/maengel/maengel_polygon.qml", "fields": { 'ogc_fid': { 'widget': 'Hidden' }, 'topic': { 'widget': 'Enumeration', 'alias': 'Topic:' }, 'bemerkung': { 'widget': 'TextEdit', 'alias': 'Bemekung:', 'config': { "IsMultiline": True } }, 'datum': { 'widget': 'Hidden' } } } }
def __init__(self, iface): self.iface = iface self.canvas = self.iface.mapCanvas() self.root = QgsProject.instance().layerTreeRoot() self.layerLoader = LoadLayer(self.iface)
class ComplexCheck(QObject): def __init__(self, iface): QObject.__init__(self) self.iface = iface self.message_bar = self.iface.messageBar() self.canvas = self.iface.mapCanvas() self.settings = QSettings("CatAIS", "VeriSO") self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) # noinspection PyUnboundLocalVariable,PyUnboundLocalVariable, # PyUnboundLocalVariable # noinspection PyUnboundLocalVariable,PyUnboundLocalVariable, # PyUnboundLocalVariable # noinspection PyUnboundLocalVariable,PyUnboundLocalVariable, # PyUnboundLocalVariable # noinspection PyUnboundLocalVariable def run(self): project_id = self.settings.value("project/id") epsg = self.settings.value("project/epsg") locale = QSettings().value('locale/userLocale')[0:2] if not project_id: self.message_bar.pushCritical( "Error", _translate("VeriSO_EE_Geb_LokTest", "project_id not set", None)) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_EE_Geb_LokTest", "Gebaeudeadressen - Lokalisationstest", None) group += " (" + str(project_id) + ")" # TODO: Check "tid" vs. t_ili_tid... in queries. Do not import # i_ili_tid? # define layer names here lokalisation = _translate("VeriSO_EE_Geb_LokTest", "Lokalisation Lokalisationstest", None) strassenstueck_geometrie = _translate( "VeriSO_EE_Geb_LokTest", "Strassenstueck (geometrie) " "Lokalisationstest", None) strassenstueck_anfangspunkt = _translate( "VeriSO_EE_Geb_LokTest", "Strassenstueck (" "anfangspunkt) " "Lokalisationstest", None) benanntesgebiet = _translate("VeriSO_EE_Geb_LokTest", "Benanntes Gebiet Lokalisationstest", None) gebaeudeeingang = _translate("VeriSO_EE_Geb_LokTest", "Gebaeudeeingang Lokalisationstest", None) shortestline = _translate("VeriSO_EE_Geb_LokTest", "Kuerzeste Linie Lokalisationstest", None) hausnummerpos = _translate("VeriSO_EE_Geb_LokTest", "HausnummerPos Lokalisationstest", None) lokalisationsname = _translate("VeriSO_EE_Geb_LokTest", "LokalisationsName", None) vlayer_lokalisation = self.get_vector_layer_by_name(lokalisation) if not vlayer_lokalisation: layer = { "type": "postgres", "title": lokalisation, "featuretype": "gebaeudeadressen_lokalisation", "key": "ogc_fid", "sql": "ogc_fid = -1", "readonly": True, "group": group } vlayer_lokalisation = self.layer_loader.load(layer) vlayer_strassenstueck_geometrie = self.get_vector_layer_by_name( strassenstueck_geometrie) if not vlayer_strassenstueck_geometrie: layer = { "type": "postgres", "title": "Strassenstueck (geometrie) Lokalisationstest", "featuretype": "gebaeudeadressen_strassenstueck", "geom": "geometrie", "key": "ogc_fid", "sql": "strassenstueck_von = -1", "readonly": True, "group": group, "style": "global_qml/gebaeudeadressen/strassenachsen_rot" ".qml" } vlayer_strassenstueck_geometrie = self.layer_loader.load(layer) vlayer_strassenstueck_anfangspunkt = self.get_vector_layer_by_name( strassenstueck_anfangspunkt) if not vlayer_strassenstueck_anfangspunkt: layer = { "type": "postgres", "title": "Strassenstueck (anfangspunkt) Lokalisationstest", "featuretype": "gebaeudeadressen_strassenstueck", "geom": "anfangspunkt", "key": "ogc_fid", "sql": "strassenstueck_von = -1", "readonly": True, "group": group, "style": "global_qml/gebaeudeadressen/anfangspunkt_rot.qml" } vlayer_strassenstueck_anfangspunkt = self.layer_loader.load( layer) vlayer_benanntesgebiet = self.get_vector_layer_by_name( benanntesgebiet) if not vlayer_benanntesgebiet: layer = { "type": "postgres", "title": "Benanntes Gebiet Lokalisationstest", "featuretype": "gebaeudeadressen_benanntesgebiet", "geom": "flaeche", "key": "ogc_fid", "sql": "benanntesgebiet_von = -1", "readonly": True, "group": group, "style": "global_qml/gebaeudeadressen/benanntesgebiet_rot" ".qml" } vlayer_benanntesgebiet = self.layer_loader.load(layer) vlayer_gebaeudeeingang = self.get_vector_layer_by_name( gebaeudeeingang) if not vlayer_gebaeudeeingang: layer = { "type": "postgres", "title": "Gebaeudeeingang Lokalisationstest", "featuretype": "gebaeudeadressen_gebaeudeeingang", "geom": "lage", "key": "ogc_fid", "sql": "gebaeudeeingang_von = -1", "readonly": True, "group": group, "style": "global_qml/gebaeudeadressen/gebaeudeeingang_rot" ".qml" } vlayer_gebaeudeeingang = self.layer_loader.load(layer) vlayer_shortestline = self.get_vector_layer_by_name(shortestline) if not vlayer_shortestline: layer = { "type": "postgres", "title": "Kuerzeste Linie Lokalisationstest", "featuretype": "t_shortestline_hausnummerpos", "geom": "the_geom", "key": "ogc_fid", "sql": "lok_tid = -1", "readonly": True, "group": group, "style": "global_qml/gebaeudeadressen/shortestline_linie_rot.qml" } vlayer_shortestline = self.layer_loader.load(layer) vlayer_hausnummerpos = self.get_vector_layer_by_name(hausnummerpos) if not vlayer_hausnummerpos: layer = { "type": "postgres", "title": "HausnummerPos Lokalisationstest", "featuretype": "v_gebaeudeadressen_hausnummerpos", "geom": "pos", "key": "ogc_fid", "sql": "lok_tid = -1", "readonly": True, "group": group, "style": "global_qml/gebaeudeadressen/hausnummerpos_rot.qml" } vlayer_hausnummerpos = self.layer_loader.load(layer) vlayer_lokalisationsname = self.get_vector_layer_by_name( lokalisationsname) if not vlayer_lokalisationsname: self.message_bar.pushMessage( "Error", _translate("VeriSO_EE_Geb_LokTest", "Layer _LokalisationsName_ not found.", None), level=QgsMessageBar.CRITICAL, duration=0) QApplication.restoreOverrideCursor() return iterator = vlayer_lokalisationsname.getFeatures() ids = [] for feature in iterator: ids.append(feature.id()) if vlayer_lokalisationsname.selectedFeatureCount() < 1: self.message_bar.pushCritical( "Error", _translate("VeriSO_EE_Geb_LokTest", "No _LokalisationsName_ selected.", None)) QApplication.restoreOverrideCursor() return if vlayer_lokalisationsname.selectedFeatureCount() > 1: self.message_bar.pushCritical( "Error", _translate( "VeriSO_EE_Geb_LokTest", "Please select only one (1) _LokalisationsName_.", None)) QApplication.restoreOverrideCursor() return feat = QgsFeature() id = vlayer_lokalisationsname.selectedFeaturesIds()[0] feat = vlayer_lokalisationsname.selectedFeatures()[0] idx = ids.index(id) benannte_idx = vlayer_lokalisationsname.fieldNameIndex("benannte") text_idx = vlayer_lokalisationsname.fieldNameIndex("atext") if benannte_idx == -1 or text_idx == -1: self.message_bar.pushCritical( "Error", _translate("VeriSO_EE_Geb_LokTest", "Field _benannte_ or _text_ not found.", None)) QApplication.restoreOverrideCursor() return benannte = feat.attributes()[benannte_idx] lokalisationsname = feat.attributes()[text_idx] vlayer_strassenstueck_geometrie.setSubsetString( "(strassenstueck_von = " + str(benannte) + ")") vlayer_strassenstueck_anfangspunkt.setSubsetString( "(strassenstueck_von = " + str(benannte) + ")") vlayer_benanntesgebiet.setSubsetString("(benanntesgebiet_von = " + str(benannte) + ")") vlayer_gebaeudeeingang.setSubsetString("(gebaeudeeingang_von = " + str(benannte) + ")") vlayer_lokalisation.setSubsetString("(ogc_fid = " + str(benannte) + ")") vlayer_shortestline.setSubsetString("(lok_tid = " + str(benannte) + ")") vlayer_hausnummerpos.setSubsetString("(lok_tid = " + str(benannte) + ")") if vlayer_strassenstueck_geometrie.featureCount() > 0: x_min = vlayer_strassenstueck_geometrie.extent().xMinimum() y_min = vlayer_strassenstueck_geometrie.extent().yMinimum() x_max = vlayer_strassenstueck_geometrie.extent().xMaximum() y_max = vlayer_strassenstueck_geometrie.extent().yMaximum() if vlayer_benanntesgebiet.featureCount() > 0: x_min = vlayer_benanntesgebiet.extent().xMinimum() y_min = vlayer_benanntesgebiet.extent().yMinimum() x_max = vlayer_benanntesgebiet.extent().xMaximum() y_max = vlayer_benanntesgebiet.extent().yMaximum() try: if vlayer_gebaeudeeingang.featureCount() > 0: if vlayer_gebaeudeeingang.extent().xMinimum() < x_min: x_min = vlayer_gebaeudeeingang.extent().xMinimum() if vlayer_gebaeudeeingang.extent().yMinimum() < y_min: y_min = vlayer_gebaeudeeingang.extent().yMinimum() if vlayer_gebaeudeeingang.extent().xMaximum() > x_max: x_max = vlayer_gebaeudeeingang.extent().xMaximum() if vlayer_gebaeudeeingang.extent().yMaximum() > y_max: y_max = vlayer_gebaeudeeingang.extent().yMaximum() rect = QgsRectangle(x_min, y_min, x_max, y_max) rect.scale(1.3) except UnboundLocalError: vlayer_gemeindegrenze = self.getVectorLayerByName( "Gemeindegrenze") if vlayer_gemeindegrenze is None: rect = self.canvas.fullExtent() else: rect = vlayer_gemeindegrenze.extent() self.iface.mapCanvas().setExtent(rect) self.iface.mapCanvas().refresh() iterator = vlayer_lokalisation.getFeatures() # only one feature is selected for feature in iterator: prinzip_idx = vlayer_lokalisation.fieldNameIndex( "nummerierungsprinzip_txt") attributeprovisorisch_idx = vlayer_lokalisation.fieldNameIndex( "attributeprovisorisch_txt") offiziell_idx = vlayer_lokalisation.fieldNameIndex( "istoffiziellebezeichnung_txt") status_idx = vlayer_lokalisation.fieldNameIndex("status_txt") inaenderung_idx = vlayer_lokalisation.fieldNameIndex( "inaenderung_txt") art_idx = vlayer_lokalisation.fieldNameIndex("art_txt") something_missing = (prinzip_idx == -1 or attributeprovisorisch_idx == -1 or offiziell_idx == -1 or status_idx == -1 or inaenderung_idx == -1 or art_idx == -1) if something_missing: self.message_bar.pushMessage("Error", _translate( "VeriSO_EE_Geb_LokTest", "Field not found.", None), level=QgsMessageBar.CRITICAL, duration=0) QApplication.restoreOverrideCursor() return prinzip = feature.attributes()[prinzip_idx] attributeprovisorisch = feature.attributes( )[attributeprovisorisch_idx] offiziell = feature.attributes()[offiziell_idx] status = feature.attributes()[status_idx] inaenderung = feature.attributes()[inaenderung_idx] art = feature.attributes()[art_idx] map_extent = self.canvas.extent() x = map_extent.xMinimum() y = map_extent.yMaximum() text_item_found = False items = list(self.iface.mapCanvas().scene().items()) for i in range(len(items)): try: name = items[i].data(0) if str(name) == "LokalisationsInfo": text_item = items[i] text_item_found = True except Exception: pass if not text_item_found: text_item = QgsTextAnnotationItem(self.canvas) text_item.setData(0, "LokalisationsInfo") # noinspection PyUnboundLocalVariable text_item.setMapPosition( QgsPoint(x + 10 * self.canvas.mapUnitsPerPixel(), y - 10 * self.canvas.mapUnitsPerPixel())) text_item.setMapPositionFixed(False) text_item.setFrameBorderWidth(0.0) text_item.setFrameColor(QColor(250, 250, 250, 255)) text_item.setFrameBackgroundColor(QColor(250, 250, 250, 123)) text_item.setFrameSize(QSizeF(250, 150)) text_document = QTextDocument() text_document.setHtml( "<table style='font-size:12px;'><tr><td>Lok.Name: </td><td>" + lokalisationsname + "</td></tr><tr><td>TID: </td><td>" + str(benannte) + "</td></tr> <tr><td>Num.prinzip: " "</td><td>" + str(prinzip) + "</td></tr> <tr><td>Attr. prov.: </td><td>" + str(attributeprovisorisch) + "</td></tr> <tr><td>ist " "offiziell: </td><td>" + str(offiziell) + "</td></tr> <tr><td>Status: " "</td><td>" + str(status) + "</td></tr> <tr><td>in Aenderung: " "</td><td>" + str(inaenderung) + "</td></tr> <tr><td>Art: " "</td><td>" + str(art) + "</td></tr> </table>") text_item.setDocument(text_document) # This is a workaround: first ever position is not correct. text_item.setMapPosition( QgsPoint(x + 10 * self.canvas.mapUnitsPerPixel(), y - 10 * self.canvas.mapUnitsPerPixel())) text_item.update() self.iface.mapCanvas().refresh() try: vlayer_lokalisationsname.setSelectedFeatures([ids[idx + 1]]) except IndexError: self.message_bar.pushInfo( "Information", _translate("VeriSO_EE_Geb_LokTest", "End of table.", None)) except Exception as e: 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() QApplication.restoreOverrideCursor() # Return QgsVectorLayer from a layer name ( as string ) # (c) Carson Farmer / fTools @staticmethod def get_vector_layer_by_name(my_name): layermap = QgsMapLayerRegistry.instance().mapLayers() for name, layer in list(layermap.items()): if layer.type() == QgsMapLayer.VectorLayer and layer.name() == \ my_name: if layer.isValid(): return layer else: return None
class ComplexCheck(QObject): def __init__(self, iface): self.iface = iface self.root = QgsProject.instance().layerTreeRoot() self.layer_loader = LoadLayer(self.iface) def run(self): self.settings = QSettings("CatAIS", "VeriSO") 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.iface.messageBar().pushMessage( "Error", _translate("VeriSO_EE_FP3", "project_id not set", None), level=QgsMessageBar.CRITICAL, duration=5) return QApplication.setOverrideCursor(Qt.WaitCursor) try: group = _translate("VeriSO_EE_FP3", "FixpunkteKategorie3", None) group += " (" + str(project_id) + ")" layer = {} layer["type"] = "postgres" layer["title"] = _translate( "VeriSO_EE_FP3", "Toleranzstufen", None ) # Translate with Qt Linguist. German translation not necessary since this text will be used when language is missing. layer["featuretype"] = "tseinteilung_toleranzstufe" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["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 = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "LFP3 Nachführung", None) layer["featuretype"] = "fixpunktekategorie3_lfp3nachfuehrung" layer[ "geom"] = "perimeter" # If no geometry attribute is set, the layer will be loaded as geoemtryless. layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group vlayer = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "LFP3", None) layer["featuretype"] = "fixpunktekategorie3_lfp3" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "fixpunkte/lfp3_" + locale + ".qml" vlayer = self.layer_loader.load(layer) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "LFP3 ausserhalb Gemeinde", None) layer["featuretype"] = "t_lfp3_ausserhalb_gemeinde" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "fixpunkte/lfp3ausserhalb.qml" vlayer = self.layer_loader.load(layer) # This is how WMS layer work. layer = {} layer["type"] = "wms" layer["title"] = _translate("VeriSO_EE_FP3", "LFP1 + LFP2 Schweiz", None) layer["url"] = "http://wms.geo.admin.ch/" layer[ "layers"] = "ch.swisstopo.fixpunkte-lfp1,ch.swisstopo.fixpunkte-lfp2" layer["format"] = "image/png" layer["crs"] = "EPSG:" + str(epsg) layer["group"] = group vlayer = self.layer_loader.load(layer, False, True) layer = {} layer["type"] = "postgres" layer["title"] = _translate("VeriSO_EE_FP3", "Gemeindegrenze", None) layer["featuretype"] = "gemeindegrenzen_gemeindegrenze" layer["geom"] = "geometrie" layer["key"] = "ogc_fid" layer["sql"] = "" layer["readonly"] = True layer["group"] = group layer["style"] = "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.iface.messageBar().pushMessage( "Error", str(traceback.format_exc(exc_traceback)), level=QgsMessageBar.CRITICAL, duration=5) QApplication.restoreOverrideCursor()