Exemple #1
0
 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 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 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
Exemple #6
0
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()
Exemple #7
0
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
Exemple #8
0
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()
Exemple #9
0
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()
Exemple #10
0
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()
Exemple #11
0
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()
Exemple #12
0
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()
Exemple #13
0
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 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()      
Exemple #15
0
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()
Exemple #16
0
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(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()      
Exemple #18
0
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()
Exemple #19
0
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()
Exemple #20
0
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 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
Exemple #22
0
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()
Exemple #23
0
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()