GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

No menu could be recovered. Follow the blue links in the page.

This view

  • Original page
  • New address

GeezerVison is showing raw.githubusercontent.com — raw.githubusercontent.com

# -*- coding: utf-8 -*- """ /*************************************************************************** ModuleExport A QGIS plugin export ------------------- begin : 2016-04-14 git sha : $Format:%H$ copyright : (C) 2016 by Loic Martel email : [email protected] ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ """ from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication from PyQt4.QtGui import QAction, QIcon, QMessageBox, QTableWidgetItem # Initialize Qt resources from file resources.py import resources # Import the code for the dialog from ModuleExport_dialog import ModuleExportDialog from DialogSelectFaune import DialogSelectFaune from DialogSelectFlore import DialogSelectFlore import os.path import time import psycopg2 from PyQt4.Qt import QPushButton, QSqlDatabase, QSqlTableModel from xml.dom import minidom #Pour pouvoir générer notre fichier de metadata. from subprocess import call class ModuleExport: """QGIS Plugin Implementation.""" def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = os.path.dirname(__file__) # initialize locale locale = QSettings().value('locale/userLocale')[0:2] locale_path = os.path.join( self.plugin_dir, 'i18n', 'ModuleExport_{}.qm'.format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) # Create the dialogs (after translation) and keep reference self.dlg = ModuleExportDialog(self.iface) self.dlg.setWindowTitle("module d'export") self.dlg_F = DialogSelectFaune(self.dlg) self.dlg_Flo = DialogSelectFlore(self.dlg) #Fonctions esthétiques: ajout d icones. self.dlg.ButtonFaune.setIcon(QIcon(self.plugin_dir+"/turtle-128.png")) self.dlg.ButtonFaune.setIcon(QIcon(self.plugin_dir+"/turtle-128.png")) self.dlg.ButtonFlore.setIcon(QIcon(self.plugin_dir+"/flower.png")) self.dlg_F.vider_faune.clicked.connect(lambda:self.vider_la_table('fa')) self.dlg_Flo.vider_flore.clicked.connect(lambda:self.vider_la_table('fl')) self.dlg.ButtonFaune.clicked.connect(self.fenetre_select_faune) self.dlg.ButtonFlore.clicked.connect(self.fenetre_select_flore) #Relier le bouton d'ajout d especefaune à mon SLOT dans DialogSelectFaune transvas_espece. self.dlg_F.btn_ajoutfaune.clicked.connect(lambda: self.dlg_F.transvasajout__espece_faune()) self.dlg_F.btn_rmfaune.clicked.connect(lambda: self.dlg_F.transvasretrait_espece_faune()) self.dlg_Flo.btn_ajoutflore.clicked.connect(lambda: self.dlg_Flo.transvasajout__espece_flore()) self.dlg_Flo.btn_rmflore.clicked.connect(lambda: self.dlg_Flo.transvasretrait_espece_flore()) self.dlg_Flo.btn_visible.clicked.connect(lambda : self.dlg_Flo.visibilite(True)) self.dlg_Flo.btn_invisible.clicked.connect(lambda : self.dlg_Flo.visibilite(False)) self.dlg_F.btn_visible.clicked.connect(lambda : self.dlg_F.visibilite(True)) self.dlg_F.btn_invisible.clicked.connect(lambda : self.dlg_F.visibilite(False)) # Declare instance attributes self.actions = [] self.menu = self.tr(u'&ModuleExport') # TODO: We are going to let the user set this up in a future iteration self.toolbar = self.iface.addToolBar(u'ModuleExport') self.toolbar.setObjectName(u'ModuleExport') #MEP du signal pour vider les selections. self.dlg_F.unselect.clicked.connect(lambda: self.dlg_F.clear()) self.dlg_Flo.unselect.clicked.connect(lambda: self.dlg_Flo.clear()) #MEP du signal pour la fonction de recherche. self.dlg_F.searchButton.clicked.connect(lambda: self.va_chercher('fa')) self.dlg_Flo.searchButton.clicked.connect(lambda: self.va_chercher('fl')) #Connexion des bouton de lancement et nettoyage de table self.dlg.buttonLaunch.clicked.connect(lambda : self.lancement_des_operations()) self.dlg.killButton.clicked.connect(lambda : self.nettoyage_des_tables()) self.dlg.buttonCleanExport.clicked.connect(lambda : self.nettoyage_dossier_export()) # noinspection PyMethodMayBeStatic def tr(self, message): # noinspection PyTypeChecker,PyArgumentList,PyCallByClass return QCoreApplication.translate('ModuleExport', message) def add_action( self, icon_path, text, callback, enabled_flag=True, add_to_menu=True, add_to_toolbar=True, status_tip=None, whats_this=None, parent=None): icon = QIcon(self.plugin_dir+"/icon.png") action = QAction(icon, "Module d'export", parent) action.triggered.connect(callback) action.setEnabled(enabled_flag) if status_tip is not None: action.setStatusTip(status_tip) if whats_this is not None: action.setWhatsThis(whats_this) if add_to_toolbar: self.toolbar.addAction(action) if add_to_menu: self.iface.addPluginToMenu( self.menu, action) self.actions.append(action) #Ajout de notre action a la liste d actions. return action def initGui(self): """Create the menu entries and toolbar icons inside the QGIS GUI.""" icon_path = self.plugin_dir+"/icon.png" self.add_action( icon_path, text=self.tr(u'Module d export'), callback=self.run, whats_this = self.tr(u'Module permettant d\'exporter des données Faune / Flore vers une Shapefile ou un CSV.'), parent=self.iface.mainWindow()) def unload(self): """Removes the plugin menu item and icon from QGIS GUI.""" for action in self.actions: self.iface.removePluginMenu( self.tr(u'&ModuleExport'), action) self.iface.removeToolBarIcon(action) # remove the toolbar del self.toolbar def peuplerComboExport(self): #creation connexion PGQT pour peupler la liste des type_export. self.QConn = QSqlDatabase("QPSQL") self.QConn.setHostName(self.get_host_ip()) self.QConn.setDatabaseName(self.get_db_name()) self.QConn.setUserName(self.get_dbuser_name()) self.QConn.setPassword(self.get_pswrd()) self.QConn.open() #Creation du modele de donnée pour peupler laQcombobox. self.Model_export = QSqlTableModel(db = self.QConn) self.Model_export.setTable("export.w_type_export") self.Model_export.select() #Peupler la Qcombobox self.dlg.comboExport.setModel(self.Model_export) self.dlg.comboExport.setModelColumn(self.Model_export.fieldIndex("nom")) #################################################################################### #################################################################################### ############## ################### ############## ################### ############## FONCTIONS DE RECUP DE DONNEES ################### ############## DANS PGSQL ################### ############## ################### #################################################################################### #################################################################################### def get_table_name(self): #Fonction pour obtenir le nom réel de la couche selectionnée. "Schema.table" table_name = str(self.iface.activeLayer().source()) table_name = table_name.replace(table_name[0:table_name.find('table=')+6], "").replace('"','').split() return table_name[0] def get_db_name(self): #Fonction pour obtenir le nom de la base de données source madb = str(self.iface.activeLayer().source()) madb = madb.replace(madb[0:madb.find('dbname=')+7], "").replace('"','').replace("'","").split() return madb[0] def get_host_ip(self): #Fonction pour obtenir le contenu de Host hname = str(self.iface.activeLayer().source()) hname = hname.replace(hname[0:hname.find('host=')+5], "").replace('"','').replace("'","").split() return hname[0] def get_dbuser_name(self): #Fonction pour obtenir le nom du User usname = str(self.iface.activeLayer().source()) usname = usname.replace(usname[0:usname.find('user=')+5], "").replace('"','').replace("'","").split() return usname[0] def get_pswrd(self): #Fonction pour obtenir le mot de passe pwrd = str(self.iface.activeLayer().source()) pwrd = pwrd.replace(pwrd[0:pwrd.find('password=')+9], "").replace('"','').replace("'","").split() return pwrd[0] def recup_id(self): Mesobjet = self.iface.activeLayer().selectedFeatures () Mesid = ', '.join([unicode(f['id']) for f in Mesobjet ]) return Mesid #################################################################################### #################################################################################### ############## ################### ############## ################### ############## FENETRES DE FAUNE FLORE ################### ############## ################### ############## ################### #################################################################################### #################################################################################### def fenetre_select_faune(self): self.dlg_F.combosearch.addItems([self.tr('taxon'), self.tr('nomcommun'), self.tr('classe'), self.tr('ordre'), self.tr('espece_id'), self.tr('cd_ref'), self.tr('cd_nom'), self.tr('rarepic'), self.tr('menapic')]) idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() #fourniture d un echantillon basique et léger. marequete = """ select w.espece_id, w.taxon, w.nomcommun, w.classe, w.ordre, w.cd_nom, w.cd_ref ,w.rarepic ,w.menapic from bdfauneflore.w_ref_faune w limit 100 """ cur.execute(marequete) for i in cur: self.dlg_F.peupler_table_from_base(self.dlg_F.matablewidget, i) cur.close() self.dlg_F.matablewidget.resizeColumnToContents(1) cur = conn.cursor() marequete2 = """ select w.espece_id, w.taxon, w.nomcommun from export.w_faune_select w """ cur.execute(marequete2) for i in cur: self.dlg_F.peupler_table_from_base_selected(self.dlg_F.tab_faune_selected,i) cur.close() conn.close() #Si on appuie sur ok ou si l'utilisateur ferme la fenetre alors les listes sont vidées graphiquement. #si l'utilisateur clique sur OK alors la liste d esepce selectionnee est transferee dans la table sleect_faune--/--flore. if self.dlg_F.exec_(): self.ajout_ls_espece_pg('fa') if self.dlg_F.close(): self.dlg_F.tab_faune_selected.clearContents() self.dlg_F.matablewidget.clearContents() self.dlg_F.tab_faune_selected.setRowCount(0) self.dlg_F.matablewidget.setRowCount(0) self.dlg_F.combosearch.clear() def fenetre_select_flore(self): self.dlg_Flo.combosearch.addItems([self.tr('taxon'), self.tr('nomcommun'), self.tr('classe'), self.tr('ordre'), self.tr('espece_id'),self.tr('cd_ref'), self.tr('cd_nom'), self.tr('rarepic'), self.tr('menapic')]) idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() #fourniture d un echantillon basique et léger. marequete = """ select w.espece_id, w.taxon, w.nomcommun, w.classe, w.ordre, w.cd_nom, w.cd_ref ,w.rarepic ,w.menapic from bdfauneflore.w_ref_flore w limit 100 """ cur.execute(marequete) for i in cur: self.dlg_Flo.peupler_table_from_base(self.dlg_Flo.matablewidget, i) cur.close() self.dlg_Flo.matablewidget.resizeColumnToContents(1) cur = conn.cursor() marequete2 = """ select w.espece_id, w.taxon, w.nomcommun from export.w_flore_select w """ cur.execute(marequete2) for i in cur: self.dlg_Flo.peupler_table_from_base_selected(self.dlg_Flo.tab_flore_selected,i) cur.close() conn.close() #Si on appuie sur ok ou si l'utilisateur ferme la fenetre alors les listes sont vidées graphiquement. #si l'utilisateur clique sur OK alors la liste d esepce selectionnee est transferee dans la table sleect_faune--/--flore. if self.dlg_Flo.exec_(): self.ajout_ls_espece_pg('fl') if self.dlg_Flo.close(): self.dlg_Flo.tab_flore_selected.clearContents() self.dlg_Flo.matablewidget.clearContents() self.dlg_Flo.tab_flore_selected.setRowCount(0) self.dlg_Flo.matablewidget.setRowCount(0) self.dlg_Flo.combosearch.clear() #################################################################################### ############## FONCTIONS POUR FAUNE FLORE ################### #################################################################################### #Fonction pour vider les tables de flore select et faune select. #Lacement de la suppression en mettant un parametre de type (flore ou faune : fl/fa) def vider_la_table(self,typesuppr): #CONTROLE: transformation du parametre en nom de table. if typesuppr == 'fa': matable = 'export.w_faune_select' elif typesuppr =='fl': matable = 'export.w_flore_select' else: print 'erreur sur la table à vider.' idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() marequete = """ DELETE FROM %s """ % self.tr(matable) print marequete cur.execute(marequete) #passage du parametre pour taper dans daune ou flore. conn.commit() conn.close() #On vide la boite de dialogue. if typesuppr == 'fa': self.dlg_F.tab_faune_selected.clearContents() self.dlg_F.tab_faune_selected.setRowCount(0) if typesuppr == 'fl': self.dlg_Flo.tab_flore_selected.clearContents() self.dlg_Flo.tab_flore_selected.setRowCount(0) def ajout_ls_espece_pg(self,typeadd): #CONTROLE: transformation du parametre en noms de tables. if typeadd == 'fa': matable_select = self.tr('export.w_faune_select') ma_wref = self.tr('bdfauneflore.w_ref_faune') #Création d'une liste convertie en string + guillemets + parentheses pour la passer en parametre dans la requeet SQL. compterow = self.dlg_F.tab_faune_selected.rowCount() malisteid=[] for i in xrange(0,compterow): malisteid.append(self.dlg_F.tab_faune_selected.item(i,0).text()) elif typeadd =='fl': matable_select = self.tr('export.w_flore_select') ma_wref = self.tr('bdfauneflore.w_ref_flore') #Création d'une liste convertie en string + guillemets + parentheses pour la passer en parametre dans la requeet SQL. compterow = self.dlg_Flo.tab_flore_selected.rowCount() malisteid=[] for i in xrange(0,compterow): malisteid.append(self.dlg_Flo.tab_flore_selected.item(i,0).text()) if malisteid: #Syntaxe pour vérifier que la liste ne soit pas vide. malisteid = "', '".join(malisteid) malisteid = self.tr("('" + malisteid + "')") idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() #On vide la table pour éviter d'insérer des doublons (optimisation) #TODO: Ajouter un Vaccum pour éviter une surcharge del a table à long terme. marequete1=""" delete from %s """ %matable_select cur.execute(marequete1) conn.commit() cur.close() cur=conn.cursor() #Envoi de nos parametres dans la liste espece_select especeid = '(espece_id' marequete2 =""" insert into %s %s, taxon, nomcommun%s select espece_id, taxon, nomcommun from %s bdf where bdf.espece_id in %s """ % (matable_select, self.tr('(espece_id'), self.tr(')'), ma_wref, malisteid) print marequete2 cur.execute(marequete2) conn.commit() conn.close #Fonction pour lancer la recherche d'éléments dans la liste d'espèce. def va_chercher(self, typecherche): if typecherche == 'fa': matable_select = self.tr('export.w_faune_select') ma_wref = self.tr('bdfauneflore.w_ref_faune') maliste_wref = self.dlg_F.matablewidget marecherche = self.dlg_F.search_bar.text() moncritere = self.dlg_F.combosearch.currentText() elif typecherche == 'fl': matable_select = self.tr('export.w_flore_select') ma_wref = self.tr('bdfauneflore.w_ref_flore') maliste_wref = self.dlg_Flo.matablewidget marecherche = self.dlg_Flo.search_bar.text() moncritere = self.dlg_Flo.combosearch.currentText() if len(marecherche)<3: return else: maliste_wref.clearContents() maliste_wref.setRowCount(0) marecherche = '%' + marecherche + '%' idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() marequete = """ select w.espece_id, w.taxon, w.nomcommun, w.classe, w.ordre, w.cd_nom, w.cd_ref ,w.rarepic ,w.menapic from %s w where %s%s%s iLIKE '%s' """ % (ma_wref, 'CAST(', moncritere, ' AS TEXT)', marecherche) # le ILIKE permet une recherche insensible à la casse, mais augmente considérablement le temps de requetage. cur.execute(marequete) if typecherche == 'fl': for i in cur: self.dlg_Flo.peupler_table_from_base(self.dlg_Flo.matablewidget,i) #Trier les résultats par taxon. self.dlg_Flo.matablewidget.sortItems(1) elif typecherche =='fa': for i in cur: self.dlg_F.peupler_table_from_base(self.dlg_F.matablewidget,i) self.dlg_F.matablewidget.sortItems(1) cur.close() conn.close() #################################################################################### #################################################################################### ############## ################### ############## ################### ############## LANCE-REQUETE ################### ############## ################### ############## ################### #################################################################################### #################################################################################### def _1_requeteGenerale(self): idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) ########################## #APPEL DE LA PARTIE 1 / 3# ########################## conn = psycopg2.connect(idconnexion) cur = conn.cursor() marequete = """ SELECT export._1_recupdesid('{%s}'::int[]) ; """ % self.recup_id() cur.execute(marequete) conn.commit() #DEBUG #Affichage des log PG #for notice in conn.notices: #print notice conn.close() print marequete def _2_moissonneuse_bateuse(self): idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) #Récupération des DATES à passer en param #Conservation dun structure lourde en yyyy pour faciliter un eventuel passage en jj.mm.yyyy. if self.dlg.radioSaisie.isChecked() == True: self.datemin = self.dlg.date_min_pec.date().toString("dd-MM-yyyy") self.datemax = self.dlg.date_max_pec.date().toString("dd-MM-yyyy") self.booldate = 'True' elif self.dlg.radioObs.isChecked() == True: self.datemin = self.dlg.date_min_pec.date().toString("yyyy") self.datemax = self.dlg.date_max_pec.date().toString("yyyy") self.booldate ='False' #Récupération des ESPECES en checkant le RadioButton. if self.dlg.rad_all_espece.isChecked() == True: self.boolespece = 'False' elif self.dlg.rad_slc_espece.isChecked()== True: self.boolespece = 'True' #Verification de si l on desire toute la flore ou toute la faune. if self.dlg.checkFlore.isChecked() == True: self.boolflore = 'True' else: self.boolflore = 'False' if self.dlg.checkFaune.isChecked() == True: self.boolfaune = 'True' else: self.boolfaune = 'False' #Vérification de la checkbox du parametre pour définir si l'on veut les ESPECES VALIDES. if self.dlg.obj_valide.isChecked() == True: self.boolvalid = 'True' elif self.dlg.obj_valide.isChecked() == False: self.boolvalid = 'False' else: return #Vérification de la checkbox de parametres pour définir si l'on veut les éspèces PRESENTES. if self.dlg.obj_present.isChecked() == True: self.boolpresent = 'True' elif self.dlg.obj_present.isChecked() == False: self.boolpresent = 'False' else: return #Vérification de la checkbox de parametres pour définir si l'on veut les données externes. if self.dlg.radioExt.isChecked() == True: self.boolexterne = 'True' elif self.dlg.radioExt.isChecked() == False: self.boolexterne = 'False' else: return ########################## #APPEL DE LA PARTIE 2 / 3# ########################## conn = psycopg2.connect(idconnexion) cur = conn.cursor() marequete = """ SELECT export._2_filtrage(%s, %s, %s, %s, '%s', '%s', %s, %s, %s) ; """ % (self.boolespece, self.boolfaune, self.boolflore, self.booldate, self.datemin, self.datemax, self.boolvalid, self.boolpresent, self.boolexterne) cur.execute(marequete) conn.commit() #DEBUG #Affichage des log PG #for notice in conn.notices: #print notice conn.close() print marequete #Appeler la fonction d export qui genere TABLES + CSV def _3_Fichier_CSV(self, typeExport): #Définition du nom par defaut. nomCsv = "\\ST_PRINCIPAL.csv" idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() #fonction géénrique de recuperation dans notre table de type d export la fonction associée au type. marequete = """select fonction from export.w_type_export where nom = '%s' """ % typeExport cur.execute(marequete) myfunc = cur.fetchone()[0] #Appel de la fonction en replacant le nom de variable par la variable en parametre. marequete2 = "SELECT " + str(myfunc) cur.execute(marequete2) conn.commit() conn.close() #Fonction d Export SIG au format SHP. def _4_Export_SIG(self, typeExport): idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() marequete = """select ogr2ogr from export.w_type_export where nom = '%s' """ % typeExport cur.execute(marequete) myOgr = cur.fetchone()[0] #Chercher le .bat à lancer. monpath = "S:/00_MODULE_EXPORT_BDCEN/batfiles/" print os.path.normpath(monpath + myOgr) call(os.path.normpath(monpath + myOgr),shell=True) def _5_Metadonne(self): idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() #Création du XML avec parametres adéquats. #Création de mon arbre XML en mémoire VIVE. modelExport = minidom.Document() #Création de ma racine. ROOT newroot = modelExport.createElement('root') #On ajoute le root a l arbre modelExport.appendChild(newroot) #Création de la grande secton de paramexport paramexport = modelExport.createElement('parametres_d_export') #On ajoute la paramexport a la root newroot.appendChild(paramexport) #Création de OBJETSSIG objetsig = modelExport.createElement('ObjetsSIG') paramexport.appendChild(objetsig) #Création des ENTITE dans objetSIG. #Remplacer liste par mes id. self.iface.activeLayer().selectedFeatures () for i in self.iface.activeLayer().selectedFeatures(): entite = modelExport.createElement('id') entite.setAttribute('ID', str(i[0])) entite.setAttribute('libelle', str(i[1])) objetsig.appendChild(entite) #Création de la section de PARAMETRE D OBJETS paramobjets = modelExport.createElement('paramobjets') #La donnée est-elle valide? if self.boolvalid == True: nodeValid = "Valide uniquement" else: nodeValid ="Valide et invalide" paramobjets.setAttribute('Validite_de_la_donnee', nodeValid) #La Présence de l espece est-elle une certitude? if self.boolpresent == True: nodePresabs = "Présence attestee" else: nodePresabs = "Absence" paramobjets.setAttribute('Certitude_de_presence', nodePresabs) #La donne externe est elle exclue? if self.boolexterne == True: nodeExt = "Inclusion" else: nodeExt = "Exclusion" paramobjets.setAttribute('Donnée_externe', nodeExt) paramexport.appendChild(paramobjets) #Création de la DATE. date = modelExport.createElement('param_date') #La date prote sur? if self.booldate == True: nodeDate = "La saisie" else: nodeDate = "La date d'observation" date.setAttribute('date_portant_sur', nodeDate) #date min de prise en compte date.setAttribute('date_minimale_de_prise_en_compte', str(self.datemin)) #date max de prise en compte date.setAttribute('date_maximale_de_prise_en_compte', str(self.datemax)) paramobjets.appendChild(date) ############################################################################ # RESUME_EXPORT resumexport = modelExport.createElement("Resume_export") typeexp = self.dlg.comboExport.currentText() typeexp = typeexp.encode('UTF-8','ignore') resumexport.setAttribute('Type_export',typeexp ) newroot.appendChild(resumexport) #Qui est destinatiare? ledestina= modelExport.createElement("Destinataire") #nom export nomlabel = str(self.dlg.libele.text()) nomlabel= nomlabel.encode('UTF-8', 'ignore') ledestina.setAttribute('libele_export', nomlabel) #interlocuteur nomdest = str(self.dlg.destinataire.text()) nomdest=nomdest.encode('UTF-8', 'ignore') ledestina.setAttribute('interlocuteur', nomdest) #Structure nomstruc = str(self.dlg.structure.text()) nomstruc=nomstruc.encode('UTF-8', 'ignore') ledestina.setAttribute('structure', nomstruc) resumexport.appendChild(ledestina) #STATISTIQUES #Somme individus statists = modelExport.createElement("stats_especes") marequete = "SELECT COUNT(i.id_perm) FROM export.r_id_all i WHERE i.presence IS TRUE" cur.execute(marequete) totalent = str(cur.fetchone()[0]) statists.setAttribute("Nombre_total_d_entite",totalent) #Somme taxons marequete = """SELECT SUM (count) FROM (SELECT COUNT (DISTINCT t.taxon) FROM export.r_id_all i, bdfauneflore.t_bilan_faune t WHERE i.id_perm = t.id_perm AND i.presence IS TRUE UNION SELECT COUNT (DISTINCT t.taxon) FROM export.r_id_all i, bdfauneflore.t_bilan_flore t WHERE i.id_perm = t.id_perm AND i.presence IS TRUE) AS x""" cur.execute(marequete) totalent = str(cur.fetchone()[0]) statists.setAttribute("Nombre_total_de_taxons", totalent) resumexport.appendChild(statists) #NB FAUNE EXPORT #compte d individus enfa = modelExport.createElement("faune_exportees") marequete= "SELECT COUNT (i.id_perm) FROM \ export.r_id_all i, bdfauneflore.t_bilan_faune t WHERE i.id_perm = t.id_perm AND i.presence IS TRUE" cur.execute(marequete) nbenfa = str(cur.fetchone()[0]) enfa.setAttribute('nombre_d_entites', nbenfa) # compte d especes. marequete= "SELECT COUNT (DISTINCT t.taxon) FROM \ export.r_id_all i, bdfauneflore.t_bilan_faune t WHERE i.id_perm = t.id_perm AND i.presence IS TRUE" cur.execute(marequete) nbenfa = str(cur.fetchone()[0]) enfa.setAttribute('nombre_d_especes', nbenfa) statists.appendChild(enfa) #LISTE TAXONS if nbenfa !=0: marequete= "SELECT DISTINCT t.taxon FROM export.r_id_all i,\ bdfauneflore.t_bilan_faune t WHERE i.id_perm = t.id_perm AND i.presence IS TRUE" cur.execute(marequete) for i in cur: nbesfa = i[0] childEnfa = modelExport.createElement("taxon") if nbesfa is None:#resolution de bug: si type est null alors valeur arbitraire childEnfa.setAttribute('Taxon', "NONETYPE") enfa.appendChild(childEnfa) else: nbesfa = nbesfa.encode('UTF-8','ignore')#necessite de reencoder childEnfa.setAttribute('Taxon', nbesfa) enfa.appendChild(childEnfa) #NB FLORE EXPORT #nb entite flore exportees efle = modelExport.createElement("flore_exportees") marequete= "SELECT COUNT (i.id_perm) FROM \ export.r_id_all i, bdfauneflore.t_bilan_flore t WHERE i.id_perm = t.id_perm AND i.presence IS TRUE" cur.execute(marequete) nbefle = str(cur.fetchone()[0]) efle.setAttribute('nombre_d_entites', nbefle) # compte d especes. marequete= "SELECT COUNT (DISTINCT t.taxon) FROM \ export.r_id_all i, bdfauneflore.t_bilan_flore t WHERE i.id_perm = t.id_perm AND i.presence IS TRUE" cur.execute(marequete) nbefle = str(cur.fetchone()[0]) efle.setAttribute('nombre_d_especes', nbefle) statists.appendChild(efle) #LISTE TAXON if nbefle != 0: marequete= "SELECT DISTINCT t.taxon FROM export.r_id_all i,\ bdfauneflore.t_bilan_flore t WHERE i.id_perm = t.id_perm AND i.presence IS TRUE" cur.execute(marequete) for i in cur: nbefle = i[0] childEsle = modelExport.createElement("taxon") if nbefle is None: childEsle.setAttribute('Taxon', "NONETYPE") efle.appendChild(childEsle) else: nbefle = nbefle.encode('UTF-8','ignore') childEsle.setAttribute('Taxon', nbefle) efle.appendChild(childEsle) conn.commit() conn.close() ############################################################################ #DESCRIPTION DE LA DONNEE descdata = modelExport.createElement("Description_des_donnees") newroot.appendChild(descdata) # dateexport # resume des formats lesformats = modelExport.createElement("formats") dateExport = time.strftime("%d/%m/%Y") lesformats.setAttribute('date_export',dateExport) descdata.appendChild(lesformats) # Recap du CSV csv_xml = modelExport.createElement("csv_format") #Encodage csv_xml.setAttribute('encodage',"UTF-8") #separateur csv_xml.setAttribute('separateur',";") lesformats.appendChild(csv_xml) #sig_format sig_xml = modelExport.createElement("sig_format") # shapefile? sig_xml.setAttribute('extension',"Shapefile") # SCR? sig_xml.setAttribute('SCR',"Lambert 93") lesformats.appendChild(sig_xml) sortieXML = modelExport.toprettyxml() ecrirexml = open(os.path.normpath('S:/00_MODULE_EXPORT_BDCEN/exports/exportmedatada.xml'), 'w') ecrirexml.write(sortieXML) ecrirexml.close() #################################################################################### ######################### FONCTIONS NETTOYAGE ###################################### #################################################################################### def nettoyage_des_tables(self): idconnexion = ("dbname=%s host=%s user=%s password=%s") % (self.get_db_name(), self.get_host_ip(), self.get_dbuser_name(), self.get_pswrd()) conn = psycopg2.connect(idconnexion) cur = conn.cursor() marequete = """select export.kill_table()""" cur.execute(marequete) conn.commit() conn.close() QMessageBox.information(self.dlg,'Information',u'Nettoyage des tables effectué.') def nettoyage_dossier_export(self): mondossier = os.path.normpath('S:/00_MODULE_EXPORT_BDCEN/exports') cpt = 0 listdel =[] for filename in os.listdir(mondossier) : cpt+=1 listdel.append(os.path.split(mondossier + '/' + filename)[1]) os.remove(mondossier + '/' + filename) elemsuppr = u"%s éléments ont étés supprimés:" %cpt QMessageBox.information(self.dlg,'Information',u'Nettoyage du dossier d\'export effectué.' + '\n' + elemsuppr \ + "\n" + ("\n".join(listdel))) #################################################################################### #################################################################################### ############## ################### ############## ################### ############## RUN ################### ############## ################### ############## ################### #################################################################################### #################################################################################### def lancement_des_operations(self): #Structure de controle date de saisie if self.dlg.radioSaisie.isChecked() == True: if self.dlg.date_min_pec.date() > self.dlg.date_max_pec.date(): QMessageBox.warning(self.dlg,'Information',u'La date minimum de saisie doit être inférieure à la maximale') return #Structure de controle date d observation if self.dlg.radioObs.isChecked() == True: if self.dlg.date_min_pec.date() > self.dlg.date_max_pec.date(): QMessageBox.warning(self.dlg,'Information',u'La date minimum d\'observation doit être inférieure à la maximale') return self.dlg.progressBar.show() self.dlg.avancee.show() self.dlg.avancee.setText(u'1.Procédure de filtrage géographique en cours.') self._1_requeteGenerale() self.dlg.progressBar.setValue(25) self.dlg.avancee.setText(u'2.Procédure de filtrage attributaire en cours.') self._2_moissonneuse_bateuse() self.dlg.progressBar.setValue(40) self.dlg.avancee.setText(u"3.Procédure de génération des tables et CSV en cours.") self._3_Fichier_CSV(typeExport = self.dlg.comboExport.currentText()) self.dlg.progressBar.setValue(50) self.dlg.avancee.setText(u"4.Procédure d'export des éléments géographiques en cours") self._4_Export_SIG(typeExport = self.dlg.comboExport.currentText()) self.dlg.progressBar.setValue(85) self.dlg.avancee.setText(u"5.Procédure de génération de métadonnées XML en cours") self._5_Metadonne() self.dlg.progressBar.setValue(100) self.dlg.avancee.setText(u"Export terminé") print self.get_db_name() print self.get_host_ip() print self.get_table_name() print self.get_dbuser_name() print self.get_pswrd() QMessageBox.information(self.dlg,'Information',u'L\'export a été réalisé avec succès!') if self.dlg.checkClean.isChecked(): self.nettoyage_des_tables() self.dlg.progressBar.hide() self.dlg.avancee.hide() def run(self): #CONTROLE : verifier si une couche est bien selectionnée if self.iface.activeLayer() == None : QMessageBox.information(self.iface.mainWindow(),'Information',u'Veuillez selectionner une couche à connecter') return else : #CONTROLE : : Si couche selectioné est un raster => exit #MODIF LOIC if self.iface.activeLayer().type() == 2 or self.iface.activeLayer().type() == 1: QMessageBox.information(self.iface.mainWindow(),'Information',u'Veuillez selectionner une couche vecteur') return #CONTROLE : verifier si des objets sont selectionnés if self.iface.activeLayer().selectedFeatureCount () <= 0 : QMessageBox.information(self.iface.mainWindow(),'Information',u'Vous devez selectionner au moins un objet') return #CONTROLE : Si ma couche ne s'appelle pas z_export, alors erreur. if self.iface.activeLayer().name() != u"z_export" : QMessageBox.information(self.iface.mainWindow(),'Information',u'Vous devez selectionner la couche z_export') return self.peuplerComboExport() self.dlg.show()
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.