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()
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()
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()
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()])
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)
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()
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)
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()