Beispiel #1
0
    def importGrille(self):

        # On charge la couche
        uriGrille = self.dockwidget.fileImportGrille.filePath().strip()
        # print (uriGrille)

        #
        layerGrille = util_layer.getLayer(util_layer.CONST_NOM_LAYER_GRILLE)
        if layerGrille == None:
            layerGrille = util_layer.createLayerGrille(uriGrille)
            QgsMapLayerRegistry.instance().addMapLayer(layerGrille)
        else:
            # On supprime le layer
            QgsMapLayerRegistry.instance().removeMapLayers([layerGrille.id()])
            # On reconstruit avec le nouveau fichier
            layerGrille = util_layer.createLayerGrille(uriGrille)
            QgsMapLayerRegistry.instance().addMapLayer(layerGrille)

        # Projection pour la construction des autres layers
        self.projGrille = layerGrille.crs().authid()

        # On enregistre le chemin dans les settings
        util_io.addUrlSettings(self.uriSettings, 'grille', uriGrille)

        # On intialise les variables de grandeur de la grille
        self.init_param_grille()

        # On affecte les attributs ID
        util_layer.updateAttId(layerGrille, self.g)

        self.goTo("0")

        self.zoomEmprise()
        self.iface.mapCanvas().refresh()
Beispiel #2
0
    def synchronize(self):
        """
            Tableau est deja chargé
            On prend les infos du fichier vers le layer
        """

        # ====================================================
        #    Layer: creer ou supprimer les features
        #
        layerStopLine = util_layer.getLayer(
            util_layer.CONST_NOM_LAYER_PT_SAISIR)

        if layerStopLine == None:
            # creation du layer point
            proj = self.iface.mapCanvas().mapSettings().destinationCrs(
            ).authid()
            if hasattr(self, 'projGrille') and self.projGrille != None:
                proj = self.projGrille
            layerStopLine = util_layer.createLayerPoint(proj)

            # La couche est creee , il faut l'ajouter a l'interface
            QgsMapLayerRegistry.instance().addMapLayer(layerStopLine)

        else:
            # le layer existe, on supprime les features
            layerStopLine = util_layer.removeAllFeature(layerStopLine)

        # ====================================================
        #   On synchronise avec le fichier
        #
        uriSL = self.dockwidget.fileOuvrirInventaireCSV.filePath()

        cpt = 0
        layerStopLine.startEditing()
        pr = layerStopLine.dataProvider()
        with open(uriSL) as f:
            for line in f:
                if cpt > 0:
                    coord = line.strip().split(",")
                    if len(coord) > 1:
                        geompoint = QgsGeometry.fromPoint(
                            QgsPoint(float(coord[0]), float(coord[1])))
                        newFeature = QgsFeature()
                        newFeature.setGeometry(geompoint)
                        pr.addFeatures([newFeature])
                cpt = cpt + 1
        layerStopLine.commitChanges()

        # ====================================================
        # On passe le layer aux outils click
        self.featureToolAdd.setLayer(layerStopLine)
        self.featureToolDelete.setLayer(layerStopLine)

        self.featureToolAdd.setUrl(uriSL)
        self.featureToolDelete.setUrl(uriSL)

        # ====================================================
        # On rafraichit le canvas
        self.iface.mapCanvas().refresh()
Beispiel #3
0
    def zoomEmprise(self):

        layerGrille = util_layer.getLayer(util_layer.CONST_NOM_LAYER_GRILLE)

        if layerGrille != None:
            extent = layerGrille.extent()
            self.iface.mapCanvas().setExtent(extent)
            self.iface.mapCanvas().refresh()
Beispiel #4
0
    def vider(self):

        # ----------------------------------------------------------------------------
        # supprime les layers
        layerGrille = util_layer.getLayer(util_layer.CONST_NOM_LAYER_GRILLE)
        if layerGrille != None:
            QgsMapLayerRegistry.instance().removeMapLayers([layerGrille.id()])

        layerStopLine = util_layer.getLayer(
            util_layer.CONST_NOM_LAYER_PT_SAISIR)
        if layerStopLine != None:
            QgsMapLayerRegistry.instance().removeMapLayers(
                [layerStopLine.id()])

        layerStopLine = util_layer.getLayer(
            util_layer.CONST_NOM_LAYER_PT_CONTROLE)
        if layerStopLine != None:
            QgsMapLayerRegistry.instance().removeMapLayers(
                [layerStopLine.id()])
Beispiel #5
0
    def init_param_grille(self):

        # On recupere le layer
        layerGrille = util_layer.getLayer(util_layer.CONST_NOM_LAYER_GRILLE)

        # Liste des identifiants
        self.idList = []
        nb = layerGrille.featureCount()
        for id in range(nb):
            self.idList.append(id)

        # Nombre de cellule par colonne
        xmax = 0
        cpt = 0
        for feature in layerGrille.getFeatures():
            geom = feature.geometry()
            if cpt > 0:
                if geom.boundingBox().xMaximum() > xmax:
                    xmax = geom.boundingBox().xMaximum()
                else:
                    break
            else:
                xmax = geom.boundingBox().xMaximum()
            cpt = cpt + 1
        self.nx = cpt

        # Nombre de cellule par colonne
        self.ny = nb / self.nx

        # On permutte toutes les nCell de x
        cpt = 0
        for i in range(0, len(self.idList), self.nx):
            if ((cpt % 2) == 1):
                # On permutte
                for j in range(i, int((i + i + self.nx) / 2)):
                    k = j - i
                    t = self.idList[i + self.nx - 1 - k]
                    self.idList[i + self.nx - 1 - k] = self.idList[i + k]
                    self.idList[i + k] = t
            cpt = cpt + 1
        # print (idList)

        xmin = layerGrille.extent().xMinimum()
        ymin = layerGrille.extent().yMinimum()
        rx = (layerGrille.extent().xMaximum() - xmin) / self.nx
        ry = (layerGrille.extent().yMaximum() - ymin) / self.ny
        self.g = grille.Grille(self.nx, self.ny, xmin, ymin, rx, ry)
Beispiel #6
0
    def goTo(self, currId):

        layerGrille = util_layer.getLayer(util_layer.CONST_NOM_LAYER_GRILLE)

        if layerGrille != None:
            # zoom sur la cellule
            util_layer.zoomFeature(self.iface, layerGrille, self.g, currId)

            # On change le focus si saisie
            changeFocus = True
            layers = QgsMapLayerRegistry.instance().mapLayers().values()
            for layer in layers:
                if layer.type() == QgsMapLayer.VectorLayer:
                    if (layer.name() == util_layer.CONST_NOM_LAYER_PT_CONTROLE
                        ):
                        changeFocus = False

            if changeFocus:
                layerGrille = util_layer.setStyleGrilleSaisie(
                    layerGrille, currId)

        #
        self.iface.mapCanvas().refresh()
Beispiel #7
0
    def raz(self):
        """
        Vider le fichier des points saisis
        """

        # ====================================================
        #    Layer
        layerStopLine = util_layer.getLayer(
            util_layer.CONST_NOM_LAYER_PT_SAISIR)

        # On supprime les features du layer
        layerStopLine = util_layer.removeAllFeature(layerStopLine)

        # ====================================================
        #    Fichier
        #
        uriSL = self.dockwidget.fileOuvrirInventaireCSV.filePath()
        util_io.suppLignePoint(uriSL)

        # ====================================================
        #    Tableau
        #
        self.dockwidget.tableCoordFeu = util_table.charge(
            uriSL, self.dockwidget.tableCoordFeu)
Beispiel #8
0
    def controler(self):

        # popup
        # Show the dialog
        self.dlg.show()

        # Run the dialog event loop
        result = self.dlg.exec_()

        # ==============================================================================
        # See if OK was pressed
        if result:

            # On désactive beaucoup d'action
            self.dockwidget.fileImportGrille.setDisabled(True)
            self.dockwidget.fileOuvrirInventaireCSV.setDisabled(True)
            self.dockwidget.btSynchronize.setDisabled(True)
            self.dockwidget.btViderFichier.setDisabled(True)
            self.dockwidget.btCheck.setDisabled(False)
            self.dockwidget.btControler.setDisabled(True)
            # self.dockwidget.btReload.setDisabled(False)

            layerStopLine = util_layer.getLayer(
                util_layer.CONST_NOM_LAYER_PT_SAISIR)
            featuresPointEnvConvexe = layerStopLine.getFeatures()
            layerGrille = util_layer.getLayer(
                util_layer.CONST_NOM_LAYER_GRILLE)

            # -----------------------------------------------------------------
            # On supprime le layer
            if layerStopLine != None:
                QgsMapLayerRegistry.instance().removeMapLayers(
                    [layerStopLine.id()])

            # -----------------------------------------------------------------
            # On crée un nouveau fichier
            uriSL = self.dockwidget.fileOuvrirInventaireCSV.filePath()
            chemin = util_io.createFicControle(uriSL)

            self.dockwidget.fileControleCSV.setText(chemin)

            uriSL = chemin

            # -----------------------------------------------------------------
            # Vider le tableau
            util_table.charge(uriSL, self.dockwidget.tableCoordFeu)

            # -----------------------------------------------------------------
            #    Layer
            # On cree un layer de validation
            layerStopLine = util_layer.getLayer(
                util_layer.CONST_NOM_LAYER_PT_CONTROLE)

            if layerStopLine == None:
                # creation du layer point
                proj = self.iface.mapCanvas().mapSettings().destinationCrs(
                ).authid()
                if hasattr(self, 'projGrille') and self.projGrille != None:
                    proj = self.projGrille

                layerStopLine = util_layer.createLayerControle(proj)

                # La couche est creee , il faut l'ajouter a l'interface
                QgsMapLayerRegistry.instance().addMapLayer(layerStopLine)

            # On passe le chemin et le layer a l'outil de saisie
            self.featureToolAdd.setLayer(layerStopLine)
            self.featureToolAdd.setUrl(uriSL)

            self.featureToolDelete.setLayer(layerStopLine)
            self.featureToolDelete.setUrl(uriSL)

            # ====================================================
            # ----------------------------------------------------------
            self.N = int(self.dlg.editNbCellTirage.text())
            # print (nbCell)

            xmin = layerGrille.extent().xMinimum()
            xmax = layerGrille.extent().xMaximum()
            ymin = layerGrille.extent().yMinimum()
            ymax = layerGrille.extent().yMaximum()

            nx = self.nx
            # print ('nx=' + str(nx))
            ny = self.ny

            # Mode du tirage
            if self.dlg.radioEmprise.isChecked():
                tabdonnee = [[xmin, ymin], [xmin, ymax], [xmax, ymax],
                             [xmax, ymin]]
                (T,
                 self.Nc) = tirage.sampleInConvexHull(xmin, ymin, nx, ny,
                                                      self.g.rx, self.N,
                                                      tabdonnee)
                # self.Nc = nx * ny

            elif self.dlg.radioEnvConvexe.isChecked():

                # tableau des points saisis
                tabdonnee = []
                for feature in featuresPointEnvConvexe:
                    geom = feature.geometry()
                    x = geom.asPoint().x()
                    y = geom.asPoint().y()
                    tabdonnee.append([x, y])

                # Enveloppe convexe des points saisis
                (T,
                 self.Nc) = tirage.sampleInConvexHull(xmin, ymin, nx, ny,
                                                      self.g.rx, self.N,
                                                      tabdonnee)

                #

#                X = []
#                Y = []
#                for (i,j) in T:
#                    x = xmin + i * self.g.rx
#                    y = ymin + j * self.g.ry
#                    # print (x,y)
#                    X.append(x)
#                    Y.append(y)
#print (X)
# aec = tirage.aire_env_convexe(TReel)
# aec = geomalgo.aire_env_convexe(tabdonnee)
#                aec = geomalgo.aire_polygone(X, Y)
#                print (aec)
#                self.Nc = math.floor(aec / (self.g.rx * self.g.ry))
#                print (self.Nc)
# self.Nc = int (self.Nc)
# print (self.Nc)
# print (T)

            self.C = []
            for (i, j) in T:
                self.C.append([i, j])
            # print (self.C)

            # ----------------------------------------------------------------------------
            # On change le parcours
            self.idList = []
            for feature in layerGrille.getFeatures():
                idx = util_layer.getFieldIndex(layerGrille)
                id = feature.attributes()[idx]

                # est-ce que le point est tire ?
                tire = False
                for (i, j) in T:
                    idT = (ny - j - 1) * nx + i

                    if idT == int(id):
                        tire = True

                if tire:
                    self.idList.append(int(id))
            # print (self.idList)

            # ----------------------------------------------------------------------------
            #  Style de la grille de controle
            layerGrille = util_layer.setStyleGrilleControle(
                layerGrille, self.idList)

            # On initialise la cellule de démarrage
            premier = str(self.idList[0])
            self.dockwidget.currentId.setText(premier)
            self.goTo(premier)

            self.zoomEmprise()