Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad49b80b5a | ||
|
|
dbe918cfcf | ||
|
|
f692414698 | ||
|
|
75ec1c0191 | ||
|
|
ca79b96958 | ||
|
|
ce85b09e11 | ||
|
|
8e84d39165 | ||
|
|
72e91a527a | ||
|
|
b3eeb2d60c | ||
|
|
ea6fb7c870 | ||
|
|
1aee5d90d7 | ||
|
|
901d1b9441 | ||
|
|
cd4d320614 | ||
|
|
c7ff62c717 | ||
|
|
49b78e58ac | ||
|
|
1a17bb7d7c | ||
|
|
e2e062ed12 | ||
|
|
a90a45a0b9 | ||
|
|
80a563357d | ||
|
|
be3a082f93 | ||
|
|
cbe6952c9a | ||
|
|
bbb41400e5 | ||
|
|
d92744fe6b | ||
|
|
a7d7ea83f4 | ||
|
|
622a54e7b9 | ||
|
|
55b0826248 | ||
|
|
3141ccb15c | ||
|
|
3301c1395d | ||
|
|
7c46818923 | ||
|
|
b05a047a87 | ||
|
|
65b24ff13d | ||
|
|
ec175643bc | ||
|
|
08dda9ebb0 | ||
|
|
1fbfb009cf | ||
|
|
1c6eaa82be | ||
|
|
50902b8664 | ||
|
|
3490c51112 | ||
|
|
f79642c826 | ||
|
|
f59fac229e | ||
|
|
a3cf4248cf | ||
|
|
94d4ff85ab | ||
|
|
947a6ddd18 | ||
|
|
cf4cfc4636 | ||
|
|
ea796cf346 | ||
|
|
a37e46cfc9 | ||
|
|
9129ad279b | ||
|
|
a02ab6376e | ||
|
|
69da8e8e82 | ||
|
|
161505e4a1 | ||
|
|
873a2a0ec7 | ||
|
|
df07e9ffdb | ||
|
|
36f1145d81 | ||
|
|
9519dee924 | ||
|
|
0e2e8a555d | ||
|
|
bff19fd919 | ||
|
|
ff71cdf577 | ||
|
|
a7c2f6c169 | ||
|
|
2377238e8c | ||
|
|
bd82fb6745 | ||
|
|
a08679f0fa | ||
|
|
66e0ddc496 | ||
|
|
99f059b649 | ||
|
|
87a1b82ee9 | ||
|
|
7c38bc1326 | ||
|
|
36e55f268c | ||
|
|
7dd203f520 | ||
|
|
7fceab83bb | ||
|
|
ef182560a6 | ||
|
|
1b7803a33f | ||
|
|
32a4f593a8 | ||
|
|
97c7702312 | ||
|
|
972e815f1e | ||
|
|
17d56dd4dc | ||
|
|
d25ce2b893 | ||
|
|
5570519e0d | ||
|
|
7a3f223024 | ||
|
|
5e71a891d0 | ||
|
|
0f6b4224c3 | ||
|
|
d2cc8e2802 | ||
|
|
c1b771cef6 | ||
|
|
1458982089 | ||
|
|
af7a63e728 | ||
|
|
89b5e326d1 | ||
|
|
94eaa2e272 | ||
|
|
e6d7917a35 | ||
|
|
da1309f415 | ||
|
|
e566ce6015 | ||
|
|
6169664ae4 | ||
|
|
654a8f579f |
@@ -17,3 +17,5 @@
|
|||||||
#ReIgnore
|
#ReIgnore
|
||||||
**/__pycache__
|
**/__pycache__
|
||||||
**/test/
|
**/test/
|
||||||
|
PythonSQL.py
|
||||||
|
StyleLayer.py
|
||||||
@@ -27,10 +27,14 @@ import os
|
|||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
plugin_path,
|
||||||
resources_path,
|
resources_path,
|
||||||
|
pyperclip,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
|
pyperclip()
|
||||||
|
|
||||||
from .canvas_editor import AutoMap_Editor
|
from .canvas_editor import AutoMap_Editor
|
||||||
from .about_form import AutoMapAboutDialog
|
from .style_invoke import AutoMap_Style
|
||||||
|
from .about_form import AboutDialog
|
||||||
|
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
|
|
||||||
@@ -38,6 +42,7 @@ class PgAutoMap:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
""" Constructor. """
|
""" Constructor. """
|
||||||
self.canvas_editor = None
|
self.canvas_editor = None
|
||||||
|
self.style_dock = None
|
||||||
# self.issues = None
|
# self.issues = None
|
||||||
self.provider = None
|
self.provider = None
|
||||||
self.locator_filter = None
|
self.locator_filter = None
|
||||||
@@ -73,10 +78,16 @@ class PgAutoMap:
|
|||||||
if not self.canvas_editor:
|
if not self.canvas_editor:
|
||||||
self.canvas_editor = AutoMap_Editor()
|
self.canvas_editor = AutoMap_Editor()
|
||||||
|
|
||||||
|
|
||||||
self.automap_action = QAction(icon, 'CenRa_AutoMap',None)
|
self.automap_action = QAction(icon, 'CenRa_AutoMap',None)
|
||||||
self.toolBar.addAction(self.automap_action)
|
self.toolBar.addAction(self.automap_action)
|
||||||
self.automap_action.triggered.connect(self.open_editor)
|
self.automap_action.triggered.connect(self.open_editor)
|
||||||
|
|
||||||
|
if not self.style_dock:
|
||||||
|
self.style_dock = AutoMap_Style()
|
||||||
|
|
||||||
|
if os.environ['USERNAME'] == 'tlaveille' or os.environ['USERNAME'] == 'lpoulin' or os.environ['USERNAME'] == 'rclement':
|
||||||
|
iface.addDockWidget(Qt.LeftDockWidgetArea, self.style_dock)
|
||||||
|
|
||||||
'''
|
'''
|
||||||
if not self.locator_filter:
|
if not self.locator_filter:
|
||||||
self.locator_filter = LocatorFilter(iface)
|
self.locator_filter = LocatorFilter(iface)
|
||||||
@@ -114,7 +125,7 @@ class PgAutoMap:
|
|||||||
"""
|
"""
|
||||||
About dialog
|
About dialog
|
||||||
"""
|
"""
|
||||||
dialog = AutoMapAboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec_()
|
dialog.exec_()
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
|
|||||||
@@ -2,3 +2,5 @@
|
|||||||
---
|
---
|
||||||
Outil de création de mise en page,
|
Outil de création de mise en page,
|
||||||
Permet de préprogramé des mise en page pour les mêtre à disposition des collégue.
|
Permet de préprogramé des mise en page pour les mêtre à disposition des collégue.
|
||||||
|
|
||||||
|
> [Point de départ de création du plugin](https://github.com/CEN-Nouvelle-Aquitaine/MapCEN)
|
||||||
@@ -12,12 +12,12 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
|||||||
os.path.join(
|
os.path.join(
|
||||||
str(Path(__file__).resolve().parent),
|
str(Path(__file__).resolve().parent),
|
||||||
'tools/ui',
|
'tools/ui',
|
||||||
'CenRa_AutoMap_about_form.ui'
|
'CenRa_about_form.ui'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class AutoMapAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
class AboutDialog(QDialog, ABOUT_FORM_CLASS):
|
||||||
|
|
||||||
""" About - Let the user display the about dialog. """
|
""" About - Let the user display the about dialog. """
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ from qgis.PyQt.QtWebKitWidgets import QWebPage
|
|||||||
from qgis.PyQt.QtWidgets import (
|
from qgis.PyQt.QtWidgets import (
|
||||||
QDialog,
|
QDialog,
|
||||||
QAction,
|
QAction,
|
||||||
|
QMessageBox,
|
||||||
|
QPushButton,
|
||||||
QDockWidget,
|
QDockWidget,
|
||||||
QFileDialog,
|
QFileDialog,
|
||||||
QInputDialog,
|
QInputDialog,
|
||||||
@@ -58,21 +60,17 @@ from qgis.PyQt.QtWidgets import (
|
|||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
)
|
)
|
||||||
from PyQt5 import QtGui
|
from PyQt5 import QtGui
|
||||||
|
from PyQt5 import QtWidgets
|
||||||
from qgis.PyQt.QtXml import QDomDocument
|
from qgis.PyQt.QtXml import QDomDocument
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import glob
|
import glob
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
login_base,
|
|
||||||
send_issues,
|
send_issues,
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
from .issues import CenRa_Issues
|
||||||
|
|
||||||
from .tools.mises_en_pages import carto_standard
|
|
||||||
from .tools.mises_en_pages import full_page
|
|
||||||
from .tools.mises_en_pages import demo
|
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
EDITOR_CLASS = load_ui('CenRa_AutoMap_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_AutoMap_base.ui')
|
||||||
@@ -125,6 +123,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
path = path+'/'+i
|
path = path+'/'+i
|
||||||
self.tabWidget.setStyleSheet('background-image: url('+path+'/tools/bg/Capture.png);')
|
self.tabWidget.setStyleSheet('background-image: url('+path+'/tools/bg/Capture.png);')
|
||||||
|
|
||||||
|
self.verticalScrollBar.hide()
|
||||||
self.commandLinkButton.clicked.connect(self.chargement_qpt)
|
self.commandLinkButton.clicked.connect(self.chargement_qpt)
|
||||||
self.radioButton_9.clicked.connect(self.statu_atlas)
|
self.radioButton_9.clicked.connect(self.statu_atlas)
|
||||||
self.radioButton_10.clicked.connect(self.statu_source)
|
self.radioButton_10.clicked.connect(self.statu_source)
|
||||||
@@ -135,6 +134,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.commandLinkButton_2.clicked.connect(self.load_ortho)
|
self.commandLinkButton_2.clicked.connect(self.load_ortho)
|
||||||
self.commandLinkButton_3.clicked.connect(self.load_osm)
|
self.commandLinkButton_3.clicked.connect(self.load_osm)
|
||||||
self.CustomeLogo.clicked.connect(self.deflogoteck)
|
self.CustomeLogo.clicked.connect(self.deflogoteck)
|
||||||
|
self.verticalScrollBar.valueChanged.connect(self.moveFrame)
|
||||||
|
|
||||||
## On ajoute le nom des templates à la liste déroulante de l'onglet "mises en page" :
|
## On ajoute le nom des templates à la liste déroulante de l'onglet "mises en page" :
|
||||||
mises_en_page = []
|
mises_en_page = []
|
||||||
@@ -194,6 +194,14 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.hide_source()
|
self.hide_source()
|
||||||
self.hide_atlas()
|
self.hide_atlas()
|
||||||
|
|
||||||
|
def wheelEvent(self,event):
|
||||||
|
if (event.angleDelta().y() >= 1):
|
||||||
|
vsb = self.verticalScrollBar.value()+20
|
||||||
|
else:
|
||||||
|
vsb = self.verticalScrollBar.value()-20
|
||||||
|
self.verticalScrollBar.setValue(vsb)
|
||||||
|
def moveFrame(self):
|
||||||
|
self.frame.move(self.frame.x(),self.verticalScrollBar.value())
|
||||||
def update_logo_library(self):
|
def update_logo_library(self):
|
||||||
self.mComboBox_4.clear()
|
self.mComboBox_4.clear()
|
||||||
logo_library = []
|
logo_library = []
|
||||||
@@ -325,6 +333,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.comboBox_6.clear()
|
self.comboBox_6.clear()
|
||||||
self.comboBox_7.clear()
|
self.comboBox_7.clear()
|
||||||
|
|
||||||
|
if (self.s.value("automap/prenom_nom", "1", type=str) != "1"):
|
||||||
|
self.lineEdit_5.setText(self.s.value("automap/prenom_nom", 1, type=str))
|
||||||
couches = []
|
couches = []
|
||||||
couche_vecteur = ['']
|
couche_vecteur = ['']
|
||||||
mapThemes = ['']
|
mapThemes = ['']
|
||||||
@@ -438,7 +448,18 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
doc = QDomDocument()
|
doc = QDomDocument()
|
||||||
doc.setContent(template_content)
|
doc.setContent(template_content)
|
||||||
self.layout.loadFromTemplate(doc, QgsReadWriteContext(), True)
|
self.layout.loadFromTemplate(doc, QgsReadWriteContext(), True)
|
||||||
self.layout.setName(layout_name)
|
|
||||||
|
try:
|
||||||
|
cutLayout = layout_name.index("¶")
|
||||||
|
except:
|
||||||
|
cutLayout = 0
|
||||||
|
|
||||||
|
if cutLayout >= 1:
|
||||||
|
self.layout.setName(layout_name)
|
||||||
|
titre_layout_name=layout_name[:cutLayout]
|
||||||
|
else:
|
||||||
|
self.layout.setName(layout_name)
|
||||||
|
titre_layout_name = layout_name
|
||||||
|
|
||||||
if self.radioButton_6.isChecked() and self.radioButton_7.isChecked():
|
if self.radioButton_6.isChecked() and self.radioButton_7.isChecked():
|
||||||
logo_div = A4_size['Portrait']['RIGHT']
|
logo_div = A4_size['Portrait']['RIGHT']
|
||||||
@@ -480,11 +501,12 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.position_map.setItemRotation(self.template_parameters['Carte_2_rotate'])
|
self.position_map.setItemRotation(self.template_parameters['Carte_2_rotate'])
|
||||||
self.position_map.attemptResize(self.template_parameters['Carte_2_size'])
|
self.position_map.attemptResize(self.template_parameters['Carte_2_size'])
|
||||||
self.position_map.attemptMove(self.template_parameters['Carte_2_locals'])
|
self.position_map.attemptMove(self.template_parameters['Carte_2_locals'])
|
||||||
overviewitem = QgsLayoutItemMapOverviewStack(self.position_map)
|
self.position_map.overview().setLinkedMap(self.map_modele_test)
|
||||||
map_overview = self.position_map.overview()
|
#overviewitem = QgsLayoutItemMapOverviewStack(self.position_map)
|
||||||
map_overview.setLinkedMap(self.map_modele_test)
|
#map_overview = self.position_map.overview()
|
||||||
map_overview.setCentered(True)
|
#map_overview.setLinkedMap(self.map_modele_test)
|
||||||
overviewitem.addOverview(map_overview)
|
#map_overview.setCentered(True)
|
||||||
|
#overviewitem.addOverview(map_overview)
|
||||||
|
|
||||||
self.position_map.refresh()
|
self.position_map.refresh()
|
||||||
self.map_modele_test.setFrameEnabled(True)
|
self.map_modele_test.setFrameEnabled(True)
|
||||||
@@ -502,7 +524,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
## Ajout d'un titre à la mise en page
|
## Ajout d'un titre à la mise en page
|
||||||
title = QgsLayoutItemLabel(self.layout)
|
title = QgsLayoutItemLabel(self.layout)
|
||||||
self.layout.addLayoutItem(title)
|
self.layout.addLayoutItem(title)
|
||||||
titre = layout_name
|
titre = titre_layout_name
|
||||||
title.setText(titre)
|
title.setText(titre)
|
||||||
title.setFont(QFont("Calibri", 15, QFont.Bold))
|
title.setFont(QFont("Calibri", 15, QFont.Bold))
|
||||||
title.setItemRotation(self.template_parameters['Titre_rotate'])
|
title.setItemRotation(self.template_parameters['Titre_rotate'])
|
||||||
@@ -524,7 +546,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
if self.radioButton_9.isChecked() == 1:
|
if self.radioButton_9.isChecked() == 1:
|
||||||
titre = titre + ' [%' + self.comboBox_4.currentText() + '%]'
|
titre = titre + ' [%' + self.comboBox_4.currentText() + '%]'
|
||||||
subtitle.setText(titre)
|
subtitle.setText(titre)
|
||||||
subtitle.setFont(QFont("MS Shell Dlg 2", 10))
|
subtitle.setFont(QFont("Calibri", 10))
|
||||||
subtitle.setItemRotation(self.template_parameters['Sous_titre_rotate'])
|
subtitle.setItemRotation(self.template_parameters['Sous_titre_rotate'])
|
||||||
subtitle.attemptResize(self.template_parameters['Sous_titre_size'])
|
subtitle.attemptResize(self.template_parameters['Sous_titre_size'])
|
||||||
subtitle.attemptMove(self.template_parameters['Sous_titre_locals'])
|
subtitle.attemptMove(self.template_parameters['Sous_titre_locals'])
|
||||||
@@ -593,7 +615,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
layertreelayer = root.findLayer(layer.id())
|
layertreelayer = root.findLayer(layer.id())
|
||||||
|
|
||||||
# get the parent of the layer tree layer (layer tree root, or group)
|
# get the parent of the layer tree layer (layer tree root, or group)
|
||||||
parent = layertreelayer.parent()
|
if layertreelayer != None:
|
||||||
|
parent = layertreelayer.parent()
|
||||||
|
|
||||||
# if the parent is a group and has a name, find it and remove the layer
|
# if the parent is a group and has a name, find it and remove the layer
|
||||||
if isinstance(parent, QgsLayerTreeGroup) and parent.name():
|
if isinstance(parent, QgsLayerTreeGroup) and parent.name():
|
||||||
@@ -630,6 +653,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.scalebarnumeric_qpt.setNumberOfSegments(2)
|
self.scalebarnumeric_qpt.setNumberOfSegments(2)
|
||||||
self.scalebarnumeric_qpt.setNumberOfSegmentsLeft(0)
|
self.scalebarnumeric_qpt.setNumberOfSegmentsLeft(0)
|
||||||
|
|
||||||
|
self.scalebarnumeric_qpt.setFont(QFont("Calibri", 12))
|
||||||
self.scalebarnumeric_qpt.attemptMove(self.template_parameters['Echelle_locals'])
|
self.scalebarnumeric_qpt.attemptMove(self.template_parameters['Echelle_locals'])
|
||||||
self.scalebarnumeric_qpt.attemptResize(self.template_parameters['Echelle_size'])
|
self.scalebarnumeric_qpt.attemptResize(self.template_parameters['Echelle_size'])
|
||||||
self.scalebarnumeric_qpt.setItemRotation(self.template_parameters['Echelle_rotate'])
|
self.scalebarnumeric_qpt.setItemRotation(self.template_parameters['Echelle_rotate'])
|
||||||
@@ -649,6 +673,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.scalebar_qpt.setNumberOfSegments(2)
|
self.scalebar_qpt.setNumberOfSegments(2)
|
||||||
self.scalebar_qpt.setNumberOfSegmentsLeft(0)
|
self.scalebar_qpt.setNumberOfSegmentsLeft(0)
|
||||||
|
|
||||||
|
self.scalebar_qpt.setFont(QFont("Calibri", 12))
|
||||||
self.scalebar_qpt.attemptMove(self.template_parameters['Echelle_2_locals'])
|
self.scalebar_qpt.attemptMove(self.template_parameters['Echelle_2_locals'])
|
||||||
self.scalebar_qpt.attemptResize(self.template_parameters['Echelle_2_size'])
|
self.scalebar_qpt.attemptResize(self.template_parameters['Echelle_2_size'])
|
||||||
self.scalebar_qpt.setItemRotation(self.template_parameters['Echelle_2_rotate'])
|
self.scalebar_qpt.setItemRotation(self.template_parameters['Echelle_2_rotate'])
|
||||||
@@ -666,19 +691,31 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
north.attemptMove(self.template_parameters['Arrow_locals'])
|
north.attemptMove(self.template_parameters['Arrow_locals'])
|
||||||
north.attemptResize(self.template_parameters['Arrow_size'])
|
north.attemptResize(self.template_parameters['Arrow_size'])
|
||||||
north.setItemRotation(self.template_parameters['Arrow_rotate'])
|
north.setItemRotation(self.template_parameters['Arrow_rotate'])
|
||||||
|
north.setBackgroundEnabled(True)
|
||||||
|
north.setBackgroundColor(QColor(255, 255, 255, 130))
|
||||||
|
|
||||||
if self.radioButton_10.isChecked() == 1:
|
if self.radioButton_10.isChecked() == 1:
|
||||||
info_text = ["Source : " + self.mComboBox_3.currentText()][0]
|
text_source = ' '
|
||||||
|
for Item_mComboBox_3 in self.mComboBox_3.checkedItems():
|
||||||
|
text_source = text_source+Item_mComboBox_3+','
|
||||||
|
text_source = text_source[:-1]
|
||||||
|
info_text = ["Source :" + text_source][0]
|
||||||
else:
|
else:
|
||||||
info_text = ["Source : " + self.lineEdit_4.text()][0]
|
info_text = ["Source : " + self.lineEdit_4.text()][0]
|
||||||
# ajout note info:
|
# ajout note info:
|
||||||
info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime(
|
if self.radioButton_14.isChecked() == 1:
|
||||||
"%d/%m/%Y") + ")"]
|
self.s.setValue("automap/prenom_nom",self.lineEdit_5.text())
|
||||||
|
prenom_nom = self.s.value("automap/prenom_nom", 1, type=str)
|
||||||
|
info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime("%d/%m/%Y") + ") par "+prenom_nom]
|
||||||
|
else:
|
||||||
|
info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime("%d/%m/%Y") + ")"]
|
||||||
credit_text = QgsLayoutItemLabel(self.layout)
|
credit_text = QgsLayoutItemLabel(self.layout)
|
||||||
credit_text.setText(info[0])
|
credit_text.setText(info[0])
|
||||||
credit_text.setFont(QFont("Calibri", 9))
|
credit_text.setFont(QFont("Calibri", 9))
|
||||||
credit_text.setHAlign(Qt.AlignRight)
|
credit_text.setHAlign(Qt.AlignRight)
|
||||||
credit_text.setVAlign(Qt.AlignVCenter)
|
credit_text.setVAlign(Qt.AlignVCenter)
|
||||||
|
credit_text.setBackgroundEnabled(True)
|
||||||
|
credit_text.setBackgroundColor(QColor(255, 255, 255, 130))
|
||||||
credit_text2 = QgsLayoutItemLabel(self.layout)
|
credit_text2 = QgsLayoutItemLabel(self.layout)
|
||||||
credit_text2.setText(info_text)
|
credit_text2.setText(info_text)
|
||||||
credit_text2.setFont(QFont("Calibri", 9))
|
credit_text2.setFont(QFont("Calibri", 9))
|
||||||
@@ -690,6 +727,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
credit_text2.setItemRotation(self.template_parameters['Source_rotate'])
|
credit_text2.setItemRotation(self.template_parameters['Source_rotate'])
|
||||||
credit_text2.attemptResize(self.template_parameters['Source_size'])
|
credit_text2.attemptResize(self.template_parameters['Source_size'])
|
||||||
credit_text2.attemptMove(self.template_parameters['Source_locals'])
|
credit_text2.attemptMove(self.template_parameters['Source_locals'])
|
||||||
|
credit_text2.setBackgroundEnabled(True)
|
||||||
|
credit_text2.setBackgroundColor(QColor(255, 255, 255, 130))
|
||||||
self.layout.addLayoutItem(credit_text)
|
self.layout.addLayoutItem(credit_text)
|
||||||
self.layout.addLayoutItem(credit_text2)
|
self.layout.addLayoutItem(credit_text2)
|
||||||
|
|
||||||
@@ -719,10 +758,34 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
existing_layout = project.layoutManager().layoutByName(self.layout.name())
|
existing_layout = project.layoutManager().layoutByName(self.layout.name())
|
||||||
if existing_layout:
|
if existing_layout:
|
||||||
if self.radioButton_12.isChecked() != 1:
|
self.QMBquestion = QMessageBox()
|
||||||
project.layoutManager().removeLayout(existing_layout)
|
self.QMBquestion.setWindowTitle(u"Attention !")
|
||||||
|
self.QMBquestion.setIcon(QMessageBox.Warning)
|
||||||
|
self.QMBquestion.setText("Mise en page existente, la mise en page vas être écraser !")
|
||||||
|
self.QMBquestion.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
|
||||||
|
self.QMBquestion.addButton(QPushButton('Autre mise en page'),QMessageBox.AcceptRole)
|
||||||
|
self.QMBquestion = self.QMBquestion.exec()
|
||||||
|
|
||||||
result = project.layoutManager().addLayout(self.layout)
|
#if self.radioButton_12.isChecked() != 1:
|
||||||
|
if self.QMBquestion == QMessageBox.Yes:
|
||||||
|
project.layoutManager().removeLayout(existing_layout)
|
||||||
|
result = project.layoutManager().addLayout(self.layout)
|
||||||
|
if self.QMBquestion == QMessageBox.AcceptRole:
|
||||||
|
LayoutCOUNT=0
|
||||||
|
arrayManager = []
|
||||||
|
for AddArrayManager in project.layoutManager().layouts():
|
||||||
|
arrayManager.append(AddArrayManager.name())
|
||||||
|
arrayManager.sort()
|
||||||
|
for LayoutNAME in arrayManager:
|
||||||
|
if LayoutNAME == layout_name:
|
||||||
|
LayoutCOUNT = LayoutCOUNT+1
|
||||||
|
if LayoutNAME == layout_name+"¶"+str(LayoutCOUNT):
|
||||||
|
LayoutCOUNT=LayoutCOUNT+1
|
||||||
|
layout_name = (layout_name+"¶"+str(LayoutCOUNT))
|
||||||
|
self.layout.setName(layout_name)
|
||||||
|
|
||||||
|
else:
|
||||||
|
existing_layout = True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -735,8 +798,22 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
fichier_mise_en_page = layout_name
|
fichier_mise_en_page = layout_name
|
||||||
layout_modifie = QgsProject.instance().layoutManager().layoutByName(fichier_mise_en_page)
|
layout_modifie = QgsProject.instance().layoutManager().layoutByName(fichier_mise_en_page)
|
||||||
iface.openLayoutDesigner(layout_modifie)
|
try:
|
||||||
self.close()
|
if (self.QMBquestion == QMessageBox.AcceptRole):
|
||||||
|
TryMessage = (self.QMBquestion == QMessageBox.AcceptRole)
|
||||||
|
elif (self.QMBquestion == QMessageBox.Yes):
|
||||||
|
TryMessage = (self.QMBquestion == QMessageBox.Yes)
|
||||||
|
else:
|
||||||
|
TryMessage = False
|
||||||
|
del self.QMBquestion
|
||||||
|
except:
|
||||||
|
TryMessage = True
|
||||||
|
|
||||||
|
if TryMessage == True:
|
||||||
|
iface.openLayoutDesigner(layout_modifie)
|
||||||
|
self.close()
|
||||||
|
else:
|
||||||
|
self.activateWindow()
|
||||||
|
|
||||||
def actualisation_mise_en_page(self):
|
def actualisation_mise_en_page(self):
|
||||||
values_page = self.comboBox.currentText()
|
values_page = self.comboBox.currentText()
|
||||||
@@ -757,12 +834,9 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
pc = self.layout.pageCollection()
|
pc = self.layout.pageCollection()
|
||||||
pc.pages()[0].setPageSize('A3', QgsLayoutItemPage.Landscape)
|
pc.pages()[0].setPageSize('A3', QgsLayoutItemPage.Landscape)
|
||||||
|
|
||||||
if values_page == "demo.py":
|
values_page_import = values_page[:-3]
|
||||||
self.template_parameters = demo.fletch_canvas(self)
|
eval("exec('from .tools.mises_en_pages import '+values_page_import)")
|
||||||
if values_page == "carto_standard.py":
|
eval("exec('self.template_parameters = '+ values_page_import + '.fletch_canvas(self)')")
|
||||||
self.template_parameters = carto_standard.fletch_canvas(self)
|
|
||||||
if values_page == "full_page.py":
|
|
||||||
self.template_parameters = full_page.fletch_canvas(self)
|
|
||||||
|
|
||||||
def bar_echelle_auto(self, echelle, bar_echelle):
|
def bar_echelle_auto(self, echelle, bar_echelle):
|
||||||
|
|
||||||
@@ -771,7 +845,6 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
|||||||
bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers)
|
bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers)
|
||||||
bar_echelle.setUnitLabel("km")
|
bar_echelle.setUnitLabel("km")
|
||||||
bar_echelle.setUnitsPerSegment(round((echelle.scale()*0.04)/1000))
|
bar_echelle.setUnitsPerSegment(round((echelle.scale()*0.04)/1000))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
bar_echelle.setUnits(QgsUnitTypes.DistanceMeters)
|
bar_echelle.setUnits(QgsUnitTypes.DistanceMeters)
|
||||||
bar_echelle.setUnitLabel("m")
|
bar_echelle.setUnitLabel("m")
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
name=CenRa_AutoMap
|
name=CenRa_AutoMap
|
||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
description=CenRa_AutoMap
|
description=CenRa_AutoMap
|
||||||
version=1.7
|
version=1.4
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ tracker=https://gitea.cenra-outils.org/api/v1/repos/CEN-RA/Plugin_QGIS/issues
|
|||||||
|
|
||||||
hasProcessingProvider=no
|
hasProcessingProvider=no
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
changelog=<h2>CenRa_AutoMap:</h2></br><p><h3>21/10/2024 - Version 1.7: </h3> - Epurations du code.</p></br><p><h3>07/10/2024 - Version 1.6: </h3> - Option de bibliotheque de logo custome.</p></br><p><h3>03/10/2024 - Version 1.5: </h3> - Remonte la fênetre dans la pille.</br> - Gestion du nombre de colonne dans la légend.</br></p></br><p><h3>02/10/2024 - Version 1.4: </h3> - Mise en page plein écrant.</br></p></br><p><h3>01/10/2024 - Version 1.3: </h3> - Récupération du titre et sous-titre pour mise en page existente.</br> - Integration de bibliotheque de logo.</br> - Integration de gestionaire pour les source de donnée.</br> - Mise en place d'une bar d'echelle adaptative. </br></p></br><p><h3>30/09/2024 - Version 1.2: </h3> - Activation du thème. </br> - Ajouter une carte de suivie. </br><p></br><h3>27/09/2024 - Version 1.1: </h3> - Ajout d'une liste déroulante pour les sources de données. </br>- Bouton pour ajouter des fonts de carte customisés. </br>- Fonctionnalité de génération d'atlas. </p></br><p><h3>26/09/2024 - Version 1.0: </h3> - Lancement du plugin CenRa_AutoMap avec une seul mise en page. </p></br>
|
changelog=<h2>CenRa_AUTOMAP:</h2></br><p><h3>03/04/2025 - Version 1.4: </h3> - Mise a jour de securite.</p></br><p><h3>20/03/2025 - Version 1.3: </h3> - Fenêtre redimensionnable avec déplaçable avec la mollette sourit.</p></br><p><h3>25/02/2025 - Version 1.2: </h3> - DockWidget pour ouverture de couche avec theme.</p></br><p><h3>28/01/2025 - Version 1.1: </h3> - Multi-Composeur pris en charge.</p></br><p><h3>27/01/2025 - Version 1.0: </h3> - Version releases.</br> - Ajoute un message d'avertissement au moment d'écraser la mise en page.</br> - Ajoute prénom et nom dans la réalisation.</br> - Utilisation de Calibri.</p></br><p><h3>13/01/2025 - Version 0.1.10: </h3> - Correctif.</p></br><p><h3>07/01/2025 - Version 0.1.9: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>19/12/2024 - Version 0.1.8: </h3> - Nouvelle mise en page.</br> - Incrémentation automatique de nouveau modele de mise en page. </br> - Correctif de bug.</p></br><p><h3>21/10/2024 - Version 0.1.7: </h3> - Epurations du code.</p></br><p><h3>07/10/2024 - Version 0.1.6: </h3> - Option de bibliotheque de logo custome.</p></br><p><h3>03/10/2024 - Version 0.1.5: </h3> - Remonte la fênetre dans la pille.</br> - Gestion du nombre de colonne dans la légend.</br></p></br><p><h3>02/10/2024 - Version 0.1.4: </h3> - Mise en page plein écrant.</br></p></br><p><h3>01/10/2024 - Version 0.1.3: </h3> - Récupération du titre et sous-titre pour mise en page existente.</br> - Integration de bibliotheque de logo.</br> - Integration de gestionaire pour les source de donnée.</br> - Mise en place d'une bar d'echelle adaptative. </br></p></br><p><h3>30/09/2024 - Version 0.1.2: </h3> - Activation du thème. </br> - Ajouter une carte de suivie. </br><p></br><h3>27/09/2024 - Version 0.1.1: </h3> - Ajout d'une liste déroulante pour les sources de données. </br>- Bouton pour ajouter des fonts de carte customisés. </br>- Fonctionnalité de génération d'atlas. </p></br><p><h3>26/09/2024 - Version 0.1.0: </h3> - Lancement du plugin CenRa_AutoMap avec une seul mise en page. </p></br>
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=python
|
tags=python
|
||||||
|
|||||||
@@ -0,0 +1,201 @@
|
|||||||
|
import logging
|
||||||
|
import os
|
||||||
|
from PyQt5.QtCore import QSettings
|
||||||
|
from collections import namedtuple
|
||||||
|
from enum import Enum
|
||||||
|
from functools import partial
|
||||||
|
from pathlib import Path
|
||||||
|
from xml.dom.minidom import parseString
|
||||||
|
from qgis.gui import *
|
||||||
|
import qgis
|
||||||
|
from importlib import import_module
|
||||||
|
from qgis.core import (
|
||||||
|
NULL,
|
||||||
|
QgsApplication,
|
||||||
|
QgsScaleBarSettings,
|
||||||
|
QgsDataSourceUri,
|
||||||
|
QgsProject,
|
||||||
|
QgsProviderConnectionException,
|
||||||
|
QgsProviderRegistry,
|
||||||
|
QgsRasterLayer,
|
||||||
|
QgsSettings,
|
||||||
|
QgsVectorLayer,
|
||||||
|
QgsGeometry,
|
||||||
|
QgsPrintLayout,
|
||||||
|
QgsReadWriteContext,
|
||||||
|
QgsLayoutItemMap,
|
||||||
|
QgsLayoutItemPage,
|
||||||
|
QgsLayoutSize,
|
||||||
|
QgsUnitTypes,
|
||||||
|
QgsLayoutPoint,
|
||||||
|
QgsLayoutItemLabel,
|
||||||
|
QgsLayoutItemPicture,
|
||||||
|
QgsLayoutItemLegend,
|
||||||
|
QgsLegendStyle,
|
||||||
|
QgsLayoutItemScaleBar,
|
||||||
|
QgsLayerTreeGroup,
|
||||||
|
QgsCoordinateReferenceSystem,
|
||||||
|
QgsCoordinateTransform,
|
||||||
|
QgsLayerTree,
|
||||||
|
QgsLayoutTableColumn,
|
||||||
|
QgsRectangle,
|
||||||
|
QgsLayoutItemMapOverviewStack,
|
||||||
|
QgsMapThemeCollection,
|
||||||
|
)
|
||||||
|
from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime, Qt
|
||||||
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon, QColor, QFont, QMovie
|
||||||
|
from qgis.PyQt.QtPrintSupport import QPrinter
|
||||||
|
from qgis.PyQt.QtWebKitWidgets import QWebPage
|
||||||
|
from qgis.PyQt.QtWidgets import (
|
||||||
|
QDockWidget,
|
||||||
|
QAction,
|
||||||
|
QMessageBox,
|
||||||
|
QPushButton,
|
||||||
|
QDockWidget,
|
||||||
|
QFileDialog,
|
||||||
|
QInputDialog,
|
||||||
|
QMenu,
|
||||||
|
QToolButton,
|
||||||
|
QTableWidget,
|
||||||
|
QTableWidgetItem,
|
||||||
|
QVBoxLayout,
|
||||||
|
)
|
||||||
|
import psycopg2
|
||||||
|
from PyQt5 import QtGui
|
||||||
|
from PyQt5 import QtWidgets
|
||||||
|
from qgis.PyQt.QtXml import QDomDocument
|
||||||
|
from qgis.utils import iface
|
||||||
|
import glob
|
||||||
|
try:
|
||||||
|
|
||||||
|
Enabled = True
|
||||||
|
from .tools.StyleLayer import *
|
||||||
|
except:
|
||||||
|
Enabled = False
|
||||||
|
from .tools.resources import (
|
||||||
|
load_ui,
|
||||||
|
resources_path,
|
||||||
|
send_issues,
|
||||||
|
)
|
||||||
|
from .issues import CenRa_Issues
|
||||||
|
|
||||||
|
from datetime import date
|
||||||
|
|
||||||
|
EDITOR_CLASS = load_ui('CenRa_AutoMapStyle_base.ui')
|
||||||
|
LOGGER = logging.getLogger('CenRa_AutoMapStyle')
|
||||||
|
|
||||||
|
class AutoMap_Style(QDockWidget, EDITOR_CLASS):
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
_ = parent
|
||||||
|
super().__init__()
|
||||||
|
self.setupUi(self)
|
||||||
|
self.settings = QgsSettings()
|
||||||
|
self.s = QSettings()
|
||||||
|
|
||||||
|
self.toolButton.setIcon(QtGui.QIcon(resources_path('icons','loader.png')))
|
||||||
|
|
||||||
|
self.loadComboBox()
|
||||||
|
self.toolButton.clicked.connect(self.loadStyle)
|
||||||
|
|
||||||
|
def loadComboBox(self):
|
||||||
|
style = self.comboBox
|
||||||
|
style.clear()
|
||||||
|
style.addItem('')
|
||||||
|
style.addItem('Foncier')
|
||||||
|
style.addItem('Administratif')
|
||||||
|
|
||||||
|
def loadStyle(self):
|
||||||
|
style = self.comboBox.currentText()
|
||||||
|
if style == 'Foncier':
|
||||||
|
self.loadFoncier()
|
||||||
|
if style == 'Administratif':
|
||||||
|
self.loadAdministratif()
|
||||||
|
|
||||||
|
def loginfo(self):
|
||||||
|
InputDialog = QInputDialog()
|
||||||
|
mdp = InputDialog.getText(None,'Foncier','Mot de pass base foncier:')
|
||||||
|
return mdp
|
||||||
|
|
||||||
|
def loadAdministratif(self):
|
||||||
|
mtc = QgsProject.instance().mapThemeCollection()
|
||||||
|
theme_name = 'Administratif'
|
||||||
|
theme_state = mtc.mapThemeState(theme_name)
|
||||||
|
|
||||||
|
mdp = self.loginfo()[0]
|
||||||
|
if mdp != '':
|
||||||
|
# couche = [['_form_power_rename','_form_power_rename_contour_2025'],['_42_bois_du_roy','_42_bois_du_roy_habitat_2021']]
|
||||||
|
couche = [['administratif','departements2024','gid'],['administratif','v_communes','id']]
|
||||||
|
for schema_table in couche:
|
||||||
|
schema = schema_table[0]
|
||||||
|
table = schema_table[1]
|
||||||
|
key = schema_table[2]
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
uri.setConnection(host ,port ,dbname ,os_user ,mdp)
|
||||||
|
# nom du schéma à remplacer: "hydrographie" à supprimer et mettre "couches_collaboratives" lorsqu'on aura regroupé les couches à modifier dans un même schéma
|
||||||
|
uri.setDataSource(schema, table, "geom")
|
||||||
|
uri.setKeyColumn(key)
|
||||||
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
|
if layer.isValid() == True:
|
||||||
|
layerName = layer.name()
|
||||||
|
listStyle = layer.listStylesInDatabase()
|
||||||
|
try:
|
||||||
|
StyleExist = True
|
||||||
|
indexStyle = (listStyle[2].index(layerName))
|
||||||
|
except:
|
||||||
|
StyleExist = False
|
||||||
|
if StyleExist:
|
||||||
|
StyleId = (listStyle[1][indexStyle])
|
||||||
|
styleTuple = layer.getStyleFromDatabase(StyleId)
|
||||||
|
styleqml = styleTuple[0]
|
||||||
|
styledoc = QDomDocument()
|
||||||
|
styledoc.setContent(styleqml)
|
||||||
|
layer.importNamedStyle(styledoc)
|
||||||
|
|
||||||
|
# Ajout de la couche au canevas QGIS
|
||||||
|
QgsProject.instance().addMapLayer(layer)
|
||||||
|
|
||||||
|
layer_record = QgsMapThemeCollection.MapThemeLayerRecord(layer)
|
||||||
|
theme_state.addLayerRecord(layer_record)
|
||||||
|
mtc.insert(theme_name, theme_state)
|
||||||
|
|
||||||
|
def loadFoncier(self):
|
||||||
|
mtc = QgsProject.instance().mapThemeCollection()
|
||||||
|
theme_name = 'Foncier'
|
||||||
|
theme_state = mtc.mapThemeState(theme_name)
|
||||||
|
|
||||||
|
mdp = self.loginfo()[0]
|
||||||
|
if mdp != '':
|
||||||
|
# couche = [['_form_power_rename','_form_power_rename_contour_2025'],['_42_bois_du_roy','_42_bois_du_roy_habitat_2021']]
|
||||||
|
couche = [['sites','v_sites_parcelles'],['sites','v_sites'],['inventaires','suivi_zh'],['inventaires','suivi_ps']]
|
||||||
|
for schema_table in couche:
|
||||||
|
schema = schema_table[0]
|
||||||
|
table = schema_table[1]
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
uri.setConnection(host ,port ,dbname ,os_user ,mdp)
|
||||||
|
# nom du schéma à remplacer: "hydrographie" à supprimer et mettre "couches_collaboratives" lorsqu'on aura regroupé les couches à modifier dans un même schéma
|
||||||
|
uri.setDataSource(schema, table, "geom")
|
||||||
|
uri.setKeyColumn('gid')
|
||||||
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
|
if layer.isValid() == True:
|
||||||
|
layerName = layer.name()
|
||||||
|
listStyle = layer.listStylesInDatabase()
|
||||||
|
try:
|
||||||
|
StyleExist = True
|
||||||
|
indexStyle = (listStyle[2].index(layerName))
|
||||||
|
except:
|
||||||
|
StyleExist = False
|
||||||
|
if StyleExist:
|
||||||
|
StyleId = (listStyle[1][indexStyle])
|
||||||
|
styleTuple = layer.getStyleFromDatabase(StyleId)
|
||||||
|
styleqml = styleTuple[0]
|
||||||
|
styledoc = QDomDocument()
|
||||||
|
styledoc.setContent(styleqml)
|
||||||
|
layer.importNamedStyle(styledoc)
|
||||||
|
|
||||||
|
# Ajout de la couche au canevas QGIS
|
||||||
|
QgsProject.instance().addMapLayer(layer)
|
||||||
|
|
||||||
|
layer_record = QgsMapThemeCollection.MapThemeLayerRecord(layer)
|
||||||
|
theme_state.addLayerRecord(layer_record)
|
||||||
|
mtc.insert(theme_name, theme_state)
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
import sys
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
|
||||||
#print(IPAddr)
|
|
||||||
if IPAddr[0:11] == "100.100.100": #4269
|
|
||||||
host = "100.100.100.81"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig4269"
|
|
||||||
sigdb="sig4269"
|
|
||||||
refdb="ref_geo4269"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.0": #01
|
|
||||||
host = "192.168.0.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig01"
|
|
||||||
sigdb="sig01"
|
|
||||||
refdb="ref_geo01"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.1": #0726
|
|
||||||
host = "192.168.1.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig0726"
|
|
||||||
sigdb="sig0726"
|
|
||||||
refdb="ref_geo0726"
|
|
||||||
password = "McVities"
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
os_user = os.environ['USER']
|
|
||||||
else:
|
|
||||||
os_user = os.environ['USERNAME']
|
|
||||||
if os_user == 'STAGE':
|
|
||||||
os_user='stage'
|
|
||||||
if os_user == 'Administrateur':
|
|
||||||
os_user='stage'
|
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -15,154 +15,154 @@ def fletch_canvas(self):
|
|||||||
|
|
||||||
if page_rotate == 'Portrait':
|
if page_rotate == 'Portrait':
|
||||||
if values_page == 'A4':
|
if values_page == 'A4':
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(50, 50, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_size'] = QgsLayoutSize(198.85714285714286,175, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(2.5, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(199, 175, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(5, 25, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(5, 25, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(200, 8, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_rotate'] = 0.0
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(50.0,50, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(200, 8, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(5, 25, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(5, 12, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_rotate'] = 0.0
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(46, 16, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_size'] = QgsLayoutSize(198.85714285714286,90, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(50, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(5, 275, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(5, 205, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(5, 205, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(55, 5, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_rotate'] = 0.0
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(145, 228, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(12.0,12, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(191, 6, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(145, 215, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Arrow_rotate'] = 0.0
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(12, 12, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(54.857142857142854,5, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(193, 214, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(145, 229, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Echelle_rotate'] = 0.0
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(205, 125, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_size'] = QgsLayoutSize(46.0,16, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(104, 201, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_rotate'] = 270
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
if values_page == 'A3':
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(50, 50, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(2.5, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(285, 260, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(286, 8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(286, 8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(5, 10, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(46, 16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(50, 20, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_rotate'] = 0.0
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(5, 395, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_size'] = QgsLayoutSize(198.85714285714286,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(5, 284, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_rotate'] = 0.0
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(50, 15, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_size'] = QgsLayoutSize(100.0,4, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(207, 310, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(205, 158.0, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(50, 15, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_rotate'] = 270.0
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(207, 298, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Source_size'] = QgsLayoutSize(100.0,4, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(8.4, 12.5, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(104, 200, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(273, 297, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Source_rotate'] = 0.0
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(198.85714285714286,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(291.5, 123, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(5, 12, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Sous_titre_rotate'] = 0.0
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(189, 284, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(54.857142857142854,15, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(145, 215, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
self.template_parameters['Echelle_2_rotate'] = 0.0
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(50.0,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(5, 275, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
self.template_parameters['Logo_2_rotate'] = 0.0
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
if values_page == 'A3':
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
self.template_parameters['Carte_size'] = QgsLayoutSize(280,247, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Credit_rotate'] = 270
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(7, 35, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Source_rotate'] = 0
|
self.template_parameters['Carte_rotate'] = 0.0
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(70,70, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(7, 35, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
self.template_parameters['Carte_2_rotate'] = 0.0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(280,127, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(7, 289, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0.0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(17,17, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(269, 8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0.0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(77,7, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(205, 323, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0.0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(65,23, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(7, 6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0.0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(280,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(7, 6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0.0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(141,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(289, 223, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 270.0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(141,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(147, 282, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0.0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(280,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(7, 17, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0.0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(77,21, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(205, 303, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0.0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(70,28, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(7, 388, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0.0
|
||||||
|
|
||||||
if page_rotate == 'Landscape':
|
if page_rotate == 'Landscape':
|
||||||
if values_page == 'A4':
|
if values_page == 'A4':
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(285, 145, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_size'] = QgsLayoutSize(285.14285714285717,145, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(100, 100, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_rotate'] = 0.0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(100.0,100, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(286, 8, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_rotate'] = 0.0
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_size'] = QgsLayoutSize(285.14285714285717,41, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(286, 8, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(6, 168, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(5, 10, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_rotate'] = 0.0
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(46, 16, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(13.142857142857142,12, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(277, 6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0.0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(54.857142857142854,15, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(232, 193, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0.0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(46.0,16, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(50, 20, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_rotate'] = 0.0
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(5, 185, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_size'] = QgsLayoutSize(286.0,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(5, 168, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_rotate'] = 0.0
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_size'] = QgsLayoutSize(100.0,4, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(207, 193, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(291, 127.0, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_rotate'] = 270.0
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(207, 180, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Source_size'] = QgsLayoutSize(100.0,4, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(8.4, 12.5, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(189, 169, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(273, 182, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Source_rotate'] = 0.0
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(286.0,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(291.5, 123, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(5, 12, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Sous_titre_rotate'] = 0.0
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(189, 168.5, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(54.857142857142854,15, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(232, 179, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
self.template_parameters['Echelle_2_rotate'] = 0.0
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(50.0,50, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(6, 118, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
self.template_parameters['Logo_2_rotate'] = 0.0
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_rotate'] = 270
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
if values_page == 'A3':
|
if values_page == 'A3':
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(408.5, 222, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_size'] = QgsLayoutSize(402,205, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(5, 23.5, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(8, 32, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(100, 100, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_rotate'] = 0.0
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(141,141, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(409, 8, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(8, 32, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_rotate'] = 0.0
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(409, 8, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_size'] = QgsLayoutSize(402,58, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(5, 10, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(8, 237, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(46, 16, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_rotate'] = 0.0
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(19,17, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(50, 20, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(391, 8, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(5, 275, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Arrow_rotate'] = 0.0
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(77,21, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(5, 249, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(327, 272, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Echelle_rotate'] = 0.0
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(323, 282, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_size'] = QgsLayoutSize(65,23, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(7, 6, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(323, 270, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_rotate'] = 0.0
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(8.4, 12.5, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_size'] = QgsLayoutSize(403,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(402, 270, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(7, 6, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Titre_rotate'] = 0.0
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(415, 123, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_size'] = QgsLayoutSize(141,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(410, 179, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(313, 247, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Credit_rotate'] = 270.0
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
self.template_parameters['Source_size'] = QgsLayoutSize(141,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(267, 238, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
self.template_parameters['Source_rotate'] = 0.0
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(403,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(7, 17, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
self.template_parameters['Sous_titre_rotate'] = 0.0
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(77,21, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Credit_rotate'] = 270
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(327, 252, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Source_rotate'] = 0
|
self.template_parameters['Echelle_2_rotate'] = 0.0
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(70,70, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(8, 166, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
self.template_parameters['Logo_2_rotate'] = 0.0
|
||||||
|
|
||||||
return self.template_parameters
|
return self.template_parameters
|
||||||
@@ -1,167 +0,0 @@
|
|||||||
|
|
||||||
from qgis.core import (
|
|
||||||
QgsLayoutSize,
|
|
||||||
QgsUnitTypes,
|
|
||||||
QgsLayoutPoint,
|
|
||||||
)
|
|
||||||
def fletch_canvas(self):
|
|
||||||
if self.radioButton_6.isChecked():
|
|
||||||
values_page = 'A4'
|
|
||||||
else:
|
|
||||||
values_page = 'A3'
|
|
||||||
if self.radioButton_7.isChecked():
|
|
||||||
page_rotate = 'Portrait'
|
|
||||||
else:
|
|
||||||
page_rotate = 'Landscape'
|
|
||||||
|
|
||||||
if page_rotate == 'Portrait':
|
|
||||||
if values_page == 'A4':
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(200.0,200, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(80.0,80, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(126, 210, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(86.0,86, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(6, 208, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(14.285714285714286,14, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(189, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(51.42857142857143,7, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(9, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(45.714285714285715,11, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(3, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(154.28571428571428,11, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(51, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(151, 210, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_rotate'] = 0
|
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(229, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(125.71428571428571,14, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(60, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(51.42857142857143,13, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(9, 184, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(28.571428571428573,29, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(9, 151, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
if values_page == 'A3':
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(282,282, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(8, 8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(113,113, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(178, 296, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(121,121, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(8, 293, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(20,20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(267, 28, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(73,10, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(13, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(64,16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(4, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(218,16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(72, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(213, 296, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_rotate'] = 0
|
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(323, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(177,20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(85, 28, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(73,18, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(13, 259, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(40,40, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(13, 213, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
if page_rotate == 'Landscape':
|
|
||||||
if values_page == 'A4':
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(200.0,200, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(85.71428571428571,69, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(209, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(85.71428571428571,131, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(209, 74, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(14.285714285714286,14, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(189, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(51.42857142857143,7, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(9, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(45.714285714285715,11, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(3, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(154.28571428571428,11, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(51, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(151, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_rotate'] = 0
|
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(229, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(125.71428571428571,14, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(60, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(51.42857142857143,13, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(9, 184, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(28.571428571428573,29, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(9, 151, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
if values_page == 'A3':
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(282,282, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(8, 8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(121,97, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(294, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(121,185, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(294, 105, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(20,20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(266, 28, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(73,10, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(12, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(64,16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(4, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(218,16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(73, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(214, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_rotate'] = 0
|
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(322, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(177,20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(85, 28, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(73,18, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(12, 260, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(40,40, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(12, 214, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
return self.template_parameters
|
|
||||||
@@ -25,7 +25,7 @@ def fletch_canvas(self):
|
|||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(200, 8, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(200, 8, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(5, 10, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(5, 10, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(48, 17, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_size'] = QgsLayoutSize(48, 17, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_position'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(50, 20, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(50, 20, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(5, 275, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(5, 275, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Legande_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters)
|
||||||
@@ -91,7 +91,7 @@ def fletch_canvas(self):
|
|||||||
self.template_parameters['Logo_2_rotate'] = 0
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
|
||||||
if page_rotate == 'Landscape':
|
if page_rotate == 'Landscape':
|
||||||
if values_page == 'A4':
|
if values_page == 'A3':
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(100, 100, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(100, 100, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(420, 297, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_size'] = QgsLayoutSize(420, 297, QgsUnitTypes.LayoutMillimeters)
|
||||||
@@ -128,7 +128,7 @@ def fletch_canvas(self):
|
|||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
if values_page == 'A3':
|
if values_page == 'A4':
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(100, 100, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(100, 100, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters)
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(297, 210, QgsUnitTypes.LayoutMillimeters)
|
self.template_parameters['Carte_size'] = QgsLayoutSize(297, 210, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
|||||||
@@ -0,0 +1,167 @@
|
|||||||
|
|
||||||
|
from qgis.core import (
|
||||||
|
QgsLayoutSize,
|
||||||
|
QgsUnitTypes,
|
||||||
|
QgsLayoutPoint,
|
||||||
|
)
|
||||||
|
def fletch_canvas(self):
|
||||||
|
if self.radioButton_6.isChecked():
|
||||||
|
values_page = 'A4'
|
||||||
|
else:
|
||||||
|
values_page = 'A3'
|
||||||
|
if self.radioButton_7.isChecked():
|
||||||
|
page_rotate = 'Portrait'
|
||||||
|
else:
|
||||||
|
page_rotate = 'Landscape'
|
||||||
|
|
||||||
|
if page_rotate == 'Portrait':
|
||||||
|
if values_page == 'A4':
|
||||||
|
self.template_parameters['Carte_size'] = QgsLayoutSize(168.0,262, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(41, 1, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_rotate'] = 0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(78.85714285714286,70, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(130, 1, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_rotate'] = 0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(168.0,32, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(41, 264, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(14.285714285714286,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(13, 254, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(38.857142857142854,7, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(1, 289, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(34.857142857142854,10, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(3, 139, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(38.857142857142854,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(1, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(74.85714285714286,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(43, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(104.0,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(104, 256, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(38.857142857142854,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(1, 14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(38.857142857142854,13, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(1, 276, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(30.0,30, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(41, 233, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
if values_page == 'A3':
|
||||||
|
self.template_parameters['Carte_size'] = QgsLayoutSize(237,369, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(58, 2, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_rotate'] = 0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(111,99, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(183, 2, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_rotate'] = 0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(237,45, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(58, 372, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(20,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(19, 358, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(55,10, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(2, 408, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(49,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(4, 196, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(55,15, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(2, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(106,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(60, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(147,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(147, 361, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(55,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(2, 20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(55,19, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(2, 389, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(42,42, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(58, 329, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
if page_rotate == 'Landscape':
|
||||||
|
if values_page == 'A4':
|
||||||
|
self.template_parameters['Carte_size'] = QgsLayoutSize(254.85714285714286,175, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(41, 1, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_rotate'] = 0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(78.85714285714286,70, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(217, 1, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_rotate'] = 0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(254.85714285714286,32, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(41, 177, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(14.285714285714286,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(13, 168, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(38.857142857142854,7, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(1, 202, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(34.857142857142854,10, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(3, 94, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(38.857142857142854,11, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(1, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(74.85714285714286,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(43, 3, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(104.0,6, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(190, 169, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(38.857142857142854,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(1, 14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(38.857142857142854,13, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(1, 189, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(30.0,30, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(41, 146, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
if values_page == 'A3':
|
||||||
|
self.template_parameters['Carte_size'] = QgsLayoutSize(359,247, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_locals'] = QgsLayoutPoint(58, 2, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_rotate'] = 0
|
||||||
|
self.template_parameters['Carte_2_size'] = QgsLayoutSize(111,99, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(306, 2, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Carte_2_rotate'] = 0
|
||||||
|
self.template_parameters['Legande_size'] = QgsLayoutSize(359,45, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_locals'] = QgsLayoutPoint(58, 250, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Legande_rotate'] = 0
|
||||||
|
self.template_parameters['Arrow_size'] = QgsLayoutSize(20,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(19, 237, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Arrow_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_size'] = QgsLayoutSize(55,10, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(2, 285, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_size'] = QgsLayoutSize(49,14, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_locals'] = QgsLayoutPoint(4, 133, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_rotate'] = 0
|
||||||
|
self.template_parameters['Titre_size'] = QgsLayoutSize(55,15, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_locals'] = QgsLayoutPoint(2, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Titre_rotate'] = 0
|
||||||
|
self.template_parameters['Credit_size'] = QgsLayoutSize(106,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_locals'] = QgsLayoutPoint(60, 4, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Credit_rotate'] = 0
|
||||||
|
self.template_parameters['Source_size'] = QgsLayoutSize(147,8, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_locals'] = QgsLayoutPoint(268, 238, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Source_rotate'] = 0
|
||||||
|
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(55,20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(2, 20, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Sous_titre_rotate'] = 0
|
||||||
|
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(55,19, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(2, 267, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Echelle_2_rotate'] = 0
|
||||||
|
self.template_parameters['Logo_2_size'] = QgsLayoutSize(42,42, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(58, 206, QgsUnitTypes.LayoutMillimeters)
|
||||||
|
self.template_parameters['Logo_2_rotate'] = 0
|
||||||
|
return self.template_parameters
|
||||||
@@ -4,6 +4,7 @@ import configparser
|
|||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import base64
|
import base64
|
||||||
|
import socket
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extras
|
import psycopg2.extras
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
@@ -107,25 +108,20 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def login_base(take=None):
|
def pyperclip():
|
||||||
from CenRa_METABASE.tools.PythonSQL import host,port,dbname,password,os_user
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
dst = abspath(abspath(join(plugin_path(), "CenRa_AUTOMAP\\tools\\")))
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
if IPAddr[0:11] == "100.100.100": #4269
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\StyleLayer.py'
|
||||||
res_ident = first_cur.fetchone()
|
if IPAddr[0:9] == "192.168.0": #01
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\StyleLayer.py'
|
||||||
|
if IPAddr[0:9] == "192.168.1": #0726
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\StyleLayer.py'
|
||||||
|
try:
|
||||||
|
shutil.copy(src, dst)
|
||||||
|
except:
|
||||||
|
print('404')
|
||||||
|
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
|
||||||
user = res_ident[1]
|
|
||||||
|
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
|
||||||
|
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
if take:
|
|
||||||
return cur,con
|
|
||||||
else:
|
|
||||||
return cur
|
|
||||||
def send_issues(url,titre,body,labels):
|
def send_issues(url,titre,body,labels):
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
@@ -168,12 +164,15 @@ def maj_verif(NAME):
|
|||||||
except:
|
except:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
try:
|
||||||
plugin_num = version_web.find(NAME)
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
plugin_num = version_web.find(NAME)
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
||||||
if version_plugin != version:
|
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
if version_plugin != version:
|
||||||
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
|
except:
|
||||||
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,94 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>CenRa_AutoMapStyle</class>
|
||||||
|
<widget class="QDockWidget" name="CenRa_AutoMapStyle">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>48</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="floating">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="features">
|
||||||
|
<set>QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetMovable</set>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>CenRa_AutoMap</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="dockWidgetContents">
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="horizontalSpacing">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="comboBox">
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Style:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QToolButton" name="toolButton">
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Metabase</string>
|
<string>Journal des modifications</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset>
|
<iconset>
|
||||||
@@ -12,15 +12,17 @@ import qgis
|
|||||||
|
|
||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
import socket
|
||||||
import os
|
import os
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
plugin_path,
|
||||||
|
pyperclip,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
|
pyperclip()
|
||||||
from .copie_editor import Copie_Editor
|
from .copie_editor import Copie_Editor
|
||||||
from .about_form import CopieAboutDialog
|
from .about_form import AboutDialog
|
||||||
|
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
|
|
||||||
@@ -40,7 +42,7 @@ class PgCopie:
|
|||||||
maj_verif(NAME)
|
maj_verif(NAME)
|
||||||
|
|
||||||
# Display About window on first use
|
# Display About window on first use
|
||||||
version = qgis.utils.pluginMetadata('CenRa_Copie','version')
|
version = qgis.utils.pluginMetadata('CenRa_COPIE','version')
|
||||||
s = QSettings()
|
s = QSettings()
|
||||||
versionUse = s.value("copie/version", 1, type=str)
|
versionUse = s.value("copie/version", 1, type=str)
|
||||||
if str(versionUse) != str(version) :
|
if str(versionUse) != str(version) :
|
||||||
@@ -66,12 +68,20 @@ class PgCopie:
|
|||||||
self.copie_editor = QAction(icon, 'Copie',None)
|
self.copie_editor = QAction(icon, 'Copie',None)
|
||||||
self.toolBar.addAction(self.copie_editor)
|
self.toolBar.addAction(self.copie_editor)
|
||||||
self.copie_editor.triggered.connect(self.open_editor)
|
self.copie_editor.triggered.connect(self.open_editor)
|
||||||
|
self.copie_editor.setEnabled(False)
|
||||||
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
|
if IPAddr[0:11] == "100.100.100":
|
||||||
|
self.copie_editor.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.0":
|
||||||
|
self.copie_editor.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.1":
|
||||||
|
self.copie_editor.setEnabled(True)
|
||||||
|
|
||||||
def open_about_dialog(self):
|
def open_about_dialog(self):
|
||||||
"""
|
"""
|
||||||
About dialog
|
About dialog
|
||||||
"""
|
"""
|
||||||
dialog = CopieAboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec_()
|
dialog.exec_()
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CopieAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
class AboutDialog(QDialog, ABOUT_FORM_CLASS):
|
||||||
|
|
||||||
""" About - Let the user display the about dialog. """
|
""" About - Let the user display the about dialog. """
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ from PyQt5 import QtGui
|
|||||||
from qgis.core import *
|
from qgis.core import *
|
||||||
from qgis.core import QgsDataSourceUri
|
from qgis.core import QgsDataSourceUri
|
||||||
|
|
||||||
from .tools.PythonSQL import *
|
from .tools.PythonSQL import login_base
|
||||||
|
from .tools.SQLRequet import *
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
login_base,
|
|
||||||
send_issues,
|
send_issues,
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
from .issues import CenRa_Issues
|
||||||
@@ -62,21 +62,22 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
|
|||||||
# tablename
|
# tablename
|
||||||
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
|
||||||
|
|
||||||
|
|
||||||
|
account = login_base("account")
|
||||||
|
sigdb = account[5]
|
||||||
|
|
||||||
|
|
||||||
if source_db != sigdb:
|
if source_db != sigdb:
|
||||||
#self.iface.messageBar().pushMessage(u"Un référentiel ne peut être copié, utilisez les filtres !", level=QgsMessageBar.CRITICAL, duration=10)
|
#self.iface.messageBar().pushMessage(u"Un référentiel ne peut être copié, utilisez les filtres !", level=QgsMessageBar.CRITICAL, duration=10)
|
||||||
self.iface.messageBar().pushMessage("Ooops", u"Vous ne pouvez copier des couches que dans sigXX", level=Qgis.Critical, duration=5)
|
self.iface.messageBar().pushMessage("Ooops", u"Vous ne pouvez copier des couches que dans sigXX", level=Qgis.Critical, duration=5)
|
||||||
|
else:
|
||||||
else :
|
user = account[0]
|
||||||
|
mdp = account[1]
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
host = account[2]
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
port = account[3]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
dbname = account[4]
|
||||||
res_ident = first_cur.fetchone()
|
cur = account[7]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
con = account[8]
|
||||||
user = res_ident[1]
|
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
# Creation de la liste des schemas de la base de donnees
|
# Creation de la liste des schemas de la base de donnees
|
||||||
SQL = """WITH list_schema AS (
|
SQL = """WITH list_schema AS (
|
||||||
@@ -115,15 +116,15 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
|
|||||||
#******************************debut script*********************************
|
#******************************debut script*********************************
|
||||||
|
|
||||||
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
account = login_base("account")
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
user = account[0]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
mdp = account[1]
|
||||||
res_ident = first_cur.fetchone()
|
host = account[2]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
port = account[3]
|
||||||
user = res_ident[1]
|
dbname = account[4]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
cur = account[7]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
con = account[8]
|
||||||
first_conn.close()
|
|
||||||
# Récupération de la couche active
|
# Récupération de la couche active
|
||||||
layer = self.iface.activeLayer()
|
layer = self.iface.activeLayer()
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
name=CenRA_COPIE
|
name=CenRA_COPIE
|
||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
description=Permet la copie d'une table dans une base PostGis
|
description=Permet la copie d'une table dans une base PostGis
|
||||||
version=2.0
|
version=2.2
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ email=si_besoin@cen-rhonealpes.fr
|
|||||||
# Recommended items:
|
# Recommended items:
|
||||||
|
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
changelog=<h2>CenRa_COPIE:</h2></br><p><h3>22/10/2024 - Version 2:</h3>- Refonte du code.</p></br><p><h3>13/09/2024 - Version 1.5:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
changelog=<h2>CenRa_COPIE:</h2></br><p><h3>03/04/2025 - Version 2.2: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 2.1: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>22/10/2024 - Version 2:</h3>- Refonte du code.</p></br><p><h3>13/09/2024 - Version 1.5:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=cenra, database, table
|
tags=cenra, database, table
|
||||||
|
|||||||
@@ -1,34 +1,3 @@
|
|||||||
import sys
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
|
||||||
if IPAddr[0:11] == "100.100.100": #4269
|
|
||||||
host = "100.100.100.11"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig4269"
|
|
||||||
sigdb="sig4269"
|
|
||||||
refdb="ref_geo4269"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.0": #01
|
|
||||||
host = "192.168.0.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig01"
|
|
||||||
sigdb="sig01"
|
|
||||||
refdb="ref_geo01"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.1": #0726
|
|
||||||
host = "192.168.1.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig0726"
|
|
||||||
sigdb="sig0726"
|
|
||||||
refdb="ref_geo0726"
|
|
||||||
password = "McVities"
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
os_user = os.environ['USER']
|
|
||||||
else:
|
|
||||||
os_user = os.environ['USERNAME']
|
|
||||||
if os_user == 'STAGE':
|
|
||||||
os_user='stage'
|
|
||||||
|
|
||||||
geom = "geom"
|
geom = "geom"
|
||||||
champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
||||||
@@ -6,6 +6,7 @@ import tempfile
|
|||||||
import base64
|
import base64
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extras
|
import psycopg2.extras
|
||||||
|
import socket
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
@@ -107,24 +108,20 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def login_base(take=None):
|
def pyperclip():
|
||||||
from CenRa_Metabase.resources.PythonSQL import host,port,dbname,password,os_user
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
dst = abspath(abspath(join(plugin_path(), "CenRa_Copie\\tools\\")))
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
if IPAddr[0:11] == "100.100.100": #4269
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
res_ident = first_cur.fetchone()
|
if IPAddr[0:9] == "192.168.0": #01
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
user = res_ident[1]
|
if IPAddr[0:9] == "192.168.1": #0726
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
|
try:
|
||||||
|
shutil.copy(src, dst)
|
||||||
|
except:
|
||||||
|
print('404')
|
||||||
|
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
|
||||||
|
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
if take:
|
|
||||||
return cur,con
|
|
||||||
else:
|
|
||||||
return cur
|
|
||||||
def send_issues(url,titre,body,labels):
|
def send_issues(url,titre,body,labels):
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
@@ -167,12 +164,15 @@ def maj_verif(NAME):
|
|||||||
except:
|
except:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
try:
|
||||||
plugin_num = version_web.find(NAME)
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
plugin_num = version_web.find(NAME)
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
||||||
if version_plugin != version:
|
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
if version_plugin != version:
|
||||||
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
|
except:
|
||||||
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Metabase</string>
|
<string>Journal des modifications</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset>
|
<iconset>
|
||||||
|
|||||||
@@ -12,15 +12,17 @@ import qgis
|
|||||||
|
|
||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
import socket
|
||||||
import os
|
import os
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
plugin_path,
|
||||||
|
pyperclip,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
|
pyperclip()
|
||||||
from .flux_editor import Flux_Editor
|
from .flux_editor import Flux_Editor
|
||||||
from .about_form import FluxAboutDialog
|
from .about_form import AboutDialog
|
||||||
|
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
|
|
||||||
@@ -40,7 +42,7 @@ class PgFlux:
|
|||||||
maj_verif(NAME)
|
maj_verif(NAME)
|
||||||
|
|
||||||
# Display About window on first use
|
# Display About window on first use
|
||||||
version = qgis.utils.pluginMetadata('CenRa_Flux','version')
|
version = qgis.utils.pluginMetadata('CenRa_FLUX','version')
|
||||||
s = QSettings()
|
s = QSettings()
|
||||||
versionUse = s.value("flux/version", 1, type=str)
|
versionUse = s.value("flux/version", 1, type=str)
|
||||||
if str(versionUse) != str(version) :
|
if str(versionUse) != str(version) :
|
||||||
@@ -63,15 +65,24 @@ class PgFlux:
|
|||||||
if not self.action_editor:
|
if not self.action_editor:
|
||||||
self.action_editor = Flux_Editor()
|
self.action_editor = Flux_Editor()
|
||||||
|
|
||||||
|
|
||||||
self.flux_editor = QAction(icon, 'SigCEN',None)
|
self.flux_editor = QAction(icon, 'SigCEN',None)
|
||||||
self.toolBar.addAction(self.flux_editor)
|
self.toolBar.addAction(self.flux_editor)
|
||||||
self.flux_editor.triggered.connect(self.open_editor)
|
self.flux_editor.triggered.connect(self.open_editor)
|
||||||
|
self.flux_editor.setEnabled(False)
|
||||||
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
|
if IPAddr[0:11] == "100.100.100":
|
||||||
|
self.flux_editor.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.0":
|
||||||
|
self.flux_editor.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.1":
|
||||||
|
self.flux_editor.setEnabled(True)
|
||||||
|
|
||||||
def open_about_dialog(self):
|
def open_about_dialog(self):
|
||||||
"""
|
"""
|
||||||
About dialog
|
About dialog
|
||||||
"""
|
"""
|
||||||
dialog = CopieAboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec_()
|
dialog.exec_()
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
|
|||||||
@@ -1,60 +1,6 @@
|
|||||||
# <p align="center">FluxCEN</p>
|
|
||||||
|
|
||||||
<img align="left" src=https://raw.githubusercontent.com/CEN-Nouvelle-Aquitaine/fluxcen/main/icon.png width="220"/>
|
> [Point de départ de création du plugin](https://github.com/CEN-Nouvelle-Aquitaine/MapCEN)
|
||||||
<br>
|
|
||||||
<br>
|
Le plugin QGIS CenRa_FLUX permet d'accéder rapidement à un large éventail de données organisés dans PostGIS par catégories et interrogeables sous forme de mots-clés.
|
||||||
<br>
|
|
||||||
Le plugin QGIS FluxCEN permet d'accéder rapidement à un large éventail de flux WFS/WMS organisés par catégories et interrogeables sous forme de mots-clés.
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
Il évite ainsi d'avoir à gérer dans QGIS une multitude de connexions.
|
Il évite ainsi d'avoir à gérer dans QGIS une multitude de connexions.
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
## 🧐 Features
|
|
||||||
- Sélection rapide des ressources par autocomplétion
|
|
||||||
- Regroupement des flux au sein de catégories
|
|
||||||
- Gestion des styles par défaut à l'ouverture dans QGIS pour les données WFS
|
|
||||||
- Centralisation et gestion des flux simplifiée dans un fichier .csv
|
|
||||||
- Code et ressources attachées gérées directement via le git
|
|
||||||
- Prise en charge des flux Geoserver et Mapserver
|
|
||||||
- Lien direct vers la fiche de métadonnées de la ressource
|
|
||||||
|
|
||||||
## Composition du fichier .csv
|
|
||||||
|
|
||||||
* service : type de service utilisé (WFS ou WMS)
|
|
||||||
* categorie : categorie de la couche pour affichage et recherche dans le plugin
|
|
||||||
* Nom_couche_plugin : nom de la couche qui s'affichera dans le plugin
|
|
||||||
* nom_technique : nom technique de la couche utilisé sur le serveur source (caché dans le plugin)
|
|
||||||
* url : URL du serveur pour accéder à la couche
|
|
||||||
* source : Source de la donnée
|
|
||||||
* style : nom du fichier de style pour affichage à l'ouverture dans QGIS
|
|
||||||
* metadonnees : URL d'accès à la fiche de métadonnées liée à la resource
|
|
||||||
|
|
||||||
Exemple pour accéder à la BD ORTHO® :
|
|
||||||
|
|
||||||
| service | categorie | Nom_couche_plugin | nom_technique | url | source | style |
|
|
||||||
| -------- | -------- | -------- | -------- | -------- |-------- | -------- |
|
|
||||||
| WMS Raster| Fonds cartos | BD ORTHO® | HR.ORTHOIMAGERY.ORTHOPHOTOS |https://wxs.ign.fr/ortho/geoportail/r/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities| IGN | |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Style des couches
|
|
||||||
|
|
||||||
Le dossier *styles_couches* stocke les styles QGIS au format .qml afin d'appliquer par défaut ce style à l'ouverture de la couche dans QGIS. L'ajout d'un style dans ce dossier nécessite de reporter le nom du fichier .qml dans le champ "style" du csv.
|
|
||||||
|
|
||||||
|
|
||||||
## Accès aux données protégées
|
|
||||||
|
|
||||||
Si l'accès à la majorité des ressources reste public, certaines peuvent être protégées par un mot de passe (données métier confidentielles par exemple).
|
|
||||||
|
|
||||||
Cette authentification est gérée via le serveur cartographique qui génère les flux.
|
|
||||||
Pour y accéder, il faut créer en amont une authentification dans QGIS. L'ouverture des données protégées se fera alors à partir de la première authentification enregistrée dans QGIS (pas de gestion multi-authentification pour le moment)
|
|
||||||
|
|
||||||
## Interface du plugin:
|
|
||||||
|
|
||||||
<img align="center" src=https://raw.githubusercontent.com/CEN-Nouvelle-Aquitaine/fluxcen/main/fluxcen_interface.PNG width="600"/>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class FluxAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
class AboutDialog(QDialog, ABOUT_FORM_CLASS):
|
||||||
|
|
||||||
""" About - Let the user display the about dialog. """
|
""" About - Let the user display the about dialog. """
|
||||||
|
|
||||||
|
|||||||
@@ -29,15 +29,20 @@ from qgis.PyQt.QtWidgets import (
|
|||||||
QMessageBox,
|
QMessageBox,
|
||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
)
|
)
|
||||||
from .tools.PythonSQL import *
|
from .tools.SQLRequet import *
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
login_base,
|
|
||||||
send_issues,
|
send_issues,
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
|
from .tools.PythonSQL import login_base
|
||||||
|
except:
|
||||||
|
print('Pas de fichier PythonSQL')
|
||||||
|
|
||||||
from .issues import CenRa_Issues
|
from .issues import CenRa_Issues
|
||||||
|
|
||||||
|
from ast import literal_eval
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import os.path
|
import os.path
|
||||||
import webbrowser, os
|
import webbrowser, os
|
||||||
@@ -45,15 +50,131 @@ import psycopg2
|
|||||||
import psycopg2.extras
|
import psycopg2.extras
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
try:
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
account = login_base('account')
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
user = account[0]
|
||||||
res_ident = first_cur.fetchone()
|
mdp = account[1]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
host = account[2]
|
||||||
user = res_ident[1]
|
port = account[3]
|
||||||
first_conn.close()
|
dbname = account[4]
|
||||||
|
sigdb = account[5]
|
||||||
|
refdb = account[6]
|
||||||
|
|
||||||
|
except:
|
||||||
|
print('')
|
||||||
EDITOR_CLASS = load_ui('CenRa_Flux_base.ui')
|
EDITOR_CLASS = load_ui('CenRa_Flux_base.ui')
|
||||||
|
html = '''<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
|
||||||
|
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
|
||||||
|
crossorigin=""/>
|
||||||
|
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
|
||||||
|
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
|
||||||
|
crossorigin=""></script>
|
||||||
|
<style>
|
||||||
|
body { padding: 0; margin: 0; }
|
||||||
|
html, body, #map { height: 100%; }
|
||||||
|
.leaflet-control-layers-toggle {
|
||||||
|
background-image: url(https://intranet.cenra-outils.org/Intranet/css/images/layers.png);
|
||||||
|
}
|
||||||
|
.legend_parc {
|
||||||
|
border-radius: 15px;
|
||||||
|
box-shadow: 2px 2px 3px 0 #6a6a6a;
|
||||||
|
background-color: #fefafab3;
|
||||||
|
opacity:0;
|
||||||
|
}
|
||||||
|
.legend_parc:hover{
|
||||||
|
opacity:1;
|
||||||
|
}
|
||||||
|
.popup-with-no-events {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="map"></div>
|
||||||
|
<script src="map.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
<script>'''
|
||||||
|
font = '''var OrthoIGN = L.tileLayer('https://wmts.geopf.fr/wmts?'+
|
||||||
|
'&LAYER={ignLayer}&STYLE={style}&TILEMATRIXSET=PM'+
|
||||||
|
'&SERVICE={service}&REQUEST=GetTile&VERSION=1.0.0'+
|
||||||
|
'&FORMAT={format}&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}',
|
||||||
|
{
|
||||||
|
ignLayer: 'ORTHOIMAGERY.ORTHOPHOTOS',
|
||||||
|
style: 'normal',
|
||||||
|
service: 'WMTS',
|
||||||
|
format: 'image/jpeg',
|
||||||
|
minZoom: 0,
|
||||||
|
maxZoom: 19,
|
||||||
|
attribution: '© IGN'
|
||||||
|
}).addTo(map);
|
||||||
|
// Plan IGN avec une transparence de 50%
|
||||||
|
var PlanIGN = L.tileLayer('https://wmts.geopf.fr/wmts?'+
|
||||||
|
'&LAYER={ignLayer}&STYLE={style}&TILEMATRIXSET=PM'+
|
||||||
|
'&SERVICE={service}&REQUEST=GetTile&VERSION=1.0.0'+
|
||||||
|
'&FORMAT={format}&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}',
|
||||||
|
{
|
||||||
|
ignLayer: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2',
|
||||||
|
style: 'normal',
|
||||||
|
service: 'WMTS',
|
||||||
|
format: 'image/png',
|
||||||
|
minZoom: 0,
|
||||||
|
maxZoom: 19,
|
||||||
|
attribution: '© IGN'
|
||||||
|
});
|
||||||
|
var baseMaps = {
|
||||||
|
// "BDORTHO2" : bdortho,
|
||||||
|
// "Openstreetmap": openStreetMap,
|
||||||
|
// "Opentopomap": openTopoMap,
|
||||||
|
"BDORTHO" : OrthoIGN,
|
||||||
|
"PlanIGN": PlanIGN
|
||||||
|
};
|
||||||
|
var overlayMaps = {
|
||||||
|
"Sites": Sites,
|
||||||
|
//"Parcelle":JSON
|
||||||
|
};
|
||||||
|
L.control.layers(baseMaps,overlayMaps).addTo(map);
|
||||||
|
var scale = L.control.scale({position: 'bottomleft', metric:true, imperial:false});
|
||||||
|
scale.addTo(map);
|
||||||
|
var legend = L.control({position: 'bottomleft'});
|
||||||
|
|
||||||
|
legend.onAdd = function (map) {
|
||||||
|
var div = L.DomUtil.create('div', 'info legend_parc'),
|
||||||
|
labels = [];
|
||||||
|
labels.push('<i style="background:#73004c;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Acquisition')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#ff00c5;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Acquis en partie BND')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#f0ade1ab;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Acquisition pour partie')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#73462e;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Acquisition / Convention')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#e69800;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Convention')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#ffd37f;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Convention en partie BND')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#ffebaf;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Convention pour partie')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#c8c8c8;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Autre')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#f9ff08;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Projet en cours')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#fe0000;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Problème de mise à jour')
|
||||||
|
|
||||||
|
labels.push('<i style="background:#000;width:18px;height:18px;float:left;margin-right:8px;opacity: 0.7;"></i> Pas de maitrise')
|
||||||
|
|
||||||
|
div.innerHTML = labels.join('<br>');
|
||||||
|
return div;
|
||||||
|
};
|
||||||
|
|
||||||
|
legend.addTo(map);
|
||||||
|
</script>'''
|
||||||
|
targetCrs = QgsCoordinateReferenceSystem('EPSG:4326')
|
||||||
|
layerCrs = QgsCoordinateReferenceSystem('EPSG:2154')
|
||||||
|
TranformCRS = QgsCoordinateTransform(layerCrs, targetCrs,QgsProject.instance())
|
||||||
|
|
||||||
class Flux_Editor(QDialog, EDITOR_CLASS):
|
class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||||
|
|
||||||
@@ -72,6 +193,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
self.tableWidget.setSelectionBehavior(QTableWidget.SelectRows)
|
self.tableWidget.setSelectionBehavior(QTableWidget.SelectRows)
|
||||||
self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
||||||
|
self.toolButton.setIcon(QtGui.QIcon(resources_path('ui','find.png')))
|
||||||
self.comboBox_2.addItem("SIG")
|
self.comboBox_2.addItem("SIG")
|
||||||
self.comboBox_2.addItem('REF')
|
self.comboBox_2.addItem('REF')
|
||||||
self.comboBox.currentIndexChanged.connect(self.initialisation_flux)
|
self.comboBox.currentIndexChanged.connect(self.initialisation_flux)
|
||||||
@@ -81,9 +203,14 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.commandLinkButton_2.clicked.connect(self.suppression_flux)
|
self.commandLinkButton_2.clicked.connect(self.suppression_flux)
|
||||||
self.tableWidget_2.itemDoubleClicked.connect(self.suppression_flux)
|
self.tableWidget_2.itemDoubleClicked.connect(self.suppression_flux)
|
||||||
self.comboBox_2.currentIndexChanged.connect(self.bd_source)
|
self.comboBox_2.currentIndexChanged.connect(self.bd_source)
|
||||||
|
self.checkBox.hide()
|
||||||
|
self.checkBox.stateChanged.connect(self.modeCarte)
|
||||||
|
self.toolButton.clicked.connect(self.getCanevas)
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
self.lineEdit.textChanged.connect(self.filtre_dynamique)
|
self.lineEdit.textChanged.connect(self.filtre_dynamique)
|
||||||
|
self.viewer.titleChanged.connect(self.NewTitle)
|
||||||
layout.addWidget(self.lineEdit)
|
layout.addWidget(self.lineEdit)
|
||||||
|
self.viewer.hide()
|
||||||
#self.lineEdit.mousePressEvent = self._mousePressEvent
|
#self.lineEdit.mousePressEvent = self._mousePressEvent
|
||||||
|
|
||||||
#metadonnees_plugin = open(self.plugin_path + '/metadata.txt')
|
#metadonnees_plugin = open(self.plugin_path + '/metadata.txt')
|
||||||
@@ -93,6 +220,128 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
"""Run method that performs all the real work"""
|
"""Run method that performs all the real work"""
|
||||||
self.bd_source()
|
self.bd_source()
|
||||||
|
|
||||||
|
def NewTitle(self):
|
||||||
|
if self.viewer.title() != '':
|
||||||
|
Tsplit = ((self.viewer.title()).split('.'))
|
||||||
|
print(Tsplit[0],Tsplit[1])
|
||||||
|
self.openPostGIS(Tsplit[0],Tsplit[1])
|
||||||
|
|
||||||
|
def modeCarte(self):
|
||||||
|
if self.checkBox.isChecked():
|
||||||
|
self.viewer.show()
|
||||||
|
|
||||||
|
cur.execute("SELECT ST_AsGeoJSON(st_centroid(ST_Transform(geom,4326))) FROM _agregation_ra._agreg_contour")
|
||||||
|
varcenter = literal_eval(cur.fetchall()[0][0])
|
||||||
|
varcenter = [varcenter['coordinates'][1],varcenter['coordinates'][0]]
|
||||||
|
|
||||||
|
cur.execute("SELECT ST_AsGeoJSON(ST_Transform(st_collect(geom),4326)),tschema,tname FROM _agregation_ra._agreg_contour WHERE geom IS NOT NULL GROUP BY tschema,tname;" )
|
||||||
|
varSite = cur.fetchall()
|
||||||
|
cur.execute("SELECT ST_AsGeoJSON(ST_Transform(st_collect(geom),4326)),tschema,tname FROM _agregation_ra._agreg_travaux_prevus_poly WHERE geom IS NOT NULL GROUP BY tschema,tname;")
|
||||||
|
varTravaux = cur.fetchall()
|
||||||
|
cur.execute("SELECT ST_AsGeoJSON(ST_Transform(geom,4326)),milieu_libelle ,lb_eu_01,tschema,tname FROM _agregation_ra._agreg_eu_habitat WHERE geom IS NOT NULL;")
|
||||||
|
varHabitat = cur.fetchall()
|
||||||
|
|
||||||
|
vargeomS = literal_eval(varSite[0][0])
|
||||||
|
vargeomT = literal_eval(varTravaux[0][0])
|
||||||
|
vargeomH = literal_eval(varHabitat[0][0])
|
||||||
|
#new_objectS = self.SwitchGeom(vargeomS)
|
||||||
|
#new_objectT = self.SwitchGeom(vargeomT)
|
||||||
|
#new_objectH = self.SwitchGeom(vargeomH)
|
||||||
|
|
||||||
|
script = 'var map = L.map("map").setView('+str(varcenter)+', 13);'
|
||||||
|
|
||||||
|
id = 0
|
||||||
|
varSiteJSON = '''var ParcelleJSON = {
|
||||||
|
"type": "FeatureCollection",
|
||||||
|
"features":['''
|
||||||
|
for varP in varSite:
|
||||||
|
id = id+1
|
||||||
|
varSiteJSON = varSiteJSON+'{"properties": {"code": "'+str(varP[1])+'.'+str(varP[2])+'" },'+str(varP[0][1:])+','
|
||||||
|
varSiteJSON = varSiteJSON[:-1]+''']};
|
||||||
|
var Sites = L.geoJSON(ParcelleJSON,{
|
||||||
|
style: function(feature) {
|
||||||
|
switch (feature.geometry.properties.code) {
|
||||||
|
case 'Ensemble de sites': return {fillColor: "#9a7863",color:"white",weight: 1,fillOpacity: 0.7};
|
||||||
|
case 'Sous-site conservatoire': return {fillColor: "#e69800",color:"white",weight: 1,fillOpacity: 0.7};
|
||||||
|
case 'Site non géré': return {fillColor: "#73004c",color:"white",weight: 1,fillOpacity: 0.7};
|
||||||
|
case 'Animation territoriale': return {fillColor: "#ffebaf",color:"white",weight: 1,fillOpacity: 0.7};
|
||||||
|
case 'Site conservatoire': return {fillColor: "#f9ff08",color:"white",weight: 1,fillOpacity: 0.7};
|
||||||
|
default: return {fillColor: "#c8c8c8",color:"white",weight: 1,fillOpacity: 0.7};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onEachFeature: function (feature,layer) {
|
||||||
|
layer.on('click', function(e) {
|
||||||
|
map.fitBounds(layer.getBounds());
|
||||||
|
document.title = feature.properties.code.toString();
|
||||||
|
});
|
||||||
|
layer.on('mouseover', function(e) {
|
||||||
|
layer.setStyle({
|
||||||
|
weight: 5,
|
||||||
|
color: '#fe0000',
|
||||||
|
dashArray: '',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
//layer.on('mousemove', function(e) {
|
||||||
|
//layer.openPopup(e.latlng);
|
||||||
|
//});
|
||||||
|
layer.on('mouseout', function(e) {
|
||||||
|
layer.setStyle({
|
||||||
|
color:"white",
|
||||||
|
weight: 1,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
layer.bindTooltip(feature.properties.code.toString(), {
|
||||||
|
sticky: true,
|
||||||
|
permanent: false,
|
||||||
|
direction: 'right',
|
||||||
|
className: 'label_parc'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).addTo(map);'''
|
||||||
|
id = 0
|
||||||
|
varTravauxJSON = '''var TravauxJSON = {
|
||||||
|
"type": "FeatureCollection",
|
||||||
|
"features":['''
|
||||||
|
for varT in varTravaux:
|
||||||
|
id = id+1
|
||||||
|
varTravauxJSON = varTravauxJSON+'{"properties": {"code": "'+str(varT[1])+'.'+str(varT[2])+'" },'+str(varT[0][1:])+','
|
||||||
|
varTravauxJSON = varTravauxJSON[:-1]+''']};
|
||||||
|
var Travaux = L.geoJSON(TravauxJSON,{
|
||||||
|
onEachFeature: function (feature,layer) {
|
||||||
|
layer.on('click', function(e) {
|
||||||
|
map.fitBounds(layer.getBounds());
|
||||||
|
document.title = feature.properties.code.toString();
|
||||||
|
});
|
||||||
|
layer.on('mouseover', function(e) {
|
||||||
|
layer.setStyle({
|
||||||
|
weight: 5,
|
||||||
|
color: '#fe0000',
|
||||||
|
dashArray: '',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
//layer.on('mousemove', function(e) {
|
||||||
|
//layer.openPopup(e.latlng);
|
||||||
|
//});
|
||||||
|
layer.on('mouseout', function(e) {
|
||||||
|
layer.setStyle({
|
||||||
|
color:"white",
|
||||||
|
weight: 1,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
layer.bindTooltip(feature.properties.code.toString(), {
|
||||||
|
sticky: true,
|
||||||
|
permanent: false,
|
||||||
|
direction: 'right',
|
||||||
|
className: 'label_parc'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).addTo(map);'''
|
||||||
|
script = script+varSiteJSON+varTravauxJSON
|
||||||
|
self.viewer.setHtml(html+script+font)
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.viewer.hide()
|
||||||
|
|
||||||
def bd_source(self):
|
def bd_source(self):
|
||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
bd_origine=self.comboBox_2.currentText()
|
bd_origine=self.comboBox_2.currentText()
|
||||||
@@ -158,6 +407,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
def initialisation_flux(self):
|
def initialisation_flux(self):
|
||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
|
# self.toolButton.setEnabled(1)
|
||||||
if self.comboBox.currentText() == 'toutes les catégories':
|
if self.comboBox.currentText() == 'toutes les catégories':
|
||||||
custom_list=schemaname_list
|
custom_list=schemaname_list
|
||||||
elif self.comboBox.currentText() == 'travaux':
|
elif self.comboBox.currentText() == 'travaux':
|
||||||
@@ -182,7 +432,11 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
type_val = str(value[0])[1:3]
|
type_val = str(value[0])[1:3]
|
||||||
schema_name=str(value[0])[4:]
|
schema_name=str(value[0])[4:]
|
||||||
table_name=str(value[1])
|
table_name=str(value[1][len(value[0])+1:])
|
||||||
|
if value[0] == value[1][:len(value[0])]:
|
||||||
|
table_name=str(value[1][len(value[0])+1:])
|
||||||
|
else:
|
||||||
|
table_name=str(value[1])
|
||||||
else:
|
else:
|
||||||
type_val = ''
|
type_val = ''
|
||||||
schema_name=str(value[0])
|
schema_name=str(value[0])
|
||||||
@@ -190,7 +444,10 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
if type_val == 'fo':
|
if type_val == 'fo':
|
||||||
type_val=str(value[0])[1:5]
|
type_val=str(value[0])[1:5]
|
||||||
schema_name=str(value[0])[6:]
|
schema_name=str(value[0])[6:]
|
||||||
table_name=str(value[1])
|
if value[0] == value[1][:len(value[0])]:
|
||||||
|
table_name=str(value[1][len(value[0])+1:])
|
||||||
|
else:
|
||||||
|
table_name=str(value[1])
|
||||||
elif type_val == 'ra':
|
elif type_val == 'ra':
|
||||||
type_val='travaux'
|
type_val='travaux'
|
||||||
schema_name=str(value[0])
|
schema_name=str(value[0])
|
||||||
@@ -211,6 +468,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.tableWidget.setColumnWidth(1, 300)
|
self.tableWidget.setColumnWidth(1, 300)
|
||||||
self.tableWidget.setColumnWidth(2, 300)
|
self.tableWidget.setColumnWidth(2, 300)
|
||||||
self.tableWidget.setHorizontalHeaderLabels(["Code","Schema","Table"])
|
self.tableWidget.setHorizontalHeaderLabels(["Code","Schema","Table"])
|
||||||
|
|
||||||
def selection_flux(self):
|
def selection_flux(self):
|
||||||
selected_row = 0
|
selected_row = 0
|
||||||
selected_items = self.tableWidget.selectedItems()
|
selected_items = self.tableWidget.selectedItems()
|
||||||
@@ -256,6 +514,15 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
if self.tableWidget_2.rowCount() <= 5:
|
if self.tableWidget_2.rowCount() <= 5:
|
||||||
self.chargement_flux()
|
self.chargement_flux()
|
||||||
|
def openPostGIS(self,schema,table):
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
uri.setConnection(host ,port ,sigdb ,user ,mdp)
|
||||||
|
uri.setDataSource(schema, table, "geom")
|
||||||
|
uri.setKeyColumn('gid')
|
||||||
|
uri.setSrid('2154')
|
||||||
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
|
# Ajout de la couche au canevas QGIS
|
||||||
|
QgsProject.instance().addMapLayer(layer)
|
||||||
|
|
||||||
def chargement_flux(self):
|
def chargement_flux(self):
|
||||||
|
|
||||||
@@ -273,17 +540,23 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
return switcher.get(type, "nothing")
|
return switcher.get(type, "nothing")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def displayOnWindows(type, uri, name):
|
def displayOnWindows(type, uri, name):
|
||||||
p = []
|
p = []
|
||||||
|
|
||||||
for row in range(0, self.tableWidget_2.rowCount()):
|
for row in range(0, self.tableWidget_2.rowCount()):
|
||||||
|
color_rgba = 855030089
|
||||||
|
if self.tableWidget_2.item(row, 0).background().color().rgba() != 855030089:
|
||||||
## supression de la partie de l'url après le point d'interrogation
|
## supression de la partie de l'url après le point d'interrogation
|
||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
code = self.tableWidget_2.item(row,0).text()
|
code = self.tableWidget_2.item(row,0).text()
|
||||||
schema = '_'+code+'_'+self.tableWidget_2.item(row,1).text()
|
schema = '_'+code+'_'+self.tableWidget_2.item(row,1).text()
|
||||||
if code == 'travaux' or code == 'agregation':
|
if code == 'travaux' or code == 'agregation':
|
||||||
schema = self.tableWidget_2.item(row,1).text()
|
schema = self.tableWidget_2.item(row,1).text()
|
||||||
table = self.tableWidget_2.item(row,2).text()#.split("?", 1)[0]
|
table = self.tableWidget_2.item(row,2).text()
|
||||||
|
else:
|
||||||
|
table = self.tableWidget_2.item(row,2).text()
|
||||||
|
table = schema+'_'+table
|
||||||
if dbtype == refdb:
|
if dbtype == refdb:
|
||||||
# code = self.tableWidget_2.item(row,0).text()
|
# code = self.tableWidget_2.item(row,0).text()
|
||||||
schema = self.tableWidget_2.item(row,1).text()
|
schema = self.tableWidget_2.item(row,1).text()
|
||||||
@@ -300,7 +573,6 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
geom_type ='SELECT right(st_geometrytype(geom),-3) as a FROM '+schema+'.'+table+' GROUP BY a'
|
geom_type ='SELECT right(st_geometrytype(geom),-3) as a FROM '+schema+'.'+table+' GROUP BY a'
|
||||||
cur.execute(geom_type)
|
cur.execute(geom_type)
|
||||||
list_typegeom = cur.fetchall()
|
list_typegeom = cur.fetchall()
|
||||||
print(len(list_typegeom))
|
|
||||||
if len(list_typegeom) > 1:
|
if len(list_typegeom) > 1:
|
||||||
for typegeom in list_typegeom:
|
for typegeom in list_typegeom:
|
||||||
if typegeom[0] == 'MultiPolygon':
|
if typegeom[0] == 'MultiPolygon':
|
||||||
@@ -324,9 +596,11 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||||
# Ajout de la couche au canevas QGIS
|
# Ajout de la couche au canevas QGIS
|
||||||
QgsProject.instance().addMapLayer(layer)
|
QgsProject.instance().addMapLayer(layer)
|
||||||
|
else:
|
||||||
|
self.QMBquestion = QMessageBox.question(iface.mainWindow(), u"Attention !","La couche «" + str(self.tableWidget_2.item(row,1).text()) +' '+ str(self.tableWidget_2.item(row,2).text()) + "» ne ce trouve pas dans cette BD !",QMessageBox.Yes)
|
||||||
def combobox_custom(self):
|
def combobox_custom(self):
|
||||||
if dbtype == sigdb:
|
if dbtype == sigdb:
|
||||||
|
self.toolButton.setEnabled(1)
|
||||||
self.comboBox.clear()
|
self.comboBox.clear()
|
||||||
self.comboBox.addItem("toutes les catégories")
|
self.comboBox.addItem("toutes les catégories")
|
||||||
self.comboBox.addItem('00')
|
self.comboBox.addItem('00')
|
||||||
@@ -339,6 +613,7 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.comboBox.addItem('travaux')
|
self.comboBox.addItem('travaux')
|
||||||
self.comboBox.addItem('form')
|
self.comboBox.addItem('form')
|
||||||
if dbtype == refdb:
|
if dbtype == refdb:
|
||||||
|
self.toolButton.setEnabled(0)
|
||||||
custom_list=schemaname_distinct
|
custom_list=schemaname_distinct
|
||||||
cur.execute(custom_list)
|
cur.execute(custom_list)
|
||||||
list_schema = cur.fetchall()
|
list_schema = cur.fetchall()
|
||||||
@@ -346,8 +621,10 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.comboBox.addItem("toutes les catégories")
|
self.comboBox.addItem("toutes les catégories")
|
||||||
for baxval in list_schema:
|
for baxval in list_schema:
|
||||||
self.comboBox.addItem(baxval[0])
|
self.comboBox.addItem(baxval[0])
|
||||||
def filtre_dynamique(self, filter_text):
|
|
||||||
|
|
||||||
|
def filtre_dynamique(self, filter_text):
|
||||||
|
if filter_text.find(' ') >= 0:
|
||||||
|
filter_text=filter_text.replace(" ","_")
|
||||||
for i in range(self.tableWidget.rowCount()):
|
for i in range(self.tableWidget.rowCount()):
|
||||||
for j in range(self.tableWidget.columnCount()):
|
for j in range(self.tableWidget.columnCount()):
|
||||||
item = self.tableWidget.item(i, j)
|
item = self.tableWidget.item(i, j)
|
||||||
@@ -356,6 +633,64 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
|||||||
if not match:
|
if not match:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
def getCanevas(self):
|
||||||
|
poly = iface.mapCanvas().extent()
|
||||||
|
geom = (str(poly.xMinimum())+','+str(poly.yMinimum())+','+str(poly.xMaximum())+','+str(poly.yMaximum()))
|
||||||
|
|
||||||
|
SQL_GEOM_CONTOUR = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_contour" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
||||||
|
SQL_GEOM_HABITAT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_habitat" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
||||||
|
SQL_GEOM_EU_HABITAT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_eu_habitat" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
||||||
|
SQL_GEOM_TRAVAUX_PREVUS_LIGNE = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_ligne" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
||||||
|
SQL_GEOM_TRAVAUX_PREVUS_POINT = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_point" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
||||||
|
SQL_GEOM_TRAVAUX_PREVUS_POLY = """SELECT DISTINCT tschema,tname FROM "_agregation_ra"."_agreg_travaux_prevus_poly" WHERE st_intersects(geom,ST_MakeEnvelope("""+geom+",2154)) ORDER BY tname"
|
||||||
|
|
||||||
|
cur.execute(SQL_GEOM_CONTOUR)
|
||||||
|
TableContour = cur.fetchall()
|
||||||
|
cur.execute(SQL_GEOM_HABITAT)
|
||||||
|
TableHabitat = cur.fetchall()
|
||||||
|
cur.execute(SQL_GEOM_EU_HABITAT)
|
||||||
|
TableEuHabitat = cur.fetchall()
|
||||||
|
cur.execute(SQL_GEOM_TRAVAUX_PREVUS_LIGNE)
|
||||||
|
TableTravauxLigne = cur.fetchall()
|
||||||
|
cur.execute(SQL_GEOM_TRAVAUX_PREVUS_POINT)
|
||||||
|
TableTravauxPoint = cur.fetchall()
|
||||||
|
cur.execute(SQL_GEOM_TRAVAUX_PREVUS_POLY)
|
||||||
|
TableTravauxPoly = cur.fetchall()
|
||||||
|
|
||||||
|
TableHaveGeom = sorted(TableContour+TableHabitat+TableEuHabitat+TableTravauxLigne+TableTravauxPoint+TableTravauxPoly)
|
||||||
|
row_count = 0
|
||||||
|
self.tableWidget.setRowCount(0)
|
||||||
|
for e in TableHaveGeom:
|
||||||
|
cur.execute("""SELECT DISTINCT count(*) FROM pg_catalog.pg_tables WHERE schemaname LIKE '"""+e[0]+"""' AND tablename LIKE '"""+e[1]+"""';""")
|
||||||
|
TableSomme = cur.fetchall()[0][0]
|
||||||
|
|
||||||
|
if e[0][1:3] != 'fo':
|
||||||
|
DepName = QTableWidgetItem(e[0][1:3])
|
||||||
|
SchemaName = QTableWidgetItem(e[0][4:])
|
||||||
|
else:
|
||||||
|
DepName = QTableWidgetItem('form')
|
||||||
|
SchemaName = QTableWidgetItem(e[0][6:])
|
||||||
|
TableName = QTableWidgetItem(e[1][len(e[0])+1:])
|
||||||
|
self.tableWidget.insertRow(row_count)
|
||||||
|
self.tableWidget.setItem(row_count,0,DepName)
|
||||||
|
self.tableWidget.setItem(row_count,1,SchemaName)
|
||||||
|
self.tableWidget.setItem(row_count,2,TableName)
|
||||||
|
if TableSomme == 0:
|
||||||
|
for j in range(self.tableWidget.columnCount()):
|
||||||
|
self.tableWidget.item(row_count, j).setBackground(QtGui.QColor(246, 185, 73,50))
|
||||||
|
self.tableWidget.item(row_count,j).setToolTip('Couche dans une autre BD !')
|
||||||
|
row_count = row_count+1
|
||||||
|
if self.lineEdit.text() != 'Recherche par mots-clés':
|
||||||
|
self.filtre_dynamique(self.lineEdit.text())
|
||||||
|
|
||||||
|
def SwitchGeom(self,vargeom):
|
||||||
|
new_object = '['
|
||||||
|
obj = vargeom['coordinates'][0][0]
|
||||||
|
for obj_X in obj:
|
||||||
|
new_object = new_object+'['+str(obj_X[1])+','+str(obj_X[0])+'],'
|
||||||
|
new_object = new_object[:-1]+']'
|
||||||
|
return(new_object)
|
||||||
|
|
||||||
def popup(self):
|
def popup(self):
|
||||||
|
|
||||||
self.dialog = Popup() # +++ - self
|
self.dialog = Popup() # +++ - self
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
name=CenRa_FLUX
|
name=CenRa_FLUX
|
||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
description=Permet d'ouvrire une table dans la base PostGis
|
description=Permet d'ouvrire une table dans la base PostGis
|
||||||
version=2.1
|
version=2.6
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ icon=icon.png
|
|||||||
# experimental flag
|
# experimental flag
|
||||||
experimental=False
|
experimental=False
|
||||||
|
|
||||||
changelog=<h1>CenRA_FLUX:</h1></br><p><h3>22/10/2024 - Version 2.1:</h3> - Correctif de bug.</br> - Evolution de la limit de 3 à 5. </br></p></br><p><h3>22/10/2024 - Version 2.0:</h3> - Reformatage du code.</br></p></br><p><h3>03/10/2024 - Version 1.14:</h3> - Remonte la fênetre dans la pille.</br></p><p><h3>13/09/2024 - Version 1.13:</h3>- MAJ sur le lien du changelog</br>- Bug-fix: Ouvre MultiPolygone et Polygon séparément.</p></br><p><h3>10/09/2024 - Version 1.11:</h3>- Ouverture de table contenant plusieurs géométries.</p></br><p><h3>26/08/2024 - Version 1.10:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
changelog=<h2>CenRa_FLUX:</h2></br><p><h3>03/04/2025 - Version 2.6: </h3> - Mise a jour de securite.</p></br><p><h3>20/03/2025 - Version 2.5: </h3> - Visualisation distincte des couches ne se trouvant pas dans l'antenne.</p></br><p><h3>13/02/2025 - Version 2.4: </h3> - Ajoute redimensionnement et déplacement mollette.</p></br><p><h3>05/02/2025 - Version 2.3: </h3> - Bouton de visualisation des couches se trouvent uniquement dans le canva de la carte.</p></br><p><h3>07/01/2025 - Version 2.2: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>22/10/2024 - Version 2.1:</h3> - Correctif de bug.</br> - Evolution de la limit de 3 à 5. </br></p></br><p><h3>22/10/2024 - Version 2.0:</h3> - Reformatage du code.</br></p></br><p><h3>03/10/2024 - Version 1.14:</h3> - Remonte la fênetre dans la pille.</br></p><p><h3>13/09/2024 - Version 1.13:</h3>- MAJ sur le lien du changelog</br>- Bug-fix: Ouvre MultiPolygone et Polygon séparément.</p></br><p><h3>10/09/2024 - Version 1.11:</h3>- Ouverture de table contenant plusieurs géométries.</p></br><p><h3>26/08/2024 - Version 1.10:</h3>- Ajoute d'un changelog et vérification de mise à jour.</p>
|
||||||
|
|
||||||
# deprecated flag (applies to the whole plugin, not just a single version)
|
# deprecated flag (applies to the whole plugin, not just a single version)
|
||||||
deprecated=False
|
deprecated=False
|
||||||
|
|||||||
@@ -1,37 +1,3 @@
|
|||||||
import sys
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
|
||||||
print(IPAddr)
|
|
||||||
if IPAddr[0:11] == "100.100.100": #4269
|
|
||||||
host = "100.100.100.11"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig4269"
|
|
||||||
sigdb="sig4269"
|
|
||||||
refdb="ref_geo4269"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.0": #01
|
|
||||||
host = "192.168.0.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig01"
|
|
||||||
sigdb="sig01"
|
|
||||||
refdb="ref_geo01"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.1": #0726
|
|
||||||
host = "192.168.1.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig0726"
|
|
||||||
sigdb="sig0726"
|
|
||||||
refdb="ref_geo0726"
|
|
||||||
password = "McVities"
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
os_user = os.environ['USER']
|
|
||||||
else:
|
|
||||||
os_user = os.environ['USERNAME']
|
|
||||||
if os_user == 'STAGE':
|
|
||||||
os_user='stage'
|
|
||||||
if os_user == 'Administrateur':
|
|
||||||
os_user = 'stage'
|
|
||||||
|
|
||||||
schemaname_distinct="""SELECT DISTINCT schemaname from pg_catalog.pg_tables
|
schemaname_distinct="""SELECT DISTINCT schemaname from pg_catalog.pg_tables
|
||||||
WHERE schemaname NOT LIKE '_archives' AND schemaname NOT LIKE 'topology' AND schemaname NOT LIKE 'information_schema' AND schemaname NOT LIKE 'pg_catalog' and schemaname NOT LIKE 'public' AND schemaname NOT LIKE '_trier'
|
WHERE schemaname NOT LIKE '_archives' AND schemaname NOT LIKE 'topology' AND schemaname NOT LIKE 'information_schema' AND schemaname NOT LIKE 'pg_catalog' and schemaname NOT LIKE 'public' AND schemaname NOT LIKE '_trier'
|
||||||
@@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
import configparser
|
import configparser
|
||||||
import shutil
|
import shutil
|
||||||
|
import socket
|
||||||
import tempfile
|
import tempfile
|
||||||
import base64
|
|
||||||
import psycopg2
|
|
||||||
import psycopg2.extras
|
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
|
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
@@ -79,6 +77,19 @@ def plugin_test_data_path(*args, copy=False):
|
|||||||
else:
|
else:
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
def pyperclip():
|
||||||
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
|
dst = abspath(abspath(join(plugin_path(), "CenRa_FLUX\\tools\\")))
|
||||||
|
if IPAddr[0:11] == "100.100.100": #4269
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
|
if IPAddr[0:9] == "192.168.0": #01
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
|
if IPAddr[0:9] == "192.168.1": #0726
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
|
try:
|
||||||
|
shutil.copy(src, dst)
|
||||||
|
except:
|
||||||
|
print('404')
|
||||||
|
|
||||||
def resources_path(*args):
|
def resources_path(*args):
|
||||||
"""Get the path to our resources folder.
|
"""Get the path to our resources folder.
|
||||||
@@ -106,25 +117,6 @@ def load_ui(*args):
|
|||||||
ui_class, _ = uic.loadUiType(resources_path("ui", *args))
|
ui_class, _ = uic.loadUiType(resources_path("ui", *args))
|
||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def login_base(take=None):
|
|
||||||
from .tools.PythonSQL import host,port,dbname,password,os_user
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
|
||||||
res_ident = first_cur.fetchone()
|
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
|
||||||
user = res_ident[1]
|
|
||||||
|
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
|
||||||
|
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
if take:
|
|
||||||
return cur,con
|
|
||||||
else:
|
|
||||||
return cur
|
|
||||||
def send_issues(url,titre,body,labels):
|
def send_issues(url,titre,body,labels):
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
@@ -167,12 +159,15 @@ def maj_verif(NAME):
|
|||||||
except:
|
except:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
try:
|
||||||
plugin_num = version_web.find(NAME)
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
plugin_num = version_web.find(NAME)
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
||||||
if version_plugin != version:
|
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
if version_plugin != version:
|
||||||
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
|
except:
|
||||||
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>Dialog</class>
|
<class>Dialog</class>
|
||||||
<resources>
|
|
||||||
</resources>
|
|
||||||
<widget class="QDialog" name="Dialog">
|
<widget class="QDialog" name="Dialog">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@@ -65,8 +63,8 @@
|
|||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>350</x>
|
<x>345</x>
|
||||||
<y>20</y>
|
<y>10</y>
|
||||||
<width>221</width>
|
<width>221</width>
|
||||||
<height>71</height>
|
<height>71</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -75,7 +73,7 @@
|
|||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="pixmap">
|
<property name="pixmap">
|
||||||
<pixmap resource="resources.qrc">:/plugins/CenRa_FLUX/logo.jpg</pixmap>
|
<pixmap>:/plugins/CenRa_FLUX/logo.jpg</pixmap>
|
||||||
</property>
|
</property>
|
||||||
<property name="scaledContents">
|
<property name="scaledContents">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@@ -139,7 +137,7 @@
|
|||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="resources.qrc">
|
<iconset>
|
||||||
<normaloff>:/plugins/CenRa_FLUX/arrow-bottom.png</normaloff>:/plugins/CenRa_FLUX/arrow-bottom.png</iconset>
|
<normaloff>:/plugins/CenRa_FLUX/arrow-bottom.png</normaloff>:/plugins/CenRa_FLUX/arrow-bottom.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
@@ -162,7 +160,7 @@
|
|||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="resources.qrc">
|
<iconset>
|
||||||
<normaloff>:/plugins/CenRa_FLUX/arrow-up.png</normaloff>:/plugins/CenRa_FLUX/arrow-up.png</iconset>
|
<normaloff>:/plugins/CenRa_FLUX/arrow-up.png</normaloff>:/plugins/CenRa_FLUX/arrow-up.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
@@ -237,6 +235,18 @@
|
|||||||
<string>Flux sélectionné(s) à charger :</string>
|
<string>Flux sélectionné(s) à charger :</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
<zorder>label_3</zorder>
|
||||||
|
<zorder>comboBox</zorder>
|
||||||
|
<zorder>comboBox_2</zorder>
|
||||||
|
<zorder>pushButton_2</zorder>
|
||||||
|
<zorder>tableWidget</zorder>
|
||||||
|
<zorder>tableWidget_2</zorder>
|
||||||
|
<zorder>commandLinkButton</zorder>
|
||||||
|
<zorder>commandLinkButton_2</zorder>
|
||||||
|
<zorder>lineEdit</zorder>
|
||||||
|
<zorder>label</zorder>
|
||||||
|
<zorder>label_2</zorder>
|
||||||
</widget>
|
</widget>
|
||||||
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
@@ -9,244 +9,366 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>910</width>
|
<width>890</width>
|
||||||
<height>800</height>
|
<height>810</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>910</width>
|
<width>600</width>
|
||||||
<height>800</height>
|
<height>400</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>910</width>
|
<width>890</width>
|
||||||
<height>800</height>
|
<height>810</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>SIG CEN-RA</string>
|
<string>SIG CEN-RA</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QComboBox" name="comboBox">
|
<property name="sizeGripEnabled">
|
||||||
<property name="geometry">
|
<bool>false</bool>
|
||||||
<rect>
|
</property>
|
||||||
<x>260</x>
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<y>130</y>
|
<property name="sizeConstraint">
|
||||||
<width>171</width>
|
<enum>QLayout::SetMaximumSize</enum>
|
||||||
<height>22</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
</property>
|
||||||
<property name="editable">
|
<property name="leftMargin">
|
||||||
<bool>false</bool>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentText">
|
<property name="topMargin">
|
||||||
<string notr="true"/>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="rightMargin">
|
||||||
<widget class="QComboBox" name="comboBox_2">
|
<number>0</number>
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>370</x>
|
|
||||||
<y>80</y>
|
|
||||||
<width>171</width>
|
|
||||||
<height>22</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
</property>
|
||||||
<property name="editable">
|
<property name="bottomMargin">
|
||||||
<bool>false</bool>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentText">
|
<property name="spacing">
|
||||||
<string notr="true"/>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
<property name="geometry">
|
<property name="maximumSize">
|
||||||
<rect>
|
<size>
|
||||||
<x>345</x>
|
<width>890</width>
|
||||||
<y>10</y>
|
<height>810</height>
|
||||||
<width>221</width>
|
</size>
|
||||||
<height>71</height>
|
</property>
|
||||||
</rect>
|
<property name="inputMethodHints">
|
||||||
</property>
|
<set>Qt::ImhNoEditMenu</set>
|
||||||
<property name="text">
|
</property>
|
||||||
<string/>
|
<property name="frameShape">
|
||||||
</property>
|
<enum>QFrame::NoFrame</enum>
|
||||||
<property name="pixmap">
|
</property>
|
||||||
<pixmap>:/plugins/CenRa_FLUX/logo.jpg</pixmap>
|
<property name="frameShadow">
|
||||||
</property>
|
<enum>QFrame::Sunken</enum>
|
||||||
<property name="scaledContents">
|
</property>
|
||||||
<bool>true</bool>
|
<property name="lineWidth">
|
||||||
</property>
|
<number>0</number>
|
||||||
</widget>
|
</property>
|
||||||
<widget class="QPushButton" name="pushButton_2">
|
<property name="midLineWidth">
|
||||||
<property name="geometry">
|
<number>0</number>
|
||||||
<rect>
|
</property>
|
||||||
<x>370</x>
|
<property name="verticalScrollBarPolicy">
|
||||||
<y>750</y>
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
<width>171</width>
|
</property>
|
||||||
<height>23</height>
|
<property name="horizontalScrollBarPolicy">
|
||||||
</rect>
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<widget class="QWidget" name="scrollAreaWidgetContents_2">
|
||||||
<string>Charger les couches</string>
|
<property name="geometry">
|
||||||
</property>
|
<rect>
|
||||||
</widget>
|
<x>0</x>
|
||||||
<widget class="QTableWidget" name="tableWidget">
|
<y>0</y>
|
||||||
<property name="enabled">
|
<width>890</width>
|
||||||
<bool>true</bool>
|
<height>810</height>
|
||||||
</property>
|
</rect>
|
||||||
<property name="geometry">
|
</property>
|
||||||
<rect>
|
<property name="maximumSize">
|
||||||
<x>30</x>
|
<size>
|
||||||
<y>170</y>
|
<width>890</width>
|
||||||
<width>850</width>
|
<height>810</height>
|
||||||
<height>281</height>
|
</size>
|
||||||
</rect>
|
</property>
|
||||||
</property>
|
<widget class="QCommandLinkButton" name="commandLinkButton_2">
|
||||||
<property name="selectionMode">
|
<property name="geometry">
|
||||||
<enum>QAbstractItemView::SingleSelection</enum>
|
<rect>
|
||||||
</property>
|
<x>450</x>
|
||||||
<property name="sortingEnabled">
|
<y>470</y>
|
||||||
<bool>true</bool>
|
<width>61</width>
|
||||||
</property>
|
<height>61</height>
|
||||||
</widget>
|
</rect>
|
||||||
<widget class="QTableWidget" name="tableWidget_2">
|
</property>
|
||||||
<property name="geometry">
|
<property name="text">
|
||||||
<rect>
|
<string/>
|
||||||
<x>30</x>
|
</property>
|
||||||
<y>550</y>
|
<property name="icon">
|
||||||
<width>850</width>
|
<iconset>
|
||||||
<height>181</height>
|
<normaloff>:/plugins/CenRa_FLUX/arrow-up.png</normaloff>:/plugins/CenRa_FLUX/arrow-up.png</iconset>
|
||||||
</rect>
|
</property>
|
||||||
</property>
|
<property name="iconSize">
|
||||||
<property name="selectionMode">
|
<size>
|
||||||
<enum>QAbstractItemView::SingleSelection</enum>
|
<width>50</width>
|
||||||
</property>
|
<height>40</height>
|
||||||
</widget>
|
</size>
|
||||||
<widget class="QCommandLinkButton" name="commandLinkButton">
|
</property>
|
||||||
<property name="geometry">
|
</widget>
|
||||||
<rect>
|
<widget class="QPushButton" name="pushButton_2">
|
||||||
<x>400</x>
|
<property name="geometry">
|
||||||
<y>470</y>
|
<rect>
|
||||||
<width>61</width>
|
<x>360</x>
|
||||||
<height>61</height>
|
<y>750</y>
|
||||||
</rect>
|
<width>171</width>
|
||||||
</property>
|
<height>23</height>
|
||||||
<property name="text">
|
</rect>
|
||||||
<string/>
|
</property>
|
||||||
</property>
|
<property name="text">
|
||||||
<property name="icon">
|
<string>Charger les couches</string>
|
||||||
<iconset>
|
</property>
|
||||||
<normaloff>:/plugins/CenRa_FLUX/arrow-bottom.png</normaloff>:/plugins/CenRa_FLUX/arrow-bottom.png</iconset>
|
</widget>
|
||||||
</property>
|
<widget class="QLabel" name="label">
|
||||||
<property name="iconSize">
|
<property name="geometry">
|
||||||
<size>
|
<rect>
|
||||||
<width>50</width>
|
<x>30</x>
|
||||||
<height>40</height>
|
<y>150</y>
|
||||||
</size>
|
<width>161</width>
|
||||||
</property>
|
<height>16</height>
|
||||||
</widget>
|
</rect>
|
||||||
<widget class="QCommandLinkButton" name="commandLinkButton_2">
|
</property>
|
||||||
<property name="geometry">
|
<property name="font">
|
||||||
<rect>
|
<font>
|
||||||
<x>460</x>
|
<family>Calibri</family>
|
||||||
<y>470</y>
|
<pointsize>10</pointsize>
|
||||||
<width>61</width>
|
<italic>false</italic>
|
||||||
<height>61</height>
|
</font>
|
||||||
</rect>
|
</property>
|
||||||
</property>
|
<property name="text">
|
||||||
<property name="text">
|
<string>Liste des flux disponibles :</string>
|
||||||
<string/>
|
</property>
|
||||||
</property>
|
</widget>
|
||||||
<property name="icon">
|
<widget class="QTableWidget" name="tableWidget_2">
|
||||||
<iconset>
|
<property name="geometry">
|
||||||
<normaloff>:/plugins/CenRa_FLUX/arrow-up.png</normaloff>:/plugins/CenRa_FLUX/arrow-up.png</iconset>
|
<rect>
|
||||||
</property>
|
<x>20</x>
|
||||||
<property name="iconSize">
|
<y>550</y>
|
||||||
<size>
|
<width>851</width>
|
||||||
<width>50</width>
|
<height>181</height>
|
||||||
<height>40</height>
|
</rect>
|
||||||
</size>
|
</property>
|
||||||
</property>
|
<property name="selectionMode">
|
||||||
</widget>
|
<enum>QAbstractItemView::SingleSelection</enum>
|
||||||
<widget class="QLineEdit" name="lineEdit">
|
</property>
|
||||||
<property name="enabled">
|
</widget>
|
||||||
<bool>true</bool>
|
<widget class="QComboBox" name="comboBox">
|
||||||
</property>
|
<property name="geometry">
|
||||||
<property name="geometry">
|
<rect>
|
||||||
<rect>
|
<x>250</x>
|
||||||
<x>480</x>
|
<y>130</y>
|
||||||
<y>130</y>
|
<width>171</width>
|
||||||
<width>171</width>
|
<height>22</height>
|
||||||
<height>21</height>
|
</rect>
|
||||||
</rect>
|
</property>
|
||||||
</property>
|
<property name="editable">
|
||||||
<property name="text">
|
<bool>false</bool>
|
||||||
<string>Recherche par mots-clés</string>
|
</property>
|
||||||
</property>
|
<property name="currentText">
|
||||||
<property name="alignment">
|
<string notr="true"/>
|
||||||
<set>Qt::AlignCenter</set>
|
</property>
|
||||||
</property>
|
</widget>
|
||||||
<property name="readOnly">
|
<widget class="QLineEdit" name="lineEdit">
|
||||||
<bool>false</bool>
|
<property name="enabled">
|
||||||
</property>
|
<bool>true</bool>
|
||||||
<property name="clearButtonEnabled">
|
</property>
|
||||||
<bool>true</bool>
|
<property name="geometry">
|
||||||
</property>
|
<rect>
|
||||||
</widget>
|
<x>470</x>
|
||||||
<widget class="QLabel" name="label">
|
<y>130</y>
|
||||||
<property name="geometry">
|
<width>171</width>
|
||||||
<rect>
|
<height>21</height>
|
||||||
<x>40</x>
|
</rect>
|
||||||
<y>150</y>
|
</property>
|
||||||
<width>161</width>
|
<property name="text">
|
||||||
<height>16</height>
|
<string>Recherche par mots-clés</string>
|
||||||
</rect>
|
</property>
|
||||||
</property>
|
<property name="alignment">
|
||||||
<property name="font">
|
<set>Qt::AlignCenter</set>
|
||||||
<font>
|
</property>
|
||||||
<family>Calibri</family>
|
<property name="readOnly">
|
||||||
<pointsize>10</pointsize>
|
<bool>false</bool>
|
||||||
<italic>false</italic>
|
</property>
|
||||||
</font>
|
<property name="clearButtonEnabled">
|
||||||
</property>
|
<bool>true</bool>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Liste des flux disponibles :</string>
|
</widget>
|
||||||
</property>
|
<widget class="QToolButton" name="toolButton">
|
||||||
</widget>
|
<property name="geometry">
|
||||||
<widget class="QLabel" name="label_2">
|
<rect>
|
||||||
<property name="geometry">
|
<x>660</x>
|
||||||
<rect>
|
<y>130</y>
|
||||||
<x>30</x>
|
<width>21</width>
|
||||||
<y>530</y>
|
<height>21</height>
|
||||||
<width>171</width>
|
</rect>
|
||||||
<height>16</height>
|
</property>
|
||||||
</rect>
|
<property name="text">
|
||||||
</property>
|
<string/>
|
||||||
<property name="font">
|
</property>
|
||||||
<font>
|
</widget>
|
||||||
<family>Calibri</family>
|
<widget class="QTableWidget" name="tableWidget">
|
||||||
<pointsize>10</pointsize>
|
<property name="enabled">
|
||||||
<italic>false</italic>
|
<bool>true</bool>
|
||||||
</font>
|
</property>
|
||||||
</property>
|
<property name="geometry">
|
||||||
<property name="text">
|
<rect>
|
||||||
<string>Flux sélectionné(s) à charger :</string>
|
<x>20</x>
|
||||||
</property>
|
<y>170</y>
|
||||||
</widget>
|
<width>850</width>
|
||||||
<zorder>label_3</zorder>
|
<height>281</height>
|
||||||
<zorder>comboBox</zorder>
|
</rect>
|
||||||
<zorder>comboBox_2</zorder>
|
</property>
|
||||||
<zorder>pushButton_2</zorder>
|
<property name="sizePolicy">
|
||||||
<zorder>tableWidget</zorder>
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
<zorder>tableWidget_2</zorder>
|
<horstretch>0</horstretch>
|
||||||
<zorder>commandLinkButton</zorder>
|
<verstretch>0</verstretch>
|
||||||
<zorder>commandLinkButton_2</zorder>
|
</sizepolicy>
|
||||||
<zorder>lineEdit</zorder>
|
</property>
|
||||||
<zorder>label</zorder>
|
<property name="selectionMode">
|
||||||
<zorder>label_2</zorder>
|
<enum>QAbstractItemView::SingleSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sortingEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>530</y>
|
||||||
|
<width>171</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Calibri</family>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
<italic>false</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Flux sélectionné(s) à charger :</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>335</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>221</width>
|
||||||
|
<height>71</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>:/plugins/CenRa_FLUX/logo.jpg</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="comboBox_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>360</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>171</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Ignored">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="editable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="currentText">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCommandLinkButton" name="commandLinkButton">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>390</x>
|
||||||
|
<y>470</y>
|
||||||
|
<width>61</width>
|
||||||
|
<height>61</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>:/plugins/CenRa_FLUX/arrow-bottom.png</normaloff>:/plugins/CenRa_FLUX/arrow-bottom.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWebView" name="viewer" native="true">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>90</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>730</width>
|
||||||
|
<height>730</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgba(255, 255, 255,0.50);</string>
|
||||||
|
</property>
|
||||||
|
<property name="url" stdset="0">
|
||||||
|
<url>
|
||||||
|
<string>about:blank</string>
|
||||||
|
</url>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="checkBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>830</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>70</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>QWebView</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header location="global">QtWebKitWidgets/QWebView</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Metabase</string>
|
<string>Journal des modifications</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset>
|
<iconset>
|
||||||
|
|||||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -26,9 +26,11 @@ from pg_metadata.qgis_plugin_tools.tools.custom_logging import setup_logger
|
|||||||
import os
|
import os
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
plugin_path,
|
||||||
|
pyperclip,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
|
pyperclip()
|
||||||
from .dock import CenRa_Metabase
|
from .dock import CenRa_Metabase
|
||||||
from .editor import Metabase_Editor
|
from .editor import Metabase_Editor
|
||||||
from .about_form import MetabaseAboutDialog
|
from .about_form import MetabaseAboutDialog
|
||||||
@@ -36,8 +38,6 @@ from .about_form import MetabaseAboutDialog
|
|||||||
|
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PgMetadata:
|
class PgMetadata:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
""" Constructor. """
|
""" Constructor. """
|
||||||
@@ -177,12 +177,10 @@ class PgMetadata:
|
|||||||
|
|
||||||
def unload(self):
|
def unload(self):
|
||||||
""" Unload the plugin. """
|
""" Unload the plugin. """
|
||||||
if self.editor:
|
#if self.editor:
|
||||||
iface.removePluginMenu('CenRa_Metabase',self.editor_action)
|
#iface.removePluginMenu('CenRa_Metabase',self.editor_action)
|
||||||
#self.editor.removeToolBarIcon(self.editor_action)
|
#self.editor.removeToolBarIcon(self.editor_action)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if self.dock:
|
if self.dock:
|
||||||
iface.removeDockWidget(self.dock)
|
iface.removeDockWidget(self.dock)
|
||||||
self.dock.deleteLater()
|
self.dock.deleteLater()
|
||||||
@@ -195,13 +193,14 @@ class PgMetadata:
|
|||||||
iface.deregisterLocatorFilter(self.locator_filter)
|
iface.deregisterLocatorFilter(self.locator_filter)
|
||||||
del self.locator_filter
|
del self.locator_filter
|
||||||
|
|
||||||
|
if self.help_action:
|
||||||
|
iface.pluginHelpMenu().removeAction(self.help_action)
|
||||||
|
del self.help_action
|
||||||
|
|
||||||
if self.dock_action:
|
if self.dock_action:
|
||||||
iface.pluginMenu().removeAction(self.dock_action)
|
iface.pluginMenu().removeAction(self.dock_action)
|
||||||
del self.dock_action
|
del self.dock_action
|
||||||
|
|
||||||
if self.help_action:
|
|
||||||
iface.pluginHelpMenu().removeAction(self.help_action)
|
|
||||||
del self.help_action
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run_tests(pattern='test_*.py', package=None):
|
def run_tests(pattern='test_*.py', package=None):
|
||||||
@@ -16,7 +16,6 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class MetabaseAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
class MetabaseAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
||||||
|
|
||||||
""" About - Let the user display the about dialog. """
|
""" About - Let the user display the about dialog. """
|
||||||
@@ -39,6 +39,7 @@ from qgis.PyQt.QtWidgets import (
|
|||||||
)
|
)
|
||||||
from qgis.gui import *
|
from qgis.gui import *
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
import qgis
|
||||||
'''
|
'''
|
||||||
from pg_metadata.connection_manager import (
|
from pg_metadata.connection_manager import (
|
||||||
check_pgmetadata_is_installed,
|
check_pgmetadata_is_installed,
|
||||||
@@ -46,11 +47,10 @@ from pg_metadata.connection_manager import (
|
|||||||
settings_connections_names,
|
settings_connections_names,
|
||||||
)
|
)
|
||||||
'''
|
'''
|
||||||
|
from .tools.PythonSQL import login_base
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
login_base,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
DOCK_CLASS = load_ui('CenRa_Metabase_dockwidget_base.ui')
|
DOCK_CLASS = load_ui('CenRa_Metabase_dockwidget_base.ui')
|
||||||
@@ -147,7 +147,13 @@ class CenRa_Metabase(QDockWidget, DOCK_CLASS):
|
|||||||
#else:
|
#else:
|
||||||
self.default_html_content_not_pg_layer()
|
self.default_html_content_not_pg_layer()
|
||||||
|
|
||||||
iface.layerTreeView().currentLayerChanged.connect(self.layer_changed)
|
try:
|
||||||
|
login_base()
|
||||||
|
iface.layerTreeView().currentLayerChanged.connect(self.layer_changed)
|
||||||
|
except:
|
||||||
|
#qgis.utils.plugins['CenRa_METABASE'].initGui()
|
||||||
|
qgis.utils.plugins['CenRa_METABASE'].unload()
|
||||||
|
#self.default_html_content_not_pg_layer()
|
||||||
|
|
||||||
if iface.activeLayer():
|
if iface.activeLayer():
|
||||||
layer=iface.activeLayer()
|
layer=iface.activeLayer()
|
||||||
@@ -38,10 +38,10 @@ from qgis.PyQt.QtWidgets import (
|
|||||||
)
|
)
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
|
||||||
|
from .tools.PythonSQL import login_base
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
login_base,
|
|
||||||
send_issues,
|
send_issues,
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
from .issues import CenRa_Issues
|
||||||
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
@@ -6,7 +6,7 @@
|
|||||||
name=CenRa_Metabase
|
name=CenRa_Metabase
|
||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
description=CenRa_METABASE
|
description=CenRa_METABASE
|
||||||
version=1.3
|
version=0.2.1
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ tracker=https://gitea.cenra-outils.org/api/v1/repos/CEN-RA/Plugin_QGIS/issues
|
|||||||
|
|
||||||
hasProcessingProvider=no
|
hasProcessingProvider=no
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
changelog=<h2>CenRa_Metabase:</h2></br><p><h3>08/10/2024 - Version 1.3: </h3> - Lecture de métadonnée des flux WMS/WFS.</p></br><p><h3>07/10/2024 - Version 1.2: </h3> - Correctif de bug.</p></br><p><h3>03/10/2024 - Version 1.1: </h3> - Remonte la fênetre dans la pille.</p></br><p><h3>26/08/2024 - Version 1.0: </h3> - Lancement du plugin CenRa_Metabase </p></br>
|
changelog=<h2>CenRa_METABASE:</h2></br><p><h3>03/04/2025 - Version 0.2.1: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 0.2.0: </h3> - Deployment sur serveur SIG.</p></br><p><h3>07/01/2025 - Version 0.1.6: </h3> - ByPass du certif ssl ci erreur</p></br><p><h3>19/12/2024 - Version 0.1.5: </h3> - Fix les problem de lenteur qu'en la base est down.</p></br><p><h3>12/12/2024 - Version 0.1.4: </h3> - Crash Fix .</p></br><p><h3>08/10/2024 - Version 0.1.3: </h3> - Lecture de métadonnée des flux WMS/WFS.</p></br><p><h3>07/10/2024 - Version 0.1.2: </h3> - Correctif de bug.</p></br><p><h3>03/10/2024 - Version 0.1.1: </h3> - Remonte la fênetre dans la pille.</p></br><p><h3>26/08/2024 - Version 0.1.0: </h3> - Lancement du plugin CenRa_Metabase </p>
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=python
|
tags=python
|
||||||
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
@@ -3,9 +3,7 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import base64
|
import socket
|
||||||
import psycopg2
|
|
||||||
import psycopg2.extras
|
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
from qgis.PyQt.QtWidgets import QApplication
|
from qgis.PyQt.QtWidgets import QApplication
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
@@ -94,6 +92,19 @@ def resources_path(*args):
|
|||||||
path = abspath(join(path, item))
|
path = abspath(join(path, item))
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
def pyperclip():
|
||||||
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
|
dst = abspath(abspath(join(plugin_path(), "CenRa_METABASE\\tools\\")))
|
||||||
|
if IPAddr[0:11] == "100.100.100": #4269
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
|
if IPAddr[0:9] == "192.168.0": #01
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
|
if IPAddr[0:9] == "192.168.1": #0726
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
|
try:
|
||||||
|
shutil.copy(src, dst)
|
||||||
|
except:
|
||||||
|
print('404')
|
||||||
|
|
||||||
def load_ui(*args):
|
def load_ui(*args):
|
||||||
"""Get compile UI file.
|
"""Get compile UI file.
|
||||||
@@ -107,25 +118,6 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def login_base(take=None):
|
|
||||||
from CenRa_METABASE.tools.PythonSQL import host,port,dbname,password,os_user
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
|
||||||
res_ident = first_cur.fetchone()
|
|
||||||
|
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
|
||||||
user = res_ident[1]
|
|
||||||
|
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
|
||||||
|
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
if take:
|
|
||||||
return cur,con
|
|
||||||
else:
|
|
||||||
return cur
|
|
||||||
def send_issues(url,titre,body,labels):
|
def send_issues(url,titre,body,labels):
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
@@ -168,12 +160,15 @@ def maj_verif(NAME):
|
|||||||
except:
|
except:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
try:
|
||||||
plugin_num = version_web.find(NAME)
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
plugin_num = version_web.find(NAME)
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
||||||
if version_plugin != version:
|
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
if version_plugin != version:
|
||||||
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
|
except:
|
||||||
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
import sys
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
|
||||||
#print(IPAddr)
|
|
||||||
if IPAddr[0:11] == "100.100.100": #4269
|
|
||||||
host = "100.100.100.81"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig4269"
|
|
||||||
sigdb="sig4269"
|
|
||||||
refdb="ref_geo4269"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.0": #01
|
|
||||||
host = "192.168.0.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig01"
|
|
||||||
sigdb="sig01"
|
|
||||||
refdb="ref_geo01"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.1": #0726
|
|
||||||
host = "192.168.1.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig0726"
|
|
||||||
sigdb="sig0726"
|
|
||||||
refdb="ref_geo0726"
|
|
||||||
password = "McVities"
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
os_user = os.environ['USER']
|
|
||||||
else:
|
|
||||||
os_user = os.environ['USERNAME']
|
|
||||||
if os_user == 'STAGE':
|
|
||||||
os_user='stage'
|
|
||||||
if os_user == 'Administrateur':
|
|
||||||
os_user='stage'
|
|
||||||
@@ -30,7 +30,7 @@ from .tools.resources import (
|
|||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
from .canvas_editor import PageRender_Editor
|
from .canvas_editor import PageRender_Editor
|
||||||
from .about_form import PageRenderAboutDialog
|
from .about_form import AboutDialog
|
||||||
|
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ class PgPageRender:
|
|||||||
"""
|
"""
|
||||||
About dialog
|
About dialog
|
||||||
"""
|
"""
|
||||||
dialog = PageRenderAboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec_()
|
dialog.exec_()
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
|||||||
os.path.join(
|
os.path.join(
|
||||||
str(Path(__file__).resolve().parent),
|
str(Path(__file__).resolve().parent),
|
||||||
'tools/ui',
|
'tools/ui',
|
||||||
'CenRa_PageRender_about_form.ui'
|
'CenRa_about_form.ui'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class PageRenderAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
class AboutDialog(QDialog, ABOUT_FORM_CLASS):
|
||||||
|
|
||||||
""" About - Let the user display the about dialog. """
|
""" About - Let the user display the about dialog. """
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from PyQt5.QtCore import QSettings
|
from PyQt5.QtCore import QSettings,QPointF
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from functools import partial
|
from functools import partial
|
||||||
@@ -39,6 +39,7 @@ from qgis.core import (
|
|||||||
QgsLayoutTableColumn,
|
QgsLayoutTableColumn,
|
||||||
QgsRectangle,
|
QgsRectangle,
|
||||||
QgsLayoutItemMapOverviewStack,
|
QgsLayoutItemMapOverviewStack,
|
||||||
|
QgsLayoutItemHtml,
|
||||||
)
|
)
|
||||||
from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime, Qt
|
from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime, Qt
|
||||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon, QColor, QFont, QMovie
|
from qgis.PyQt.QtGui import QDesktopServices, QIcon, QColor, QFont, QMovie
|
||||||
@@ -57,13 +58,13 @@ from qgis.PyQt.QtWidgets import (
|
|||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
)
|
)
|
||||||
from PyQt5 import QtGui
|
from PyQt5 import QtGui
|
||||||
|
from PyQt5.QtWidgets import QApplication
|
||||||
from qgis.PyQt.QtXml import QDomDocument
|
from qgis.PyQt.QtXml import QDomDocument
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
import glob
|
import glob
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
login_base,
|
|
||||||
send_issues,
|
send_issues,
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
from .issues import CenRa_Issues
|
||||||
@@ -148,14 +149,95 @@ class PageRender_Editor(QDialog, EDITOR_CLASS):
|
|||||||
self.toolButton_2.clicked.connect(self.type_page)
|
self.toolButton_2.clicked.connect(self.type_page)
|
||||||
self.pushButton_2.clicked.connect(self.load)
|
self.pushButton_2.clicked.connect(self.load)
|
||||||
self.verticalScrollBar.valueChanged.connect(self.moveFrame)
|
self.verticalScrollBar.valueChanged.connect(self.moveFrame)
|
||||||
|
#self.setAcceptHoverEvents(True)
|
||||||
|
self.tableWidget.setTabKeyNavigation(False)
|
||||||
|
|
||||||
def raise_(self):
|
def raise_(self):
|
||||||
self.activateWindow()
|
self.activateWindow()
|
||||||
self.setNavigator()
|
self.setNavigator()
|
||||||
self.verticalScrollBar.setValue(self.frame.y())
|
self.verticalScrollBar.setValue(self.frame.y())
|
||||||
|
def mousePressEvent(self, event):
|
||||||
|
if self.tableWidget.currentItem() != None:
|
||||||
|
QApplication.setOverrideCursor(Qt.OpenHandCursor)
|
||||||
|
global lastPos
|
||||||
|
lastPos = {'x':event.pos().x(),'y':event.pos().y()}
|
||||||
|
|
||||||
def moveFrame(self):
|
def moveFrame(self):
|
||||||
self.frame.move(self.frame.x(),self.verticalScrollBar.value())
|
self.frame.move(self.frame.x(),self.verticalScrollBar.value())
|
||||||
|
|
||||||
|
def keyPressEvent(self, event):
|
||||||
|
#if event.modifiers() & Qt.ControlModifier:
|
||||||
|
if event.key() == Qt.Key_Up:
|
||||||
|
self.verticalSlider.setValue(self.spinBox_2.value()+1)
|
||||||
|
if event.key() == Qt.Key_Down:
|
||||||
|
self.verticalSlider.setValue(self.spinBox_2.value()-1)
|
||||||
|
if event.key() == Qt.Key_Right:
|
||||||
|
self.horizontalSlider.setValue(self.spinBox.value()+1)
|
||||||
|
if event.key() == Qt.Key_Left:
|
||||||
|
self.horizontalSlider.setValue(self.spinBox.value()-1)
|
||||||
|
|
||||||
|
|
||||||
|
def wheelEvent(self,event):
|
||||||
|
if (event.angleDelta().y() >= 1):
|
||||||
|
vsb = self.verticalScrollBar.value()+50
|
||||||
|
else:
|
||||||
|
vsb = self.verticalScrollBar.value()-50
|
||||||
|
self.verticalScrollBar.setValue(vsb)
|
||||||
|
|
||||||
|
def mouseMoveEvent(self, event):
|
||||||
|
updated_cursor_position = event.pos()
|
||||||
|
if self.tableWidget.currentItem() != None:
|
||||||
|
selection_name = (self.tableWidget.currentItem()).text()
|
||||||
|
all_children = self.frame.children()
|
||||||
|
selection = 0
|
||||||
|
for children in all_children:
|
||||||
|
if selection_name == children.objectName():
|
||||||
|
selection = children
|
||||||
|
|
||||||
|
frame_x = self.frame.x()
|
||||||
|
frame_y = self.frame.y()
|
||||||
|
frame_w = self.frame.width()+frame_x
|
||||||
|
frame_h = self.frame.height()+frame_y
|
||||||
|
global lastPos
|
||||||
|
|
||||||
|
orig_position_w = selection.width()
|
||||||
|
orig_position_h = selection.height()
|
||||||
|
if (frame_x <= round(updated_cursor_position.x()) <= frame_w and self.radioButton.isChecked() == True):
|
||||||
|
updated_cursor_position_x = orig_position_w+(round(updated_cursor_position.x()-lastPos['x']))
|
||||||
|
lastPos['x'] = event.pos().x()
|
||||||
|
selection.resize(updated_cursor_position_x,orig_position_h)
|
||||||
|
self.horizontalSlider.setValue(round(updated_cursor_position_x/3.5))
|
||||||
|
orig_position_w = selection.width()
|
||||||
|
orig_position_h = selection.height()
|
||||||
|
if (frame_y <= round(updated_cursor_position.y()) <= frame_h and self.radioButton.isChecked() == True):
|
||||||
|
updated_cursor_position_y = orig_position_h+(round(updated_cursor_position.y()-lastPos['y']))
|
||||||
|
lastPos['y'] = event.pos().y()
|
||||||
|
selection.resize(orig_position_w,updated_cursor_position_y)
|
||||||
|
self.verticalSlider.setValue(round(updated_cursor_position_y/3.5))
|
||||||
|
|
||||||
|
orig_position_x = selection.pos().x()
|
||||||
|
orig_position_y = selection.pos().y()
|
||||||
|
if (frame_x <= round(updated_cursor_position.x()) <= frame_w and self.radioButton.isChecked() == False):
|
||||||
|
updated_cursor_position_x = orig_position_x+(round(updated_cursor_position.x()-lastPos['x']))
|
||||||
|
lastPos['x'] = event.pos().x()
|
||||||
|
#print(updated_cursor_position_x)
|
||||||
|
selection.move(updated_cursor_position_x,orig_position_y)
|
||||||
|
self.horizontalSlider.setValue(round(updated_cursor_position_x/3.5))
|
||||||
|
|
||||||
|
orig_position_x = selection.pos().x()
|
||||||
|
orig_position_y = selection.pos().y()
|
||||||
|
if (frame_y <= round(updated_cursor_position.y()) <= frame_h and self.radioButton.isChecked() == False):
|
||||||
|
updated_cursor_position_y = orig_position_y+(round(updated_cursor_position.y()-lastPos['y']))
|
||||||
|
lastPos['y'] = event.pos().y()
|
||||||
|
#print(updated_cursor_position_y)
|
||||||
|
selection.move(orig_position_x,updated_cursor_position_y)
|
||||||
|
self.verticalSlider.setValue(round(updated_cursor_position_y/3.5))
|
||||||
|
|
||||||
|
def mouseReleaseEvent(self, event):
|
||||||
|
#print('x: {0}, y: {1}'.format(event.pos().x(), event.pos().y()))
|
||||||
|
if self.tableWidget.currentItem() != None:
|
||||||
|
QApplication.restoreOverrideCursor()
|
||||||
|
|
||||||
def select_file(self):
|
def select_file(self):
|
||||||
options = QFileDialog.Options()
|
options = QFileDialog.Options()
|
||||||
options |= QFileDialog.ShowDirsOnly
|
options |= QFileDialog.ShowDirsOnly
|
||||||
@@ -352,8 +434,8 @@ def fletch_canvas(self):
|
|||||||
last_children = selection
|
last_children = selection
|
||||||
self.toolButton_2.setText('Portrait')
|
self.toolButton_2.setText('Portrait')
|
||||||
elif self.toolButton_2.text() == 'Portrait':
|
elif self.toolButton_2.text() == 'Portrait':
|
||||||
self.horizontalSlider.setMaximum(maxV)
|
self.horizontalSlider.setMaximum(maxH)
|
||||||
self.verticalSlider.setMaximum(maxH)
|
self.verticalSlider.setMaximum(maxV)
|
||||||
last_children=0
|
last_children=0
|
||||||
for children in all_children:
|
for children in all_children:
|
||||||
selection = children
|
selection = children
|
||||||
@@ -380,6 +462,7 @@ def fletch_canvas(self):
|
|||||||
self.frame.move(frame_x,frame_y)
|
self.frame.move(frame_x,frame_y)
|
||||||
def setSlider(self):
|
def setSlider(self):
|
||||||
if self.tableWidget.currentItem() != None:
|
if self.tableWidget.currentItem() != None:
|
||||||
|
print(self.tableWidget.tabKeyNavigation())
|
||||||
selection_name = (self.tableWidget.currentItem()).text()
|
selection_name = (self.tableWidget.currentItem()).text()
|
||||||
all_children = self.frame.children()
|
all_children = self.frame.children()
|
||||||
selection = 0
|
selection = 0
|
||||||
@@ -405,14 +488,18 @@ def fletch_canvas(self):
|
|||||||
|
|
||||||
def rotate_color(self,selection,last_children):
|
def rotate_color(self,selection,last_children):
|
||||||
global last_select
|
global last_select
|
||||||
|
if self.radioButton.isChecked() == False:
|
||||||
|
ColorCode = "10, 10, 80, 50"
|
||||||
|
else:
|
||||||
|
ColorCode = "249, 238, 148, 50"
|
||||||
if self.rotate_object[selection.objectName()] == 0:
|
if self.rotate_object[selection.objectName()] == 0:
|
||||||
selection.setStyleSheet("border: 2px solid;border-color:red;border-bottom-color: blue;background-color: rgb(10, 10, 80, 50)")
|
selection.setStyleSheet("border: 2px solid;border-color:red;border-bottom-color: blue;background-color: rgb("+ColorCode+")")
|
||||||
elif self.rotate_object[selection.objectName()] == 90:
|
elif self.rotate_object[selection.objectName()] == 90:
|
||||||
selection.setStyleSheet("border: 2px solid;border-color:red;border-left-color: blue;background-color: rgb(10, 10, 80, 50)")
|
selection.setStyleSheet("border: 2px solid;border-color:red;border-left-color: blue;background-color: rgb("+ColorCode+")")
|
||||||
elif self.rotate_object[selection.objectName()] == 180:
|
elif self.rotate_object[selection.objectName()] == 180:
|
||||||
selection.setStyleSheet("border: 2px solid;border-color:red;border-top-color: blue;background-color: rgb(10, 10, 80, 50)")
|
selection.setStyleSheet("border: 2px solid;border-color:red;border-top-color: blue;background-color: rgb("+ColorCode+")")
|
||||||
elif self.rotate_object[selection.objectName()] == 270:
|
elif self.rotate_object[selection.objectName()] == 270:
|
||||||
selection.setStyleSheet("border: 2px solid;border-color:red;border-right-color: blue;background-color: rgb(10, 10, 80, 50)")
|
selection.setStyleSheet("border: 2px solid;border-color:red;border-right-color: blue;background-color: rgb("+ColorCode+")")
|
||||||
if last_children != 0:
|
if last_children != 0:
|
||||||
if last_select != selection.objectName():
|
if last_select != selection.objectName():
|
||||||
last_children.setStyleSheet("background-color: rgb(10, 10, 10, 50)")
|
last_children.setStyleSheet("background-color: rgb(10, 10, 10, 50)")
|
||||||
|
|||||||
@@ -1,167 +0,0 @@
|
|||||||
|
|
||||||
from qgis.core import (
|
|
||||||
QgsLayoutSize,
|
|
||||||
QgsUnitTypes,
|
|
||||||
QgsLayoutPoint,
|
|
||||||
)
|
|
||||||
def fletch_canvas(self):
|
|
||||||
if self.radioButton_6.isChecked():
|
|
||||||
values_page = 'A4'
|
|
||||||
else:
|
|
||||||
values_page = 'A3'
|
|
||||||
if self.radioButton_7.isChecked():
|
|
||||||
page_rotate = 'Portrait'
|
|
||||||
else:
|
|
||||||
page_rotate = 'Landscape'
|
|
||||||
|
|
||||||
if page_rotate == 'Portrait':
|
|
||||||
if values_page == 'A4':
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(200.0,200, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(80.0,80, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(126, 210, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(86.0,86, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(6, 208, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(14.285714285714286,14, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(189, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(51.42857142857143,7, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(9, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(45.714285714285715,11, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(3, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(154.28571428571428,11, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(51, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(151, 210, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_rotate'] = 0
|
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(229, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(125.71428571428571,14, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(60, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(51.42857142857143,13, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(9, 184, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(28.571428571428573,29, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(9, 151, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
if values_page == 'A3':
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(282,282, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(8, 8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(113,113, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(178, 296, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(121,121, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(8, 293, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(20,20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(267, 28, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(73,10, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(13, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(64,16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(4, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(218,16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(72, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(213, 296, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_rotate'] = 0
|
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(323, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(177,20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(85, 28, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(73,18, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(13, 259, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(40,40, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(13, 213, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
if page_rotate == 'Landscape':
|
|
||||||
if values_page == 'A4':
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(200.0,200, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(6, 6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(85.71428571428571,69, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(209, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(85.71428571428571,131, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(209, 74, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(14.285714285714286,14, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(189, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(51.42857142857143,7, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(9, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(45.714285714285715,11, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(3, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(154.28571428571428,11, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(51, 3, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(151, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_rotate'] = 0
|
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(51.42857142857143,6, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(229, 197, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(125.71428571428571,14, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(60, 20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(51.42857142857143,13, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(9, 184, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(28.571428571428573,29, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(9, 151, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
if values_page == 'A3':
|
|
||||||
self.template_parameters['Carte_size'] = QgsLayoutSize(282,282, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_locals'] = QgsLayoutPoint(8, 8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_rotate'] = 0
|
|
||||||
self.template_parameters['Carte_2_size'] = QgsLayoutSize(121,97, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_locals'] = QgsLayoutPoint(294, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Carte_2_rotate'] = 0
|
|
||||||
self.template_parameters['Legande_size'] = QgsLayoutSize(121,185, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_locals'] = QgsLayoutPoint(294, 105, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Legande_rotate'] = 0
|
|
||||||
self.template_parameters['Arrow_size'] = QgsLayoutSize(20,20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_locals'] = QgsLayoutPoint(266, 28, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Arrow_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_size'] = QgsLayoutSize(73,10, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_locals'] = QgsLayoutPoint(12, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_size'] = QgsLayoutSize(64,16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_locals'] = QgsLayoutPoint(4, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_rotate'] = 0
|
|
||||||
self.template_parameters['Titre_size'] = QgsLayoutSize(218,16, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_locals'] = QgsLayoutPoint(73, 4, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Titre_rotate'] = 0
|
|
||||||
self.template_parameters['Credit_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_locals'] = QgsLayoutPoint(214, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Credit_rotate'] = 0
|
|
||||||
self.template_parameters['Source_size'] = QgsLayoutSize(73,8, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_locals'] = QgsLayoutPoint(322, 278, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Source_rotate'] = 0
|
|
||||||
self.template_parameters['Sous_titre_size'] = QgsLayoutSize(177,20, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_locals'] = QgsLayoutPoint(85, 28, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Sous_titre_rotate'] = 0
|
|
||||||
self.template_parameters['Echelle_2_size'] = QgsLayoutSize(73,18, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_locals'] = QgsLayoutPoint(12, 260, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Echelle_2_rotate'] = 0
|
|
||||||
self.template_parameters['Logo_2_size'] = QgsLayoutSize(40,40, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_locals'] = QgsLayoutPoint(12, 214, QgsUnitTypes.LayoutMillimeters)
|
|
||||||
self.template_parameters['Logo_2_rotate'] = 0
|
|
||||||
return self.template_parameters
|
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
name=CenRa_PageRender
|
name=CenRa_PageRender
|
||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
description=CenRa_PageRender
|
description=CenRa_PageRender
|
||||||
version=1.3
|
version=0.1.6
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ tracker=https://gitea.cenra-outils.org/api/v1/repos/CEN-RA/Plugin_QGIS/issues
|
|||||||
|
|
||||||
hasProcessingProvider=no
|
hasProcessingProvider=no
|
||||||
# Uncomment the following line and add your changelog:
|
# Uncomment the following line and add your changelog:
|
||||||
changelog=<h2>CenRa_PageRender:</h2></br><p><h3>08/11/2024 - Version 1.3: </h3> - Correctif de bug. </br><p><h3>21/10/2024 - Version 1.1: </h3> - Les match en if. </br> - Bouton de scroll et adaptation portrait.</p></br><p><h3>09/10/2024 - Version 1.0: </h3> - Création.</p>
|
changelog=<h2>CenRa_PAGERENDER:</h2></br><p><h3>03/04/2025 - Version 0.1.6: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 0.1.5: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>14/11/2024 - Version 0.1.4: </h3> - Implementation de la mollet. </br> - Implementation du dragging pour déplacer et modification de la taille </br></p></br><p><h3>08/11/2024 - Version 0.1.3: </h3> - Correctif de bug. </br><p><h3>21/10/2024 - Version 0.1.1: </h3> - Les match en if. </br> - Bouton de scroll et adaptation portrait.</p></br><p><h3>09/10/2024 - Version 0.1.0: </h3> - Création.</p>
|
||||||
|
|
||||||
# Tags are comma separated with spaces allowed
|
# Tags are comma separated with spaces allowed
|
||||||
tags=python
|
tags=python
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
import sys
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
|
||||||
#print(IPAddr)
|
|
||||||
if IPAddr[0:11] == "100.100.100": #4269
|
|
||||||
host = "100.100.100.81"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig4269"
|
|
||||||
sigdb="sig4269"
|
|
||||||
refdb="ref_geo4269"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.0": #01
|
|
||||||
host = "192.168.0.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig01"
|
|
||||||
sigdb="sig01"
|
|
||||||
refdb="ref_geo01"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.1": #0726
|
|
||||||
host = "192.168.1.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig0726"
|
|
||||||
sigdb="sig0726"
|
|
||||||
refdb="ref_geo0726"
|
|
||||||
password = "McVities"
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
os_user = os.environ['USER']
|
|
||||||
else:
|
|
||||||
os_user = os.environ['USERNAME']
|
|
||||||
if os_user == 'STAGE':
|
|
||||||
os_user='stage'
|
|
||||||
if os_user == 'Administrateur':
|
|
||||||
os_user='stage'
|
|
||||||
@@ -107,25 +107,6 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def login_base(take=None):
|
|
||||||
from CenRa_METABASE.tools.PythonSQL import host,port,dbname,password,os_user
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
|
||||||
res_ident = first_cur.fetchone()
|
|
||||||
|
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
|
||||||
user = res_ident[1]
|
|
||||||
|
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
|
||||||
|
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
if take:
|
|
||||||
return cur,con
|
|
||||||
else:
|
|
||||||
return cur
|
|
||||||
def send_issues(url,titre,body,labels):
|
def send_issues(url,titre,body,labels):
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
@@ -168,12 +149,15 @@ def maj_verif(NAME):
|
|||||||
except:
|
except:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
try:
|
||||||
plugin_num = version_web.find(NAME)
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
plugin_num = version_web.find(NAME)
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
||||||
if version_plugin != version:
|
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
if version_plugin != version:
|
||||||
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
|
except:
|
||||||
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
|
|||||||
@@ -443,6 +443,9 @@
|
|||||||
<property name="editTriggers">
|
<property name="editTriggers">
|
||||||
<set>QAbstractItemView::NoEditTriggers</set>
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="tabKeyNavigation">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="dragEnabled">
|
<property name="dragEnabled">
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>SICEN</string>
|
<string>Journal des modifications</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset>
|
<iconset>
|
||||||
@@ -13,23 +13,31 @@ import qgis
|
|||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
|
||||||
|
import socket
|
||||||
import os
|
import os
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
plugin_path,
|
plugin_path,
|
||||||
|
pyperclip,
|
||||||
resources_path,
|
resources_path,
|
||||||
maj_verif,
|
maj_verif,
|
||||||
)
|
)
|
||||||
|
pyperclip()
|
||||||
|
|
||||||
from .postgis_editor import Postgis_Editor
|
from .postgis_editor import Postgis_Editor
|
||||||
from .postgis_creator import Postgis_Creator
|
from .postgis_creator import Postgis_Creator
|
||||||
from .about_form import PostgisAboutDialog
|
from .postgis_rename import Postgis_Rename
|
||||||
|
from .about_form import AboutDialog
|
||||||
|
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
|
|
||||||
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
|
|
||||||
class PgPostgis:
|
class PgPostgis:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
""" Constructor. """
|
""" Constructor. """
|
||||||
self.action_editor = None
|
self.action_editor = None
|
||||||
self.action_creator = None
|
self.action_creator = None
|
||||||
|
self.action_rename = None
|
||||||
# self.issues = None
|
# self.issues = None
|
||||||
self.provider = None
|
self.provider = None
|
||||||
self.locator_filter = None
|
self.locator_filter = None
|
||||||
@@ -58,6 +66,7 @@ class PgPostgis:
|
|||||||
|
|
||||||
icon = QIcon(resources_path('icons', 'page_new.png'))
|
icon = QIcon(resources_path('icons', 'page_new.png'))
|
||||||
icon2 = QIcon(resources_path('icons', 'page_ajout.png'))
|
icon2 = QIcon(resources_path('icons', 'page_ajout.png'))
|
||||||
|
icon3 = QIcon(resources_path('icons', 'page_rename.png'))
|
||||||
|
|
||||||
# Open the online help
|
# Open the online help
|
||||||
self.help_action = QAction(icon, "CenRa_Postgis", iface.mainWindow())
|
self.help_action = QAction(icon, "CenRa_Postgis", iface.mainWindow())
|
||||||
@@ -69,6 +78,15 @@ class PgPostgis:
|
|||||||
self.postgis_creator = QAction(icon, 'dossier_creator',None)
|
self.postgis_creator = QAction(icon, 'dossier_creator',None)
|
||||||
self.toolBar.addAction(self.postgis_creator)
|
self.toolBar.addAction(self.postgis_creator)
|
||||||
self.postgis_creator.triggered.connect(self.open_creator)
|
self.postgis_creator.triggered.connect(self.open_creator)
|
||||||
|
|
||||||
|
self.postgis_creator.setEnabled(False)
|
||||||
|
if IPAddr[0:11] == "100.100.100":
|
||||||
|
self.postgis_creator.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.0":
|
||||||
|
self.postgis_creator.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.1":
|
||||||
|
self.postgis_creator.setEnabled(True)
|
||||||
|
|
||||||
if not self.action_editor:
|
if not self.action_editor:
|
||||||
self.action_editor = Postgis_Editor()
|
self.action_editor = Postgis_Editor()
|
||||||
|
|
||||||
@@ -76,11 +94,43 @@ class PgPostgis:
|
|||||||
self.toolBar.addAction(self.postgis_editor)
|
self.toolBar.addAction(self.postgis_editor)
|
||||||
self.postgis_editor.triggered.connect(self.open_editor)
|
self.postgis_editor.triggered.connect(self.open_editor)
|
||||||
|
|
||||||
|
self.postgis_editor.setEnabled(False)
|
||||||
|
if IPAddr[0:11] == "100.100.100":
|
||||||
|
self.postgis_editor.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.0":
|
||||||
|
self.postgis_editor.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.1":
|
||||||
|
self.postgis_editor.setEnabled(True)
|
||||||
|
|
||||||
|
if not self.action_rename:
|
||||||
|
self.action_rename = Postgis_Rename()
|
||||||
|
|
||||||
|
self.postgis_rename = QAction(icon3, 'dossier_rename',None)
|
||||||
|
self.toolBar.addAction(self.postgis_rename)
|
||||||
|
self.postgis_rename.triggered.connect(self.open_rename)
|
||||||
|
|
||||||
|
if os.environ['USERNAME'] == 'tlaveille' or os.environ['USERNAME'] == 'lpoulin' or os.environ['USERNAME'] == 'rclement':
|
||||||
|
self.action_rename.setEnabled(True)
|
||||||
|
self.postgis_rename.setEnabled(True)
|
||||||
|
self.postgis_rename.setVisible(1)
|
||||||
|
else:
|
||||||
|
self.action_rename.setEnabled(False)
|
||||||
|
self.postgis_rename.setEnabled(False)
|
||||||
|
self.postgis_rename.setVisible(0)
|
||||||
|
|
||||||
|
self.postgis_rename.setEnabled(False)
|
||||||
|
if IPAddr[0:11] == "100.100.100":
|
||||||
|
self.postgis_rename.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.0":
|
||||||
|
self.postgis_rename.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.1":
|
||||||
|
self.postgis_rename.setEnabled(True)
|
||||||
|
|
||||||
def open_about_dialog(self):
|
def open_about_dialog(self):
|
||||||
"""
|
"""
|
||||||
About dialog
|
About dialog
|
||||||
"""
|
"""
|
||||||
dialog = PostgisAboutDialog(iface)
|
dialog = AboutDialog(iface)
|
||||||
dialog.exec_()
|
dialog.exec_()
|
||||||
def open_help():
|
def open_help():
|
||||||
""" Open the online help. """
|
""" Open the online help. """
|
||||||
@@ -94,12 +144,18 @@ class PgPostgis:
|
|||||||
self.action_creator.show()
|
self.action_creator.show()
|
||||||
self.action_creator.raise_()
|
self.action_creator.raise_()
|
||||||
|
|
||||||
|
def open_rename(self):
|
||||||
|
self.action_rename.show()
|
||||||
|
self.action_rename.raise_()
|
||||||
|
|
||||||
def unload(self):
|
def unload(self):
|
||||||
""" Unload the plugin. """
|
""" Unload the plugin. """
|
||||||
if self.action_editor:
|
if self.action_editor:
|
||||||
iface.removePluginMenu('CenRa_Postgis',self.postgis_editor)
|
iface.removePluginMenu('CenRa_Postgis',self.postgis_editor)
|
||||||
if self.action_creator:
|
if self.action_creator:
|
||||||
iface.removePluginMenu('CenRa_Postgis',self.postgis_creator)
|
iface.removePluginMenu('CenRa_Postgis',self.postgis_creator)
|
||||||
|
if self.action_rename:
|
||||||
|
iface.removePluginMenu('CenRa_Postgis',self.postgis_rename)
|
||||||
|
|
||||||
if self.provider:
|
if self.provider:
|
||||||
QgsApplication.processingRegistry().removeProvider(self.provider)
|
QgsApplication.processingRegistry().removeProvider(self.provider)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class PostgisAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
class AboutDialog(QDialog, ABOUT_FORM_CLASS):
|
||||||
|
|
||||||
""" About - Let the user display the about dialog. """
|
""" About - Let the user display the about dialog. """
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ class PostgisAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
|||||||
self.iface = iface
|
self.iface = iface
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
self.viewer.setHtml(devlog('CenRa_POSTGRES'))
|
self.viewer.setHtml(devlog('CenRa_POSTGIS'))
|
||||||
|
|
||||||
self.rejected.connect(self.onReject)
|
self.rejected.connect(self.onReject)
|
||||||
self.buttonBox.rejected.connect(self.onReject)
|
self.buttonBox.rejected.connect(self.onReject)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
name=CenRa_POSTGIS
|
name=CenRa_POSTGIS
|
||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
description=Permet de crée un dossier dans la base PostGis
|
description=Permet de crée un dossier dans la base PostGis
|
||||||
version=2.0
|
version=2.7
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ email=si_besoin@cen-rhonealpes.fr
|
|||||||
# Optional items:
|
# Optional items:
|
||||||
|
|
||||||
# Uncomment the following line and add your changelog entries:
|
# Uncomment the following line and add your changelog entries:
|
||||||
changelog=<h2>CenRa_POSTGIS:</h2></br><p><h3>22/10/2024 - Version 2.0:</h3>- Refont du code.</p>
|
changelog=<h2>CenRa_POSTGIS:</h2></br><p><h3>03/04/2025 - Version 2.7: </h3> - Mise a jour de securite.</p></br><p><h3>12/02/2025 - Version 2.6: </h3> - InDev:renomé les schema et table.</p></br><p><h3>04/02/2025 - Version 2.5: </h3> - Correctif bug création de couche.</p></br><p><h3>23/01/2025 - Version 2.4: </h3> - Correctif sur les pkey.</p></br><p><h3>22/01/2025 - Version 2.3: </h3> - Correctif sur la creation de projet.</p></br><p><h3>21/01/2025 - Version 2.2: </h3> - Correctif sur la longeur des nom.</p></br><p><h3>07/01/2025 - Version 2.1: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>22/10/2024 - Version 2.0:</h3>- Refont du code.</p>
|
||||||
|
|
||||||
# tags are comma separated with spaces allowed
|
# tags are comma separated with spaces allowed
|
||||||
tags=cenra, postgis, database
|
tags=cenra, postgis, database
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from builtins import str
|
|||||||
from builtins import object
|
from builtins import object
|
||||||
import qgis
|
import qgis
|
||||||
from qgis.PyQt.QtCore import QSettings
|
from qgis.PyQt.QtCore import QSettings
|
||||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
|
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog,QMessageBox
|
||||||
from qgis.PyQt.QtGui import QIcon
|
from qgis.PyQt.QtGui import QIcon
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
from PyQt5.QtGui import *
|
from PyQt5.QtGui import *
|
||||||
@@ -15,12 +15,17 @@ from PyQt5 import QtGui
|
|||||||
from qgis.core import *
|
from qgis.core import *
|
||||||
from qgis.core import QgsDataSourceUri
|
from qgis.core import QgsDataSourceUri
|
||||||
|
|
||||||
from .tools.PythonSQL import *
|
from .tools.PythonSQL import login_base
|
||||||
|
from .tools.SQLRequet import *
|
||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
login_base,
|
|
||||||
send_issues,
|
send_issues,
|
||||||
|
create_vierge,
|
||||||
|
create_contour,
|
||||||
|
create_travaux,
|
||||||
|
create_habita
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
from .issues import CenRa_Issues
|
||||||
|
|
||||||
@@ -46,6 +51,7 @@ class Postgis_Creator(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
# run method that performs all the real work
|
# run method that performs all the real work
|
||||||
def raise_(self):
|
def raise_(self):
|
||||||
|
self.activateWindow()
|
||||||
# show the dialog
|
# show the dialog
|
||||||
self.show()
|
self.show()
|
||||||
# Run the dialog event loop
|
# Run the dialog event loop
|
||||||
@@ -70,363 +76,29 @@ class Postgis_Creator(QDialog, EDITOR_CLASS):
|
|||||||
if self.nom.text().find(car) != -1 :
|
if self.nom.text().find(car) != -1 :
|
||||||
QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.nom.text().lower() )
|
QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.nom.text().lower() )
|
||||||
return
|
return
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
account = login_base("account")
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
user = account[0]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
mdp = account[1]
|
||||||
res_ident = first_cur.fetchone()
|
host = account[2]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
port = account[3]
|
||||||
user = res_ident[1]
|
dbname = account[4]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
cur = account[7]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
con = account[8]
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
SQL_schema = "CREATE SCHEMA " + schema + ";"
|
SQL_schema = "CREATE SCHEMA " + schema + ";"
|
||||||
SQL_GRANT_SCHEMA="GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_sig;"
|
SQL_GRANT_SCHEMA="GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_sig;"
|
||||||
|
|
||||||
cur.execute(SQL_schema)
|
if self.couche_contour.isChecked() or self.couche_habitat.isChecked() or self.couche_travaux_prevus.isChecked() or self.couche_vierge.isChecked():
|
||||||
cur.execute(SQL_GRANT_SCHEMA)
|
cur.execute(SQL_schema)
|
||||||
|
cur.execute(SQL_GRANT_SCHEMA)
|
||||||
|
else:
|
||||||
|
iface.messageBar().pushMessage("POSTGRESQL :", "Pas de couche sélectionnée, création refusée.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
### Creation de la table contour
|
create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
||||||
if self.couche_contour.isChecked(): # Verifie si la checkbox est cochee
|
create_habita(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
||||||
if self.annee_1.text() == 'aaaa' or self.annee_1.text() == '':
|
create_travaux(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
||||||
tablename = schema + "_contour"
|
create_vierge(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
||||||
else :
|
|
||||||
tablename = schema + "_contour_" + self.annee_1.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'contour_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_contour)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
### Creation de la table habitat
|
|
||||||
if self.couche_habitat.isChecked():
|
|
||||||
if self.annee_2.text() == 'aaaa' or self.annee_2.text() == '':
|
|
||||||
tablename = schema + "_habitat"
|
|
||||||
else :
|
|
||||||
tablename = schema + "_habitat_" + self.annee_2.text()
|
|
||||||
tablename_1=tablename+"_points"
|
|
||||||
tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_1 + champ_vegethab_point
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'vegethab_points_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_1+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_VEGETHAB)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_coordonnees)
|
|
||||||
cur.execute(SQL_style)
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
### Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename_1, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
tablename_2=tablename+"_lignes"
|
|
||||||
tablename_qgis = tablename_2[1:]
|
|
||||||
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_2 + champ_vegethab_multilinestring
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2 + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
|
||||||
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'vegethab_lignes_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_2+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_VEGETHAB)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_length_m)
|
|
||||||
cur.execute(SQL_trigger_length_km)
|
|
||||||
cur.execute(SQL_style)
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
### Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename_2, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
tablename_3=tablename+"_polygones"
|
|
||||||
tablename_qgis = tablename_3[1:]
|
|
||||||
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_3 + champ_vegethab_multipolygon
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3 + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'vegethab_polygones_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_3+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_VEGETHAB)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
cur.execute(SQL_style)
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
### Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename_3, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
'''
|
|
||||||
SQL_habitat = "CREATE TABLE " + schema + "."+ tablename + champ_habitat
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
SQL_trigger_concat_cd_cb = "CREATE TRIGGER concat_cd_cb" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.concat_cd_cb();"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'habitat_modele_v3'"""
|
|
||||||
|
|
||||||
cur.execute(SQL_habitat)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
cur.execute(SQL_trigger_concat_cd_cb)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
'''
|
|
||||||
### Creation de la table travaux prevus
|
|
||||||
if self.couche_travaux_prevus.isChecked():
|
|
||||||
#**********Poly
|
|
||||||
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
|
||||||
tablename = schema + "_travaux_prevus_poly"
|
|
||||||
else :
|
|
||||||
tablename = schema + "_travaux_prevus_poly_" + self.annee_5.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multipolygon
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'travaux_prevus_poly_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_travaux_prevus)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
#**********ligne
|
|
||||||
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
|
||||||
tablename = schema + "_travaux_prevus_ligne"
|
|
||||||
else :
|
|
||||||
tablename = schema + "_travaux_prevus_ligne_" + self.annee_5.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multilinestring
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
|
||||||
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'travaux_prevus_ligne_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_travaux_prevus)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_trigger_length_m)
|
|
||||||
cur.execute(SQL_trigger_length_km)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
#**********point
|
|
||||||
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
|
||||||
tablename = schema + "_travaux_prevus_point"
|
|
||||||
else :
|
|
||||||
tablename = schema + "_travaux_prevus_point_" + self.annee_5.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_point
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'travaux_prevus_point_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_travaux_prevus)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_trigger_coordonnees)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
### Creation de la table vierge
|
|
||||||
if self.couche_vierge.isChecked():
|
|
||||||
if self.annee_4.text() == 'aaaa' or self.annee_4.text() == '':
|
|
||||||
tablename = schema + "_" + self.nom_couche_vierge.text().lower()
|
|
||||||
else :
|
|
||||||
tablename = schema + "_" + self.nom_couche_vierge.text().lower() + "_" + self.annee_4.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
if self.couche_vierge_point.isChecked() == 1 :
|
|
||||||
champ_vierge = champ_viergePoint
|
|
||||||
|
|
||||||
if self.couche_vierge_ligne.isChecked() == 1 :
|
|
||||||
champ_vierge = champ_viergeLigne
|
|
||||||
|
|
||||||
if self.couche_vierge_polygone.isChecked() == 1 :
|
|
||||||
champ_vierge = champ_viergePolygone
|
|
||||||
|
|
||||||
SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
|
||||||
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
|
||||||
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
|
||||||
|
|
||||||
cur.execute(SQL_vierge)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
|
|
||||||
if self.couche_vierge_point.isChecked() == 1 :
|
|
||||||
cur.execute(SQL_trigger_coordonnees)
|
|
||||||
|
|
||||||
if self.couche_vierge_ligne.isChecked() == 1 :
|
|
||||||
cur.execute(SQL_trigger_length_m)
|
|
||||||
cur.execute(SQL_trigger_length_km)
|
|
||||||
|
|
||||||
if self.couche_vierge_polygone.isChecked() == 1 :
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
### Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
else :
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
con.close()
|
con.close()
|
||||||
pass
|
pass
|
||||||
@@ -15,12 +15,17 @@ from PyQt5 import QtGui
|
|||||||
from qgis.core import *
|
from qgis.core import *
|
||||||
from qgis.core import QgsDataSourceUri
|
from qgis.core import QgsDataSourceUri
|
||||||
|
|
||||||
from .tools.PythonSQL import *
|
from .tools.PythonSQL import login_base
|
||||||
|
from .tools.SQLRequet import *
|
||||||
|
|
||||||
from .tools.resources import (
|
from .tools.resources import (
|
||||||
load_ui,
|
load_ui,
|
||||||
resources_path,
|
resources_path,
|
||||||
login_base,
|
|
||||||
send_issues,
|
send_issues,
|
||||||
|
create_vierge,
|
||||||
|
create_contour,
|
||||||
|
create_travaux,
|
||||||
|
create_habita
|
||||||
)
|
)
|
||||||
from .issues import CenRa_Issues
|
from .issues import CenRa_Issues
|
||||||
|
|
||||||
@@ -46,16 +51,15 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
### Outil Ajout de nouvelles couche a un dossier
|
### Outil Ajout de nouvelles couche a un dossier
|
||||||
def raise_(self):
|
def raise_(self):
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
self.activateWindow()
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
account = login_base("account")
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
user = account[0]
|
||||||
res_ident = first_cur.fetchone()
|
mdp = account[1]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
host = account[2]
|
||||||
user = res_ident[1]
|
port = account[3]
|
||||||
|
dbname = account[4]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
cur = account[7]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
con = account[8]
|
||||||
first_conn.close()
|
|
||||||
# Creation de la liste des schemas de la base de donnees
|
# Creation de la liste des schemas de la base de donnees
|
||||||
SQL = """WITH list_schema AS (
|
SQL = """WITH list_schema AS (
|
||||||
select schemaname,'sig' as group from pg_catalog.pg_tables
|
select schemaname,'sig' as group from pg_catalog.pg_tables
|
||||||
@@ -86,15 +90,14 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
|
|||||||
# See if OK was pressed
|
# See if OK was pressed
|
||||||
if result == 1:
|
if result == 1:
|
||||||
#******************************debut script*********************************
|
#******************************debut script*********************************
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
account = login_base("account")
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
user = account[0]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
mdp = account[1]
|
||||||
res_ident = first_cur.fetchone()
|
host = account[2]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
port = account[3]
|
||||||
user = res_ident[1]
|
dbname = account[4]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
cur = account[7]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
con = account[8]
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
if self.schema.currentIndex() == -1 :
|
if self.schema.currentIndex() == -1 :
|
||||||
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.")
|
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.")
|
||||||
@@ -102,350 +105,10 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
|
|||||||
|
|
||||||
schema = self.schema.currentText()
|
schema = self.schema.currentText()
|
||||||
|
|
||||||
### Creation de la table contour
|
create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
||||||
if self.couche_contour.isChecked(): # Verifie si la checkbox est cochee
|
create_habita(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
||||||
if self.annee_1.text() == 'aaaa' or self.annee_1.text() == '':
|
create_travaux(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
||||||
tablename = schema + "_contour"
|
create_vierge(self,schema,cur,con,host ,port ,dbname ,user ,mdp)
|
||||||
else :
|
|
||||||
tablename = schema + "_contour_" + self.annee_1.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'contour_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_contour)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
### Creation de la table habitat
|
|
||||||
|
|
||||||
if self.couche_habitat.isChecked():
|
|
||||||
if self.annee_2.text() == 'aaaa' or self.annee_2.text() == '':
|
|
||||||
tablename = schema + "_habitat"
|
|
||||||
else :
|
|
||||||
tablename = schema + "_habitat_" + self.annee_2.text()
|
|
||||||
|
|
||||||
tablename_1=tablename+"_points"
|
|
||||||
tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_1 + champ_vegethab_point
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'vegethab_points_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_1+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_VEGETHAB)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_coordonnees)
|
|
||||||
cur.execute(SQL_style)
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
### Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename_1, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
tablename_2=tablename+"_lignes"
|
|
||||||
tablename_qgis = tablename_2[1:]
|
|
||||||
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_2 + champ_vegethab_multilinestring
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2 + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
|
||||||
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'vegethab_lignes_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_2+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_VEGETHAB)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_length_m)
|
|
||||||
cur.execute(SQL_trigger_length_km)
|
|
||||||
cur.execute(SQL_style)
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
### Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename_2, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
tablename_3=tablename+"_polygones"
|
|
||||||
tablename_qgis = tablename_3[1:]
|
|
||||||
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_3 + champ_vegethab_multipolygon
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3 + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'vegethab_polygones_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename_3+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_VEGETHAB)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
cur.execute(SQL_style)
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
### Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename_3, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
'''
|
|
||||||
SQL_habitat = "CREATE TABLE " + schema + "."+ tablename + champ_habitat
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
SQL_trigger_concat_cd_cb = "CREATE TRIGGER concat_cd_cb" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.concat_cd_cb();"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'habitat_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_habitat)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
cur.execute(SQL_trigger_concat_cd_cb)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
'''
|
|
||||||
### Creation de la table travaux prevus
|
|
||||||
if self.couche_travaux_prevus.isChecked():
|
|
||||||
#**********Poly
|
|
||||||
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
|
||||||
tablename = schema + "_travaux_prevus_poly"
|
|
||||||
else :
|
|
||||||
tablename = schema + "_travaux_prevus_poly_" + self.annee_5.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multipolygon
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'travaux_prevus_poly_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_travaux_prevus)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
#**********ligne
|
|
||||||
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
|
||||||
tablename = schema + "_travaux_prevus_ligne"
|
|
||||||
else :
|
|
||||||
tablename = schema + "_travaux_prevus_ligne_" + self.annee_5.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multilinestring
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
|
||||||
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'travaux_prevus_ligne_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_travaux_prevus)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_trigger_length_m)
|
|
||||||
cur.execute(SQL_trigger_length_km)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
#**********point
|
|
||||||
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
|
||||||
tablename = schema + "_travaux_prevus_point"
|
|
||||||
else :
|
|
||||||
tablename = schema + "_travaux_prevus_point_" + self.annee_5.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_point
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
|
||||||
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
|
||||||
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
|
||||||
|
|
||||||
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
|
||||||
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
|
||||||
FROM layer_styles
|
|
||||||
WHERE description = 'travaux_prevus_point_modele_v3'"""
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_travaux_prevus)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_trigger_date_creation)
|
|
||||||
cur.execute(SQL_trigger_date_maj)
|
|
||||||
cur.execute(SQL_trigger_coordonnees)
|
|
||||||
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
## Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
### Creation de la table vierge
|
|
||||||
if self.couche_vierge.isChecked():
|
|
||||||
if self.annee_4.text() == 'aaaa' or self.annee_4.text() == '':
|
|
||||||
tablename = schema + "_" + self.nom_couche_vierge.text().lower()
|
|
||||||
else :
|
|
||||||
tablename = schema + "_" + self.nom_couche_vierge.text().lower() + "_" + self.annee_4.text()
|
|
||||||
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
|
||||||
|
|
||||||
if self.couche_vierge_point.isChecked() == 1 :
|
|
||||||
champ_vierge = champ_viergePoint
|
|
||||||
|
|
||||||
if self.couche_vierge_ligne.isChecked() == 1 :
|
|
||||||
champ_vierge = champ_viergeLigne
|
|
||||||
|
|
||||||
if self.couche_vierge_polygone.isChecked() == 1 :
|
|
||||||
champ_vierge = champ_viergePolygone
|
|
||||||
|
|
||||||
SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
|
|
||||||
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
|
|
||||||
|
|
||||||
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
|
||||||
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
|
||||||
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
|
||||||
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
|
||||||
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
|
||||||
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+schema+"."+tablename+"_gid_seq TO grp_qgis;"
|
|
||||||
|
|
||||||
cur.execute(SQL_vierge)
|
|
||||||
cur.execute(SQL_pkey)
|
|
||||||
cur.execute(SQL_GRANT_TABLE)
|
|
||||||
|
|
||||||
if self.couche_vierge_point.isChecked() == 1 :
|
|
||||||
cur.execute(SQL_trigger_coordonnees)
|
|
||||||
|
|
||||||
if self.couche_vierge_ligne.isChecked() == 1 :
|
|
||||||
cur.execute(SQL_trigger_length_m)
|
|
||||||
cur.execute(SQL_trigger_length_km)
|
|
||||||
|
|
||||||
if self.couche_vierge_polygone.isChecked() == 1 :
|
|
||||||
cur.execute(SQL_trigger_area_m2)
|
|
||||||
cur.execute(SQL_trigger_area_ha)
|
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
### Affichage de la table
|
|
||||||
uri = QgsDataSourceUri()
|
|
||||||
# set host name, port, database name, username and password
|
|
||||||
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
|
||||||
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
|
||||||
uri.setDataSource(schema, tablename, geom)
|
|
||||||
|
|
||||||
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
|
||||||
|
|
||||||
else :
|
|
||||||
con.commit()
|
|
||||||
|
|
||||||
con.close()
|
con.close()
|
||||||
pass
|
pass
|
||||||
@@ -0,0 +1,235 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from __future__ import absolute_import
|
||||||
|
# Import the PyQt and QGIS libraries
|
||||||
|
from builtins import next
|
||||||
|
from builtins import str
|
||||||
|
from builtins import object
|
||||||
|
import qgis
|
||||||
|
from qgis.PyQt.QtCore import QSettings
|
||||||
|
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog, QMessageBox,QDialogButtonBox
|
||||||
|
from qgis.PyQt.QtGui import QIcon
|
||||||
|
from PyQt5.QtCore import *
|
||||||
|
from PyQt5.QtGui import *
|
||||||
|
from PyQt5 import QtGui
|
||||||
|
from qgis.core import *
|
||||||
|
from qgis.core import QgsDataSourceUri
|
||||||
|
|
||||||
|
from .tools.PythonSQL import login_base
|
||||||
|
from .tools.SQLRequet import *
|
||||||
|
|
||||||
|
from .tools.resources import (
|
||||||
|
load_ui,
|
||||||
|
resources_path,
|
||||||
|
send_issues,
|
||||||
|
create_vierge,
|
||||||
|
create_contour,
|
||||||
|
create_travaux,
|
||||||
|
create_habita
|
||||||
|
)
|
||||||
|
from .issues import CenRa_Issues
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
import webbrowser, os
|
||||||
|
import psycopg2
|
||||||
|
import psycopg2.extras
|
||||||
|
import base64
|
||||||
|
from qgis.utils import iface
|
||||||
|
|
||||||
|
EDITOR_CLASS = load_ui('CenRa_PostgisRename_base.ui')
|
||||||
|
ch = [u"à", u"À", u"â", u"Â", u"ä", u"Ä", u"å", u"Å", u"ç", u"Ç", u"é", u"É", u"è", u"È", u"ê", u"Ê", u"ë", u"Ë", u"î", u"Î", u"ï", u"Ï", u"ô", u"Ô", u"ö", u"Ö", u"ù", u"Ù", u"û", u"Û", u"ü", u"Ü", u"ÿ", u"Ÿ", u"'", u"-", u" "]
|
||||||
|
try:
|
||||||
|
account = login_base("account")
|
||||||
|
user = account[0]
|
||||||
|
mdp = account[1]
|
||||||
|
host = account[2]
|
||||||
|
port = account[3]
|
||||||
|
dbname = account[4]
|
||||||
|
cur = account[7]
|
||||||
|
con = account[8]
|
||||||
|
except:
|
||||||
|
print('')
|
||||||
|
class Postgis_Rename(QDialog, EDITOR_CLASS):
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
_ = parent
|
||||||
|
super().__init__()
|
||||||
|
self.setupUi(self)
|
||||||
|
self.settings = QgsSettings()
|
||||||
|
self.s = QSettings()
|
||||||
|
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
|
||||||
|
self.iface = iface
|
||||||
|
|
||||||
|
self.schema.currentIndexChanged.connect(self.Test)
|
||||||
|
self.buttonBox.accepted.connect(self.msgBox)
|
||||||
|
### Outil Ajout de nouvelles couche a un dossier
|
||||||
|
def raise_(self):
|
||||||
|
self.activateWindow()
|
||||||
|
self.groupBox_3.hide()
|
||||||
|
self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
|
||||||
|
GET_ALL_SCHEMA = """SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema LIKE '_form_%' OR table_schema LIKE '_01_%' OR table_schema LIKE '_07_%' OR table_schema LIKE '_26_%' OR table_schema LIKE '_42_%' OR table_schema LIKE '_69_%' ORDER BY table_schema;"""
|
||||||
|
cur.execute(GET_ALL_SCHEMA)
|
||||||
|
AllSchema = cur.fetchall()
|
||||||
|
last_value_schema = self.schema.currentText()
|
||||||
|
last_value_departement = self.departement.currentText()
|
||||||
|
self.schema.clear()
|
||||||
|
self.departement.clear()
|
||||||
|
self.schema.addItems([''])
|
||||||
|
for Schema in AllSchema:
|
||||||
|
self.schema.addItems(Schema)
|
||||||
|
self.departement.addItems(['','01','07','26','42','69','form'])
|
||||||
|
if last_value_schema != '':
|
||||||
|
self.schema.setCurrentIndex(self.schema.findText(last_value_schema))
|
||||||
|
if last_value_departement != '':
|
||||||
|
self.departement.setCurrentIndex(self.departement.findText(last_value_departement))
|
||||||
|
|
||||||
|
def Test(self):
|
||||||
|
oldSchema = self.schema.currentText()
|
||||||
|
if oldSchema != '':
|
||||||
|
allIsGood = 0
|
||||||
|
|
||||||
|
GET_COUNT_LEFT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE left(table_name,"+str(len(oldSchema))+") AND table_schema LIKE '"+oldSchema+"';"
|
||||||
|
GET_COUNT_TOT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE '"+oldSchema+"';"
|
||||||
|
|
||||||
|
cur.execute(GET_COUNT_TOT)
|
||||||
|
CountTot = cur.fetchall()[0]
|
||||||
|
cur.execute(GET_COUNT_LEFT)
|
||||||
|
CountLeft = cur.fetchall()[0]
|
||||||
|
|
||||||
|
if CountLeft[0] == CountTot[0]:
|
||||||
|
allIsGood = allIsGood+1
|
||||||
|
self.couche.setChecked(1)
|
||||||
|
else:
|
||||||
|
self.couche.setChecked(0)
|
||||||
|
|
||||||
|
GET_GRANTEE_PRIVILEGE = "SELECT DISTINCT count(*) FROM information_schema.role_table_grants WHERE table_schema LIKE '"+oldSchema+"' AND grantee LIKE 'grp_qgis' AND privilege_type LIKE 'UPDATE';"
|
||||||
|
cur.execute(GET_GRANTEE_PRIVILEGE)
|
||||||
|
CountPrivilege = cur.fetchall()[0]
|
||||||
|
|
||||||
|
if CountTot[0] == CountPrivilege[0]:
|
||||||
|
allIsGood = allIsGood+1
|
||||||
|
self.compte.setChecked(1)
|
||||||
|
else:
|
||||||
|
self.compte.setChecked(0)
|
||||||
|
|
||||||
|
if allIsGood == 2:
|
||||||
|
self.groupBox_3.show()
|
||||||
|
self.loadValue()
|
||||||
|
self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(True)
|
||||||
|
else:
|
||||||
|
self.groupBox_3.hide()
|
||||||
|
self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
|
||||||
|
else:
|
||||||
|
self.old_name.setText('')
|
||||||
|
self.compte.setChecked(0)
|
||||||
|
self.couche.setChecked(0)
|
||||||
|
self.groupBox_3.hide()
|
||||||
|
|
||||||
|
def loadValue(self):
|
||||||
|
oldSchema = self.schema.currentText()
|
||||||
|
if oldSchema[:6] == '_form_':
|
||||||
|
oldSchema = self.schema.currentText()[6:]
|
||||||
|
prefixSchema = self.schema.currentText()[1:5]
|
||||||
|
else:
|
||||||
|
oldSchema = self.schema.currentText()[4:]
|
||||||
|
prefixSchema = self.schema.currentText()[1:3]
|
||||||
|
if oldSchema[:3] == 'at_':
|
||||||
|
oldSchema = oldSchema[3:]
|
||||||
|
self.animation.setChecked(1)
|
||||||
|
else:
|
||||||
|
self.animation.setChecked(0)
|
||||||
|
self.old_name.setText(oldSchema)
|
||||||
|
self.departement.setCurrentIndex(self.departement.findText(prefixSchema))
|
||||||
|
|
||||||
|
def updateName(self):
|
||||||
|
if self.departement.currentText() != '':
|
||||||
|
oldTableName = self.old_name.text()
|
||||||
|
newTableName = ((self.new_name.text()).lower()).replace(' ','_')
|
||||||
|
newPrefixSchema = '_'+self.departement.currentText()+'_'
|
||||||
|
if self.schema.currentText()[:6] == '_form_':
|
||||||
|
oldPrefixSchema = self.schema.currentText()[:6]
|
||||||
|
if (self.schema.currentText()[6:9]) == "at_":
|
||||||
|
oldPrefixSchema=oldPrefixSchema+'at_'
|
||||||
|
else:
|
||||||
|
oldPrefixSchema = self.schema.currentText()[:4]
|
||||||
|
if (self.schema.currentText()[4:7]) == 'at_':
|
||||||
|
oldPrefixSchema=oldPrefixSchema+'at_'
|
||||||
|
|
||||||
|
if self.animation.isChecked():
|
||||||
|
newPrefixSchema=newPrefixSchema+'at_'
|
||||||
|
oldSchemaName = oldPrefixSchema+oldTableName
|
||||||
|
newSchemaName = newPrefixSchema+newTableName
|
||||||
|
|
||||||
|
if oldSchemaName != newSchemaName:
|
||||||
|
global AllSQLrun
|
||||||
|
allSQLrun=''
|
||||||
|
|
||||||
|
SQL_UPDATE = """UPDATE public.layer_styles SET f_table_schema = '"""+newSchemaName+"""',f_table_name = replace(replace(f_table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') WHERE f_table_schema LIKE '"""+oldSchemaName+"""';"""
|
||||||
|
allSQLrun = allSQLrun+SQL_UPDATE
|
||||||
|
cur.execute(SQL_UPDATE)
|
||||||
|
|
||||||
|
SQL_GET_TABLE_RENAME = """SELECT table_name,replace(replace(table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') from information_schema.tables WHERE table_schema LIKE '"""+oldSchemaName+"""';"""
|
||||||
|
cur.execute(SQL_GET_TABLE_RENAME)
|
||||||
|
allTableRename = cur.fetchall()
|
||||||
|
allTableList = []
|
||||||
|
for TableRename in allTableRename:
|
||||||
|
oldTable = TableRename[0]
|
||||||
|
newTable = TableRename[1]
|
||||||
|
allTableList.append([oldTable,newSchemaName,newTable])
|
||||||
|
SQL_RENAME_TABLE = """ALTER TABLE """+oldSchemaName+'.'+oldTable+""" RENAME TO """+newTable+""";"""
|
||||||
|
allSQLrun = allSQLrun+SQL_RENAME_TABLE
|
||||||
|
cur.execute(SQL_RENAME_TABLE)
|
||||||
|
|
||||||
|
SQL_RENAME_SCHEMA = 'ALTER SCHEMA '+oldSchemaName+' RENAME TO '+newSchemaName
|
||||||
|
allSQLrun = allSQLrun+SQL_RENAME_SCHEMA
|
||||||
|
cur.execute(SQL_RENAME_SCHEMA)
|
||||||
|
#print(allSQLrun)
|
||||||
|
con.commit()
|
||||||
|
for LayerOpen in allTableList:
|
||||||
|
self.UnloadLoadLayers(LayerOpen[0],LayerOpen[1],LayerOpen[2])
|
||||||
|
|
||||||
|
|
||||||
|
def UnloadLoadLayers(self,OldName,NewSchema,NewTable):
|
||||||
|
allLayers = (QgsProject.instance().mapLayers().values())
|
||||||
|
listLayers = []
|
||||||
|
listLayersName = []
|
||||||
|
for layer in allLayers:
|
||||||
|
listLayers.append(layer)
|
||||||
|
listLayersName.append(layer.name())
|
||||||
|
if OldName in listLayersName:
|
||||||
|
layer = (listLayers[listLayersName.index(OldName)])
|
||||||
|
provider = layer.dataProvider()
|
||||||
|
dbname = (QgsDataSourceUri(provider.dataSourceUri()).database())
|
||||||
|
user = QgsDataSourceUri(provider.dataSourceUri()).username()
|
||||||
|
mdp = QgsDataSourceUri(provider.dataSourceUri()).password()
|
||||||
|
host = QgsDataSourceUri(provider.dataSourceUri()).host()
|
||||||
|
port = QgsDataSourceUri(provider.dataSourceUri()).port()
|
||||||
|
|
||||||
|
### Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(NewSchema, NewTable, 'geom')
|
||||||
|
QgsProject.instance().removeMapLayer(layer.id())
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), NewTable, "postgres")
|
||||||
|
|
||||||
|
def msgBox(self):
|
||||||
|
self.QMBquestion = QMessageBox()
|
||||||
|
self.QMBquestion.setWindowTitle(u"Attention !")
|
||||||
|
self.QMBquestion.setIcon(QMessageBox.Warning)
|
||||||
|
self.QMBquestion.setText("Attention, le renommage de dossier PostGIS peut engendrer des pertes de liaisons avec des projets QGIS !")
|
||||||
|
self.QMBquestion.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
|
||||||
|
if self.new_name.text() != '':
|
||||||
|
error_caracteres = 0
|
||||||
|
for caracteres in ch :
|
||||||
|
if self.new_name.text().find(caracteres) != -1 :
|
||||||
|
error_caracteres = 1
|
||||||
|
if error_caracteres == 0:
|
||||||
|
self.QMBquestion = self.QMBquestion.exec()
|
||||||
|
else:
|
||||||
|
QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.new_name.text().lower() )
|
||||||
|
else:
|
||||||
|
QMessageBox.warning(None, "Oups :", "Votre projet doit avoire un nom !")
|
||||||
|
if self.QMBquestion == QMessageBox.Yes:
|
||||||
|
self.updateName()
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
from qgis.core import QgsApplication
|
|
||||||
|
|
||||||
def gitea():
|
|
||||||
file_url = QgsApplication.qgisSettingsDirPath()+'QGIS/QGIS3.ini'
|
|
||||||
recherche_1 = 'plugin_repositories\\github\\url=https://github.com/CEN-Rhone-Alpes/Plugin_QGIS/releases/latest/download/plugins.xml'
|
|
||||||
replace_1 = 'plugin_repositories\\gitea\\url=https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
|
||||||
|
|
||||||
recherche_2 = 'github'
|
|
||||||
replace_2 = 'gitea'
|
|
||||||
|
|
||||||
# Read in the file
|
|
||||||
with open(file_url, 'r') as file:
|
|
||||||
filedata = file.read()
|
|
||||||
|
|
||||||
# Replace the target string
|
|
||||||
filedata = filedata.replace(recherche_1, replace_1)
|
|
||||||
filedata = filedata.replace(recherche_2, replace_2)
|
|
||||||
|
|
||||||
# Write the file out again
|
|
||||||
with open(file_url, 'w') as file:
|
|
||||||
file.write(filedata)
|
|
||||||
@@ -1,36 +1,3 @@
|
|||||||
import sys
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
|
||||||
if IPAddr[0:11] == "100.100.100": #4269
|
|
||||||
host = "100.100.100.11"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig4269"
|
|
||||||
sigdb="sig4269"
|
|
||||||
refdb="ref_geo4269"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.0": #01
|
|
||||||
host = "192.168.0.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig01"
|
|
||||||
sigdb="sig01"
|
|
||||||
refdb="ref_geo01"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.1": #0726
|
|
||||||
host = "192.168.1.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig0726"
|
|
||||||
sigdb="sig0726"
|
|
||||||
refdb="ref_geo0726"
|
|
||||||
password = "McVities"
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
os_user = os.environ['USER']
|
|
||||||
else:
|
|
||||||
os_user = os.environ['USERNAME']
|
|
||||||
if os_user == 'STAGE':
|
|
||||||
os_user='stage'
|
|
||||||
if os_user == 'Administrateur':
|
|
||||||
os_user='stage'
|
|
||||||
|
|
||||||
geom = "geom"
|
geom = "geom"
|
||||||
champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
||||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -6,8 +6,10 @@ import tempfile
|
|||||||
import base64
|
import base64
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extras
|
import psycopg2.extras
|
||||||
|
import socket
|
||||||
from os.path import abspath, join, pardir, dirname
|
from os.path import abspath, join, pardir, dirname
|
||||||
|
from qgis.core import QgsDataSourceUri
|
||||||
|
from .SQLRequet import *
|
||||||
from qgis.PyQt import uic
|
from qgis.PyQt import uic
|
||||||
|
|
||||||
__copyright__ = "Copyright 2019, 3Liz"
|
__copyright__ = "Copyright 2019, 3Liz"
|
||||||
@@ -17,167 +19,518 @@ __revision__ = "$Format:%H$"
|
|||||||
|
|
||||||
|
|
||||||
def plugin_path(*args):
|
def plugin_path(*args):
|
||||||
"""Get the path to plugin root folder.
|
"""Get the path to plugin root folder.
|
||||||
|
|
||||||
:param args List of path elements e.g. ['img', 'logos', 'image.png']
|
:param args List of path elements e.g. ['img', 'logos', 'image.png']
|
||||||
:type args: str
|
:type args: str
|
||||||
|
|
||||||
:return: Absolute path to the plugin path.
|
:return: Absolute path to the plugin path.
|
||||||
:rtype: str
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
path = dirname(dirname(__file__))
|
path = dirname(dirname(__file__))
|
||||||
path = abspath(abspath(join(path, pardir)))
|
path = abspath(abspath(join(path, pardir)))
|
||||||
for item in args:
|
for item in args:
|
||||||
path = abspath(join(path, item))
|
path = abspath(join(path, item))
|
||||||
|
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
def plugin_name():
|
def plugin_name():
|
||||||
"""Return the plugin name according to metadata.txt.
|
"""Return the plugin name according to metadata.txt.
|
||||||
|
|
||||||
:return: The plugin name.
|
:return: The plugin name.
|
||||||
:rtype: basestring
|
:rtype: basestring
|
||||||
"""
|
"""
|
||||||
metadata = metadata_config()
|
metadata = metadata_config()
|
||||||
name = metadata["general"]["name"]
|
name = metadata["general"]["name"]
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
|
||||||
def metadata_config() -> configparser:
|
def metadata_config() -> configparser:
|
||||||
"""Get the INI config parser for the metadata file.
|
"""Get the INI config parser for the metadata file.
|
||||||
|
|
||||||
:return: The config parser object.
|
:return: The config parser object.
|
||||||
:rtype: ConfigParser
|
:rtype: ConfigParser
|
||||||
"""
|
"""
|
||||||
path = plugin_path("metadata.txt")
|
path = plugin_path("metadata.txt")
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
config.read(path, encoding='utf8')
|
config.read(path, encoding='utf8')
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
def plugin_test_data_path(*args, copy=False):
|
def plugin_test_data_path(*args, copy=False):
|
||||||
"""Get the path to the plugin test data path.
|
"""Get the path to the plugin test data path.
|
||||||
|
|
||||||
:param args List of path elements e.g. ['img', 'logos', 'image.png']
|
:param args List of path elements e.g. ['img', 'logos', 'image.png']
|
||||||
:type args: str
|
:type args: str
|
||||||
|
|
||||||
:param copy: If the file must be copied into a temporary directory first.
|
:param copy: If the file must be copied into a temporary directory first.
|
||||||
:type copy: bool
|
:type copy: bool
|
||||||
|
|
||||||
:return: Absolute path to the resources folder.
|
:return: Absolute path to the resources folder.
|
||||||
:rtype: str
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
path = abspath(abspath(join(plugin_path(), "test", "data")))
|
path = abspath(abspath(join(plugin_path(), "test", "data")))
|
||||||
for item in args:
|
for item in args:
|
||||||
path = abspath(join(path, item))
|
path = abspath(join(path, item))
|
||||||
|
|
||||||
if copy:
|
if copy:
|
||||||
temp = tempfile.mkdtemp()
|
temp = tempfile.mkdtemp()
|
||||||
shutil.copy(path, temp)
|
shutil.copy(path, temp)
|
||||||
return join(temp, args[-1])
|
return join(temp, args[-1])
|
||||||
else:
|
else:
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
def resources_path(*args):
|
def resources_path(*args):
|
||||||
"""Get the path to our resources folder.
|
"""Get the path to our resources folder.
|
||||||
|
|
||||||
:param args List of path elements e.g. ['img', 'logos', 'image.png']
|
:param args List of path elements e.g. ['img', 'logos', 'image.png']
|
||||||
:type args: str
|
:type args: str
|
||||||
|
|
||||||
:return: Absolute path to the resources folder.
|
:return: Absolute path to the resources folder.
|
||||||
:rtype: str
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
path = abspath(abspath(join(plugin_path(), "CenRa_POSTGIS\\tools")))
|
path = abspath(abspath(join(plugin_path(), "CenRa_POSTGIS\\tools")))
|
||||||
for item in args:
|
for item in args:
|
||||||
path = abspath(join(path, item))
|
path = abspath(join(path, item))
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
def load_ui(*args):
|
def load_ui(*args):
|
||||||
"""Get compile UI file.
|
"""Get compile UI file.
|
||||||
|
|
||||||
:param args List of path elements e.g. ['img', 'logos', 'image.png']
|
:param args List of path elements e.g. ['img', 'logos', 'image.png']
|
||||||
:type args: str
|
:type args: str
|
||||||
|
|
||||||
:return: Compiled UI file.
|
:return: Compiled UI file.
|
||||||
"""
|
"""
|
||||||
ui_class, _ = uic.loadUiType(resources_path("ui", *args))
|
ui_class, _ = uic.loadUiType(resources_path("ui", *args))
|
||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def login_base(take=None):
|
def pyperclip():
|
||||||
from CenRa_Metabase.resources.PythonSQL import host,port,dbname,password,os_user
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
dst = abspath(abspath(join(plugin_path(), "CenRa_POSTGIS\\tools\\")))
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
if IPAddr[0:11] == "100.100.100": #4269
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
res_ident = first_cur.fetchone()
|
if IPAddr[0:9] == "192.168.0": #01
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
user = res_ident[1]
|
if IPAddr[0:9] == "192.168.1": #0726
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
|
||||||
|
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
if take:
|
|
||||||
return cur,con
|
|
||||||
else:
|
|
||||||
return cur
|
|
||||||
def send_issues(url,titre,body,labels):
|
|
||||||
import requests
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import qgis
|
|
||||||
|
|
||||||
usr = os.environ['USERNAME']
|
|
||||||
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
|
||||||
url=url+'?token='+token
|
|
||||||
|
|
||||||
headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'}
|
|
||||||
|
|
||||||
|
|
||||||
payload = {'title': titre, 'body': body, 'labels': labels}
|
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
shutil.copy(src, dst)
|
||||||
binar = True
|
|
||||||
except:
|
except:
|
||||||
binar = False
|
print('404')
|
||||||
r = ''
|
|
||||||
if binar:
|
def send_issues(url,titre,body,labels):
|
||||||
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
import requests
|
||||||
return r
|
import json
|
||||||
|
import os
|
||||||
|
import qgis
|
||||||
|
|
||||||
|
usr = os.environ['USERNAME']
|
||||||
|
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
|
||||||
|
url=url+'?token='+token
|
||||||
|
|
||||||
|
headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'}
|
||||||
|
|
||||||
|
|
||||||
|
payload = {'title': titre, 'body': body, 'labels': labels}
|
||||||
|
try:
|
||||||
|
urllib.request.urlopen('https://google.com')
|
||||||
|
binar = True
|
||||||
|
except:
|
||||||
|
binar = False
|
||||||
|
r = ''
|
||||||
|
if binar:
|
||||||
|
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
||||||
|
return r
|
||||||
|
|
||||||
def maj_verif(NAME):
|
def maj_verif(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
import urllib.request
|
import urllib.request
|
||||||
iface = qgis.utils.iface
|
iface = qgis.utils.iface
|
||||||
from qgis.core import Qgis
|
from qgis.core import Qgis
|
||||||
|
|
||||||
url = qgis.utils.pluginMetadata(NAME,'repository')
|
url = qgis.utils.pluginMetadata(NAME,'repository')
|
||||||
#URL = url+'/raw/branch/main/plugins.xml'
|
#URL = url+'/raw/branch/main/plugins.xml'
|
||||||
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/releases/plugins.xml'
|
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/releases/plugins.xml'
|
||||||
# print(URL)
|
# print(URL)
|
||||||
version = qgis.utils.pluginMetadata(NAME,'version')
|
version = qgis.utils.pluginMetadata(NAME,'version')
|
||||||
len_version = len(version)
|
len_version = len(version)
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen('https://google.com')
|
urllib.request.urlopen('https://google.com')
|
||||||
binar = True
|
binar = True
|
||||||
except:
|
except:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
try:
|
||||||
plugin_num = version_web.find(NAME)
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
plugin_num = version_web.find(NAME)
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
||||||
if version_plugin != version:
|
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
if version_plugin != version:
|
||||||
else:
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
except:
|
||||||
|
print("error gitea version ssl")
|
||||||
|
else:
|
||||||
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
|
|
||||||
def devlog(NAME):
|
def devlog(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
||||||
devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog')
|
devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog')
|
||||||
return devmaj
|
return devmaj
|
||||||
|
|
||||||
|
def create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp):
|
||||||
|
### Creation de la table contour
|
||||||
|
if self.couche_contour.isChecked(): # Verifie si la checkbox est cochee
|
||||||
|
if self.annee_1.text() == 'aaaa' or self.annee_1.text() == '':
|
||||||
|
tablename = schema + "_contour"
|
||||||
|
else :
|
||||||
|
tablename = schema + "_contour_" + self.annee_1.text()
|
||||||
|
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||||
|
|
||||||
|
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')"
|
||||||
|
SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour
|
||||||
|
|
||||||
|
cur.execute(SQL_contour)
|
||||||
|
cur.execute(RETURNE)
|
||||||
|
sequence_name = cur.fetchone()[0]
|
||||||
|
|
||||||
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
|
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
||||||
|
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
||||||
|
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
||||||
|
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
||||||
|
|
||||||
|
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
||||||
|
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
||||||
|
FROM layer_styles
|
||||||
|
WHERE description = 'contour_modele_v3'"""
|
||||||
|
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
||||||
|
|
||||||
|
cur.execute(SQL_pkey)
|
||||||
|
cur.execute(SQL_trigger_area_m2)
|
||||||
|
cur.execute(SQL_trigger_area_ha)
|
||||||
|
cur.execute(SQL_trigger_date_creation)
|
||||||
|
cur.execute(SQL_trigger_date_maj)
|
||||||
|
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
||||||
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
|
con.commit()
|
||||||
|
|
||||||
|
## Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(schema, tablename, geom)
|
||||||
|
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
def create_travaux(self,schema,cur,con,host,port,dbname,user,mdp):
|
||||||
|
### Creation de la table travaux prevus
|
||||||
|
if self.couche_travaux_prevus.isChecked():
|
||||||
|
#**********Poly
|
||||||
|
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
||||||
|
tablename = schema + "_travaux_prevus_poly"
|
||||||
|
else :
|
||||||
|
tablename = schema + "_travaux_prevus_poly_" + self.annee_5.text()
|
||||||
|
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||||
|
|
||||||
|
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')"
|
||||||
|
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multipolygon
|
||||||
|
|
||||||
|
cur.execute(SQL_travaux_prevus)
|
||||||
|
cur.execute(RETURNE)
|
||||||
|
sequence_name = cur.fetchone()[0]
|
||||||
|
|
||||||
|
|
||||||
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
|
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
||||||
|
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
||||||
|
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
||||||
|
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
||||||
|
|
||||||
|
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
||||||
|
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
||||||
|
FROM layer_styles
|
||||||
|
WHERE description = 'travaux_prevus_poly_modele_v3'"""
|
||||||
|
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
||||||
|
|
||||||
|
cur.execute(SQL_pkey)
|
||||||
|
cur.execute(SQL_trigger_date_creation)
|
||||||
|
cur.execute(SQL_trigger_date_maj)
|
||||||
|
cur.execute(SQL_trigger_area_m2)
|
||||||
|
cur.execute(SQL_trigger_area_ha)
|
||||||
|
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
||||||
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
|
con.commit()
|
||||||
|
|
||||||
|
## Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(schema, tablename, geom)
|
||||||
|
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
|
||||||
|
#**********ligne
|
||||||
|
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
||||||
|
tablename = schema + "_travaux_prevus_ligne"
|
||||||
|
else :
|
||||||
|
tablename = schema + "_travaux_prevus_ligne_" + self.annee_5.text()
|
||||||
|
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||||
|
|
||||||
|
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')"
|
||||||
|
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multilinestring
|
||||||
|
|
||||||
|
cur.execute(SQL_travaux_prevus)
|
||||||
|
cur.execute(RETURNE)
|
||||||
|
sequence_name = cur.fetchone()[0]
|
||||||
|
|
||||||
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
|
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
||||||
|
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
||||||
|
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
||||||
|
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
||||||
|
|
||||||
|
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
||||||
|
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
||||||
|
FROM layer_styles
|
||||||
|
WHERE description = 'travaux_prevus_ligne_modele_v3'"""
|
||||||
|
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
||||||
|
|
||||||
|
cur.execute(SQL_pkey)
|
||||||
|
cur.execute(SQL_trigger_date_creation)
|
||||||
|
cur.execute(SQL_trigger_date_maj)
|
||||||
|
cur.execute(SQL_trigger_length_m)
|
||||||
|
cur.execute(SQL_trigger_length_km)
|
||||||
|
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
||||||
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
|
con.commit()
|
||||||
|
|
||||||
|
## Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(schema, tablename, geom)
|
||||||
|
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
|
||||||
|
#**********point
|
||||||
|
if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '':
|
||||||
|
tablename = schema + "_travaux_prevus_point"
|
||||||
|
else :
|
||||||
|
tablename = schema + "_travaux_prevus_point_" + self.annee_5.text()
|
||||||
|
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||||
|
|
||||||
|
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')"
|
||||||
|
SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_point
|
||||||
|
|
||||||
|
cur.execute(SQL_travaux_prevus)
|
||||||
|
cur.execute(RETURNE)
|
||||||
|
sequence_name = cur.fetchone()[0]
|
||||||
|
|
||||||
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
|
SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();"
|
||||||
|
SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();"
|
||||||
|
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
||||||
|
|
||||||
|
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
||||||
|
SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
||||||
|
FROM layer_styles
|
||||||
|
WHERE description = 'travaux_prevus_point_modele_v3'"""
|
||||||
|
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
||||||
|
|
||||||
|
cur.execute(SQL_pkey)
|
||||||
|
cur.execute(SQL_trigger_date_creation)
|
||||||
|
cur.execute(SQL_trigger_date_maj)
|
||||||
|
cur.execute(SQL_trigger_coordonnees)
|
||||||
|
cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles
|
||||||
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
|
con.commit()
|
||||||
|
|
||||||
|
## Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(schema, tablename, geom)
|
||||||
|
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
|
||||||
|
def create_habita(self,schema,cur,con,host ,port ,dbname ,user ,mdp):
|
||||||
|
### Creation de la table habitat
|
||||||
|
if self.couche_habitat.isChecked():
|
||||||
|
if self.annee_2.text() == 'aaaa' or self.annee_2.text() == '':
|
||||||
|
tablename = schema + "_habitat"
|
||||||
|
else :
|
||||||
|
tablename = schema + "_habitat_" + self.annee_2.text()
|
||||||
|
|
||||||
|
tablename_1=tablename+"_points"
|
||||||
|
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+tablename_1+"','gid')"
|
||||||
|
tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||||
|
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_1 + champ_vegethab_point
|
||||||
|
|
||||||
|
print(RETURNE)
|
||||||
|
print('')
|
||||||
|
print(SQL_VEGETHAB)
|
||||||
|
cur.execute(SQL_VEGETHAB)
|
||||||
|
cur.execute(RETURNE)
|
||||||
|
sequence_name = cur.fetchone()[0]
|
||||||
|
|
||||||
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
|
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
||||||
|
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
||||||
|
SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
||||||
|
FROM layer_styles
|
||||||
|
WHERE description = 'vegethab_points_modele_v3'"""
|
||||||
|
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
||||||
|
|
||||||
|
cur.execute(SQL_pkey)
|
||||||
|
cur.execute(SQL_trigger_coordonnees)
|
||||||
|
cur.execute(SQL_style)
|
||||||
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
|
con.commit()
|
||||||
|
### Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(schema, tablename_1, geom)
|
||||||
|
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
|
||||||
|
tablename_2=tablename+"_lignes"
|
||||||
|
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename_2+"','gid')"
|
||||||
|
tablename_qgis = tablename_2[1:]
|
||||||
|
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_2 + champ_vegethab_multilinestring
|
||||||
|
|
||||||
|
cur.execute(SQL_VEGETHAB)
|
||||||
|
cur.execute(RETURNE)
|
||||||
|
sequence_name = cur.fetchone()[0]
|
||||||
|
|
||||||
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2[len(schema):] + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
|
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
||||||
|
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
||||||
|
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
||||||
|
SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
||||||
|
FROM layer_styles
|
||||||
|
WHERE description = 'vegethab_lignes_modele_v3'"""
|
||||||
|
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
||||||
|
|
||||||
|
cur.execute(SQL_pkey)
|
||||||
|
cur.execute(SQL_trigger_length_m)
|
||||||
|
cur.execute(SQL_trigger_length_km)
|
||||||
|
cur.execute(SQL_style)
|
||||||
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
|
con.commit()
|
||||||
|
### Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(schema, tablename_2, geom)
|
||||||
|
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
|
||||||
|
tablename_3=tablename+"_polygones"
|
||||||
|
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename_3+"','gid')"
|
||||||
|
tablename_qgis = tablename_3[1:]
|
||||||
|
SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_3 + champ_vegethab_multipolygon
|
||||||
|
|
||||||
|
cur.execute(SQL_VEGETHAB)
|
||||||
|
cur.execute(RETURNE)
|
||||||
|
sequence_name = cur.fetchone()[0]
|
||||||
|
|
||||||
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3[len(schema):] + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
|
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
||||||
|
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
||||||
|
SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time)
|
||||||
|
SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now()
|
||||||
|
FROM layer_styles
|
||||||
|
WHERE description = 'vegethab_polygones_modele_v3'"""
|
||||||
|
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
||||||
|
|
||||||
|
cur.execute(SQL_pkey)
|
||||||
|
cur.execute(SQL_trigger_area_m2)
|
||||||
|
cur.execute(SQL_trigger_area_ha)
|
||||||
|
cur.execute(SQL_style)
|
||||||
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
|
con.commit()
|
||||||
|
### Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(schema, tablename_3, geom)
|
||||||
|
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
def create_vierge(self,schema,cur,con,host ,port ,dbname ,user ,mdp):
|
||||||
|
### Creation de la table vierge
|
||||||
|
if self.couche_vierge.isChecked():
|
||||||
|
if self.annee_4.text() == 'aaaa' or self.annee_4.text() == '':
|
||||||
|
tablename = schema + "_" + self.nom_couche_vierge.text().lower()
|
||||||
|
else :
|
||||||
|
tablename = schema + "_" + self.nom_couche_vierge.text().lower() + "_" + self.annee_4.text()
|
||||||
|
tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis
|
||||||
|
|
||||||
|
if self.couche_vierge_point.isChecked() == 1 :
|
||||||
|
champ_vierge = champ_viergePoint
|
||||||
|
|
||||||
|
if self.couche_vierge_ligne.isChecked() == 1 :
|
||||||
|
champ_vierge = champ_viergeLigne
|
||||||
|
|
||||||
|
if self.couche_vierge_polygone.isChecked() == 1 :
|
||||||
|
champ_vierge = champ_viergePolygone
|
||||||
|
|
||||||
|
RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')"
|
||||||
|
SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge
|
||||||
|
|
||||||
|
cur.execute(SQL_vierge)
|
||||||
|
cur.execute(RETURNE)
|
||||||
|
sequence_name = cur.fetchone()[0]
|
||||||
|
|
||||||
|
SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)"
|
||||||
|
|
||||||
|
SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();"
|
||||||
|
SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();"
|
||||||
|
SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();"
|
||||||
|
SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();"
|
||||||
|
SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();"
|
||||||
|
SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;"
|
||||||
|
|
||||||
|
cur.execute(SQL_pkey)
|
||||||
|
cur.execute(SQL_GRANT_TABLE)
|
||||||
|
|
||||||
|
if self.couche_vierge_point.isChecked() == 1 :
|
||||||
|
cur.execute(SQL_trigger_coordonnees)
|
||||||
|
|
||||||
|
if self.couche_vierge_ligne.isChecked() == 1 :
|
||||||
|
cur.execute(SQL_trigger_length_m)
|
||||||
|
cur.execute(SQL_trigger_length_km)
|
||||||
|
|
||||||
|
if self.couche_vierge_polygone.isChecked() == 1 :
|
||||||
|
cur.execute(SQL_trigger_area_m2)
|
||||||
|
cur.execute(SQL_trigger_area_ha)
|
||||||
|
|
||||||
|
con.commit()
|
||||||
|
|
||||||
|
### Affichage de la table
|
||||||
|
uri = QgsDataSourceUri()
|
||||||
|
# set host name, port, database name, username and password
|
||||||
|
uri.setConnection(host ,port ,dbname ,user ,mdp)
|
||||||
|
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
|
||||||
|
uri.setDataSource(schema, tablename, geom)
|
||||||
|
|
||||||
|
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
|
||||||
|
|||||||
@@ -0,0 +1,288 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>table_postgis</class>
|
||||||
|
<widget class="QDialog" name="table_postgis">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>533</width>
|
||||||
|
<height>364</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Ajout d'une table</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="schema_label">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>90</width>
|
||||||
|
<height>1977</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Code analytique :</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="schema"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2">
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Tester mon éligibilite :</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QCheckBox" name="compte">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Compte</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QCheckBox" name="couche">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Couche</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="2">
|
||||||
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Les changement :</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Nouvau nom :</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Partie a renommée :</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="old_name">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<italic>true</italic>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="new_name"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>130</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Département/Animation :</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QRadioButton" name="animation">
|
||||||
|
<property name="text">
|
||||||
|
<string>Animation territoriale</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="departement"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="Titre">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>14</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Renommée de table</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>table_postgis</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>table_postgis</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Metabase</string>
|
<string>Journal des modifications</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset>
|
<iconset>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Metabase</string>
|
<string>Journal des modifications</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset>
|
<iconset>
|
||||||
@@ -12,12 +12,12 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
|
|||||||
os.path.join(
|
os.path.join(
|
||||||
str(Path(__file__).resolve().parent.parent),
|
str(Path(__file__).resolve().parent.parent),
|
||||||
'forms',
|
'forms',
|
||||||
'sicen_about_form.ui'
|
'CenRa_about_form.ui'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class SicenAboutDialog(QDialog, ABOUT_FORM_CLASS):
|
class AboutDialog(QDialog, ABOUT_FORM_CLASS):
|
||||||
|
|
||||||
""" About - Let the user display the about dialog. """
|
""" About - Let the user display the about dialog. """
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
name=CenRa SICEN
|
name=CenRa SICEN
|
||||||
qgisMinimumVersion=3.0
|
qgisMinimumVersion=3.0
|
||||||
description=Filtre des données saisies dans SICEN et export d'une liste d'espèces.
|
description=Filtre des données saisies dans SICEN et export d'une liste d'espèces.
|
||||||
version=1.7
|
version=1.9
|
||||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||||
email=si_besoin@cen-rhonealpes.fr
|
email=si_besoin@cen-rhonealpes.fr
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ email=si_besoin@cen-rhonealpes.fr
|
|||||||
# Optional items:
|
# Optional items:
|
||||||
|
|
||||||
# Uncomment the following line and add your changelog entries:
|
# Uncomment the following line and add your changelog entries:
|
||||||
changelog=<h2>CenRa_SICEN:</h2></br><p><h3>13/09/2024 - Version 1.7:</h3> - Il est maintenant possible de sélectionné plusieurs entité pour le filtre par Emprise.</br>- Ajoute d'un changelog.</br>- Ajoute une vérification de mise à jour.</p>
|
changelog=<h2>CenRa_SICEN:</h2></br><p><h3>03/04/2025 - Version 1.9: </h3> - Mise a jour de securite.</p></br><p><h3>07/01/2025 - Version 1.8: </h3> - ByPass du certif ssl ci erreur.</br></p><p><h3>13/09/2024 - Version 1.7:</h3> - Il est maintenant possible de sélectionné plusieurs entité pour le filtre par Emprise.</br>- Ajoute d'un changelog.</br>- Ajoute une vérification de mise à jour.</p>
|
||||||
|
|
||||||
# tags are comma separated with spaces allowed
|
# tags are comma separated with spaces allowed
|
||||||
tags=cenra, postgis, sicen
|
tags=cenra, postgis, sicen
|
||||||
|
|||||||
@@ -45,19 +45,22 @@ from qgis.PyQt.QtWidgets import QMenu, QAction, QDialog, QDialogButtonBox, QLabe
|
|||||||
from . import resources_rc
|
from . import resources_rc
|
||||||
# Import the code for the dialog
|
# Import the code for the dialog
|
||||||
from .sicendialog import SICENDialog
|
from .sicendialog import SICENDialog
|
||||||
from .tools.PythonSQL import *
|
|
||||||
from .tools.resources import maj_verif
|
from .tools.resources import maj_verif,pyperclip
|
||||||
|
pyperclip()
|
||||||
|
from .tools.PythonSQL import login_base
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
import qgis
|
import qgis
|
||||||
import datetime
|
import datetime
|
||||||
import csv
|
import csv
|
||||||
|
|
||||||
from .forms.about_form import SicenAboutDialog
|
from .forms.about_form import AboutDialog
|
||||||
|
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extras
|
import psycopg2.extras
|
||||||
import base64
|
import base64
|
||||||
#import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
#import sys
|
#import sys
|
||||||
|
|
||||||
@@ -100,6 +103,14 @@ class SICEN(object):
|
|||||||
self.action = QAction(
|
self.action = QAction(
|
||||||
QIcon(":/plugins/sicen/sicen.png"),
|
QIcon(":/plugins/sicen/sicen.png"),
|
||||||
u"Ouverture des données SICEN", self.iface.mainWindow())
|
u"Ouverture des données SICEN", self.iface.mainWindow())
|
||||||
|
self.action.setEnabled(False)
|
||||||
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
|
if IPAddr[0:11] == "100.100.100":
|
||||||
|
self.action.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.0":
|
||||||
|
self.action.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.1":
|
||||||
|
self.action.setEnabled(True)
|
||||||
# connect the action to the run method
|
# connect the action to the run method
|
||||||
self.action.triggered.connect(self.ouverture)
|
self.action.triggered.connect(self.ouverture)
|
||||||
|
|
||||||
@@ -111,6 +122,14 @@ class SICEN(object):
|
|||||||
self.action = QAction(
|
self.action = QAction(
|
||||||
QIcon(":/plugins/sicen/sicen_export.png"),
|
QIcon(":/plugins/sicen/sicen_export.png"),
|
||||||
u"Export liste d'espèces", self.iface.mainWindow())
|
u"Export liste d'espèces", self.iface.mainWindow())
|
||||||
|
self.action.setEnabled(False)
|
||||||
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
|
if IPAddr[0:11] == "100.100.100":
|
||||||
|
self.action.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.0":
|
||||||
|
self.action.setEnabled(True)
|
||||||
|
elif IPAddr[0:9] == "192.168.1":
|
||||||
|
self.action.setEnabled(True)
|
||||||
# connect the action to the run method
|
# connect the action to the run method
|
||||||
self.action.triggered.connect(self.export)
|
self.action.triggered.connect(self.export)
|
||||||
|
|
||||||
@@ -135,7 +154,7 @@ class SICEN(object):
|
|||||||
self.sicen_export.triggered.connect(self.export)
|
self.sicen_export.triggered.connect(self.export)
|
||||||
|
|
||||||
def open_about_dialog(self):
|
def open_about_dialog(self):
|
||||||
dialog = SicenAboutDialog(self.iface)
|
dialog = AboutDialog(self.iface)
|
||||||
dialog.exec_()
|
dialog.exec_()
|
||||||
|
|
||||||
def unload(self):
|
def unload(self):
|
||||||
@@ -146,16 +165,14 @@ class SICEN(object):
|
|||||||
# run method that performs all the real work
|
# run method that performs all the real work
|
||||||
def ouverture(self):
|
def ouverture(self):
|
||||||
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
account = login_base("account")
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
user = account[0]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
mdp = account[1]
|
||||||
res_ident = first_cur.fetchone()
|
host = account[2]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
port = account[3]
|
||||||
user = res_ident[1]
|
dbname = account[4]
|
||||||
|
cur = account[7]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
con = account[8]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
## Creation des listes deroulantes
|
## Creation des listes deroulantes
|
||||||
# Listing de valeur des champs
|
# Listing de valeur des champs
|
||||||
@@ -255,16 +272,14 @@ class SICEN(object):
|
|||||||
# See if OK was pressed
|
# See if OK was pressed
|
||||||
if result == 1:
|
if result == 1:
|
||||||
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
account = login_base("account")
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
user = account[0]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
mdp = account[1]
|
||||||
res_ident = first_cur.fetchone()
|
host = account[2]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
port = account[3]
|
||||||
user = res_ident[1]
|
dbname = account[4]
|
||||||
|
cur = account[7]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
con = account[8]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
# Requete filtre observateur
|
# Requete filtre observateur
|
||||||
if self.dlg.observateur_1.currentIndex() != -1 :
|
if self.dlg.observateur_1.currentIndex() != -1 :
|
||||||
@@ -620,15 +635,14 @@ class SICEN(object):
|
|||||||
|
|
||||||
else :
|
else :
|
||||||
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
account = login_base("account")
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
user = account[0]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
mdp = account[1]
|
||||||
res_ident = first_cur.fetchone()
|
host = account[2]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
port = account[3]
|
||||||
user = res_ident[1]
|
dbname = account[4]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
cur = account[7]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
con = account[8]
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
# Creation group de couches
|
# Creation group de couches
|
||||||
#i = qgis.utils.iface
|
#i = qgis.utils.iface
|
||||||
@@ -753,15 +767,14 @@ class SICEN(object):
|
|||||||
|
|
||||||
else :
|
else :
|
||||||
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
account = login_base("account")
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
user = account[0]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
mdp = account[1]
|
||||||
res_ident = first_cur.fetchone()
|
host = account[2]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
port = account[3]
|
||||||
user = res_ident[1]
|
dbname = account[4]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
cur = account[7]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
con = account[8]
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
# Creation group de couches
|
# Creation group de couches
|
||||||
i = qgis.utils.iface
|
i = qgis.utils.iface
|
||||||
@@ -862,16 +875,14 @@ class SICEN(object):
|
|||||||
|
|
||||||
buffer = '100'
|
buffer = '100'
|
||||||
|
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
account = login_base("account")
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
user = account[0]
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
mdp = account[1]
|
||||||
res_ident = first_cur.fetchone()
|
host = account[2]
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
port = account[3]
|
||||||
user = res_ident[1]
|
dbname = account[4]
|
||||||
|
cur = account[7]
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
con = account[8]
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
SQL_list_sp = u"""SELECT DISTINCT classe::text,ordre::text,nom_complet::text,split_part(nom_vern::text,',',1) as nom_vern,cd_ref::text as cd_ref,max(COALESCE(date_obs, date_debut_obs))::text AS derniere_obs FROM _agregation_ra.observations_table WHERE ST_intersects(geometrie,ST_Buffer(ST_geomFromText('""" + poly + "',2154), " + buffer + " ))GROUP BY classe::text, ordre::text, nom_complet::text, nom_vern::text, cd_ref::text ORDER BY nom_complet::text"""
|
SQL_list_sp = u"""SELECT DISTINCT classe::text,ordre::text,nom_complet::text,split_part(nom_vern::text,',',1) as nom_vern,cd_ref::text as cd_ref,max(COALESCE(date_obs, date_debut_obs))::text AS derniere_obs FROM _agregation_ra.observations_table WHERE ST_intersects(geometrie,ST_Buffer(ST_geomFromText('""" + poly + "',2154), " + buffer + " ))GROUP BY classe::text, ordre::text, nom_complet::text, nom_vern::text, cd_ref::text ORDER BY nom_complet::text"""
|
||||||
cur.execute(SQL_list_sp)
|
cur.execute(SQL_list_sp)
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
from qgis.core import QgsApplication
|
|
||||||
|
|
||||||
def gitea():
|
|
||||||
file_url = QgsApplication.qgisSettingsDirPath()+'QGIS/QGIS3.ini'
|
|
||||||
recherche_1 = 'plugin_repositories\\github\\url=https://github.com/CEN-Rhone-Alpes/Plugin_QGIS/releases/latest/download/plugins.xml'
|
|
||||||
replace_1 = 'plugin_repositories\\gitea\\url=https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
|
||||||
|
|
||||||
recherche_2 = 'github'
|
|
||||||
replace_2 = 'gitea'
|
|
||||||
|
|
||||||
# Read in the file
|
|
||||||
with open(file_url, 'r') as file:
|
|
||||||
filedata = file.read()
|
|
||||||
|
|
||||||
# Replace the target string
|
|
||||||
filedata = filedata.replace(recherche_1, replace_1)
|
|
||||||
filedata = filedata.replace(recherche_2, replace_2)
|
|
||||||
|
|
||||||
# Write the file out again
|
|
||||||
with open(file_url, 'w') as file:
|
|
||||||
file.write(filedata)
|
|
||||||
@@ -1,172 +0,0 @@
|
|||||||
import sys
|
|
||||||
import socket
|
|
||||||
import os
|
|
||||||
IPAddr=socket.gethostbyname(socket.gethostname())
|
|
||||||
if IPAddr[0:11] == "100.100.100": #4269
|
|
||||||
host = "100.100.100.11"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig4269"
|
|
||||||
sigdb="sig4269"
|
|
||||||
refdb="ref_geo4269"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.0": #01
|
|
||||||
host = "192.168.0.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig01"
|
|
||||||
sigdb="sig01"
|
|
||||||
refdb="ref_geo01"
|
|
||||||
password = "McVities"
|
|
||||||
if IPAddr[0:9] == "192.168.1": #0726
|
|
||||||
host = "192.168.1.201"
|
|
||||||
port = "5432"
|
|
||||||
dbname = "sig0726"
|
|
||||||
sigdb="sig0726"
|
|
||||||
refdb="ref_geo0726"
|
|
||||||
password = "McVities"
|
|
||||||
if sys.platform == 'linux':
|
|
||||||
os_user = os.environ['USER']
|
|
||||||
else:
|
|
||||||
os_user = os.environ['USERNAME']
|
|
||||||
if os_user == 'STAGE':
|
|
||||||
os_user='stage'
|
|
||||||
|
|
||||||
geom = "geom"
|
|
||||||
champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
|
||||||
champ_travaux_prevus_multilinestring="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))"""
|
|
||||||
champ_travaux_prevus_point = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, x_wgs84 double precision, y_wgs84 double precision, date_creation date, date_maj date, geom geometry(Point,2154))"""
|
|
||||||
|
|
||||||
champ_viergePolygone = """(gid serial NOT NULL, commentaire text, surface_m2 double precision, surface_ha double precision, geom geometry(MultiPolygon,2154))"""
|
|
||||||
champ_viergeLigne = """(gid serial NOT NULL, commentaire text, longueur_m double precision, longueur_km double precision, geom geometry(MultiLineString,2154))"""
|
|
||||||
champ_viergePoint = """(gid serial NOT NULL, commentaire text, x_wgs84 double precision, y_wgs84 double precision, geom geometry(Point,2154))"""
|
|
||||||
|
|
||||||
champ_habitat = """(gid serial NOT NULL, cd_cb_01 text, lb_cb97_fr_01 text, occupation_01 integer, cd_cb_02 text, lb_cb97_fr_02 text, occupation_02 integer, cd_cb_03 text, lb_cb97_fr_03 text, occupation_03 integer, milieu_code text, milieu_libelle text, surface_m2 double precision, surface_ha double precision, commentaire text, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))"""
|
|
||||||
|
|
||||||
champ_contour="""(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154))
|
|
||||||
"""
|
|
||||||
|
|
||||||
champ_vegethab_point = """(
|
|
||||||
gid serial NOT NULL ,
|
|
||||||
cd_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_1 bigint,
|
|
||||||
cd_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_2 bigint,
|
|
||||||
cd_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_3 bigint,
|
|
||||||
milieu_cod character varying(254) COLLATE pg_catalog."default",
|
|
||||||
milieu_lib character varying(254) COLLATE pg_catalog."default",
|
|
||||||
surface_m2 numeric,
|
|
||||||
surface_ha numeric,
|
|
||||||
commentair character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_creat date,
|
|
||||||
date_maj date,
|
|
||||||
num_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
type_unite character varying(254) COLLATE pg_catalog."default",
|
|
||||||
dynamique character varying(254) COLLATE pg_catalog."default",
|
|
||||||
gestio_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
degrad_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
eta_conser character varying(254) COLLATE pg_catalog."default",
|
|
||||||
clas_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
syntaxon character varying(254) COLLATE pg_catalog."default",
|
|
||||||
n2000 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_aura character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbna character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbnmc character varying(254) COLLATE pg_catalog."default",
|
|
||||||
vege_enjeu character varying(254) COLLATE pg_catalog."default",
|
|
||||||
num_photo character varying(254) COLLATE pg_catalog."default",
|
|
||||||
nature_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_sais date,
|
|
||||||
s_al_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
salli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
class_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
geom geometry(Point,2154)
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
champ_vegethab_multilinestring = """(
|
|
||||||
gid serial NOT NULL ,
|
|
||||||
cd_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_1 bigint,
|
|
||||||
cd_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_2 bigint,
|
|
||||||
cd_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_3 bigint,
|
|
||||||
milieu_cod character varying(254) COLLATE pg_catalog."default",
|
|
||||||
milieu_lib character varying(254) COLLATE pg_catalog."default",
|
|
||||||
surface_m2 numeric,
|
|
||||||
surface_ha numeric,
|
|
||||||
commentair character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_creat date,
|
|
||||||
date_maj date,
|
|
||||||
num_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
type_unite character varying(254) COLLATE pg_catalog."default",
|
|
||||||
dynamique character varying(254) COLLATE pg_catalog."default",
|
|
||||||
gestio_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
degrad_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
eta_conser character varying(254) COLLATE pg_catalog."default",
|
|
||||||
clas_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
syntaxon character varying(254) COLLATE pg_catalog."default",
|
|
||||||
n2000 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_aura character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbna character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbnmc character varying(254) COLLATE pg_catalog."default",
|
|
||||||
vege_enjeu character varying(254) COLLATE pg_catalog."default",
|
|
||||||
num_photo character varying(254) COLLATE pg_catalog."default",
|
|
||||||
nature_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_sais date,
|
|
||||||
s_al_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
salli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
class_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
geom geometry(MultiLineString,2154)
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
champ_vegethab_multipolygon = """(
|
|
||||||
gid serial NOT NULL ,
|
|
||||||
cd_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_01 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_1 bigint,
|
|
||||||
cd_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_02 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_2 bigint,
|
|
||||||
cd_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lb_eu_03 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
occupati_3 bigint,
|
|
||||||
milieu_cod character varying(254) COLLATE pg_catalog."default",
|
|
||||||
milieu_lib character varying(254) COLLATE pg_catalog."default",
|
|
||||||
surface_m2 numeric,
|
|
||||||
surface_ha numeric,
|
|
||||||
commentair character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_creat date,
|
|
||||||
date_maj date,
|
|
||||||
num_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
type_unite character varying(254) COLLATE pg_catalog."default",
|
|
||||||
dynamique character varying(254) COLLATE pg_catalog."default",
|
|
||||||
gestio_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
degrad_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
eta_conser character varying(254) COLLATE pg_catalog."default",
|
|
||||||
clas_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
syntaxon character varying(254) COLLATE pg_catalog."default",
|
|
||||||
n2000 character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_aura character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbna character varying(254) COLLATE pg_catalog."default",
|
|
||||||
lrr_cbnmc character varying(254) COLLATE pg_catalog."default",
|
|
||||||
vege_enjeu character varying(254) COLLATE pg_catalog."default",
|
|
||||||
num_photo character varying(254) COLLATE pg_catalog."default",
|
|
||||||
nature_obs character varying(254) COLLATE pg_catalog."default",
|
|
||||||
date_sais date,
|
|
||||||
s_al_phyto character varying(254) COLLATE pg_catalog."default",
|
|
||||||
alli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
salli_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
class_name character varying(254) COLLATE pg_catalog."default",
|
|
||||||
geom geometry(MultiPolygon,2154)
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
import configparser
|
import configparser
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import socket
|
||||||
import base64
|
import base64
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extras
|
import psycopg2.extras
|
||||||
@@ -89,7 +90,7 @@ def resources_path(*args):
|
|||||||
:return: Absolute path to the resources folder.
|
:return: Absolute path to the resources folder.
|
||||||
:rtype: str
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
path = abspath(abspath(join(plugin_path(), "CenRa_Metabase\\tools")))
|
path = abspath(abspath(join(plugin_path(), "CenRa_SICEN\\tools")))
|
||||||
for item in args:
|
for item in args:
|
||||||
path = abspath(join(path, item))
|
path = abspath(join(path, item))
|
||||||
return path
|
return path
|
||||||
@@ -107,24 +108,20 @@ def load_ui(*args):
|
|||||||
|
|
||||||
return ui_class
|
return ui_class
|
||||||
|
|
||||||
def login_base(take=None):
|
def pyperclip():
|
||||||
from .tools.PythonSQL import host,port,dbname,password,os_user
|
IPAddr=socket.gethostbyname(socket.gethostname())
|
||||||
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
|
dst = abspath(abspath(join(plugin_path(), "CenRa_SICEN\\tools\\")))
|
||||||
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
if IPAddr[0:11] == "100.100.100": #4269
|
||||||
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
res_ident = first_cur.fetchone()
|
if IPAddr[0:9] == "192.168.0": #01
|
||||||
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
user = res_ident[1]
|
if IPAddr[0:9] == "192.168.1": #0726
|
||||||
|
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
|
||||||
|
try:
|
||||||
|
shutil.copy(src, dst)
|
||||||
|
except:
|
||||||
|
print('404')
|
||||||
|
|
||||||
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
|
|
||||||
|
|
||||||
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
||||||
first_conn.close()
|
|
||||||
|
|
||||||
if take:
|
|
||||||
return cur,con
|
|
||||||
else:
|
|
||||||
return cur
|
|
||||||
def send_issues(url,titre,body,labels):
|
def send_issues(url,titre,body,labels):
|
||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
@@ -167,15 +164,18 @@ def maj_verif(NAME):
|
|||||||
except:
|
except:
|
||||||
binar = False
|
binar = False
|
||||||
if binar:
|
if binar:
|
||||||
version_web = str(urllib.request.urlopen(URL).read())
|
try:
|
||||||
plugin_num = version_web.find(NAME)
|
version_web = str(urllib.request.urlopen(URL).read())
|
||||||
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
plugin_num = version_web.find(NAME)
|
||||||
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
valeur_version_web = version_web.find('<version>',plugin_num)+9
|
||||||
if version_plugin != version:
|
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version]
|
||||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
if version_plugin != version:
|
||||||
|
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||||
|
except:
|
||||||
|
print("error gitea version ssl")
|
||||||
else:
|
else:
|
||||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||||
return version_plugin
|
#return version_plugin
|
||||||
|
|
||||||
def devlog(NAME):
|
def devlog(NAME):
|
||||||
import qgis
|
import qgis
|
||||||
|
|||||||
@@ -1,4 +1,36 @@
|
|||||||
# Plugin QGIS
|
# Plugin QGIS
|
||||||
---
|
---
|
||||||
Point de départ de tout les plugin du CEN Rhône Alpes,
|
Point de départ de tout les plugin du CEN Rhône Alpes,
|
||||||
Pour la création et le partage <3
|
Pour la création et le partage :heart:
|
||||||
|
|Nom|Version|Statue|Date de création|
|
||||||
|
|---|---|---|---|
|
||||||
|
|CenRa_AUTOMAP|1.2|Releases|2024-09-25|
|
||||||
|
|CenRa_COPIE|2.2|Releases|06-02-2024|
|
||||||
|
|CenRa_FLUX|2.5|Releases|06-02-2024|
|
||||||
|
|CenRa_METABASE|0.2.0|Alpha|12-09-2024|
|
||||||
|
|CenRa_PAGERENDER|0.1.5|Alpha|09-10-2024|
|
||||||
|
|CenRa_POSTGIS|2.6|Releases|2024-02-06|
|
||||||
|
|CenRa_SICEN|1.8|Releases|06-02-2024|
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> [Releases pour QGIS](https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases)
|
||||||
|
## [AutoMap](CenRa_AUTOMAP) <img src="CenRa_AUTOMAP/tools/icons/icon.png" width="32"/>
|
||||||
|
Outils de création de mise en page automatique, utilisant des modèles préprogrammés pour homogénéiser les rendus, ainsi que de simplifier certains usages.
|
||||||
|
|
||||||
|
## [Copie](CenRa_COPIE) <img src="CenRa_COPIE/tools/icons/icon.png" width="32"/>
|
||||||
|
Permets à un simple utilisateur de réaliser une duplication d'une table se trouvant dans PostGIS, afin de garder les colonnes créées par cet utilisateur à fin de créer une nouvelle donnée pour l'année n+1.
|
||||||
|
|
||||||
|
## [Flux](CenRa_FLUX) <img src="CenRa_FLUX/tools/icons/icon.png" width="32"/>
|
||||||
|
Une interface d'ouverture de données se trouvant dans des bases PostGIS permet une gestion des droits d'accès des utilisateurs.
|
||||||
|
|
||||||
|
## [MetaBase](CenRa_METABASE) <img src="CenRa_METABASE/tools/icons/icon.png" width="32"/>
|
||||||
|
Outils à double utilisation, permettant de consulter les métadonnées des couches se trouvant dans PostGIS, tout en donnant la possibilités de créer des métadonnées qui seront stockées dans PostGIS.
|
||||||
|
|
||||||
|
## [PageRender](CenRa_PAGERENDER) <img src="CenRa_PAGERENDER/tools/icons/icon.png" width="32"/>
|
||||||
|
Plugin permettant de créer les modèles de mise en page qui seront ensuite placés dans l'outils ``CenRa_AUTOMAP``.
|
||||||
|
|
||||||
|
## [Postgis](CenRa_POSTGIS) <img src="CenRa_POSTGIS/tools/icons/icon.png" width="32"/>
|
||||||
|
Permets dans une base PostGIS de créer des schémas au nom d'un projet ainsi que des tables formulaire pour y renseigner Habita, Contour de sites, Travaux prévus et une dernière table malléable au besoin, vient également appliquer des styles pour l'utilisation de formulaire python.
|
||||||
|
|
||||||
|
## [Sicen](CenRa_SICEN) <img src="CenRa_SICEN/sicen.png" width="32"/>
|
||||||
|
Outils de consultation des données SICEN du CEN-RA permettent également d'exporter ces données en csv.
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
<?xml version = '1.0' encoding = 'UTF-8'?>
|
|
||||||
<plugins>
|
<plugins>
|
||||||
<pyqgis_plugin name="CenRa_POSTGIS" version="2.0">
|
<pyqgis_plugin name="CenRa_POSTGIS" version="2.7">
|
||||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>2.0</version>
|
<version>2.7</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_POSTGIS.zip</file_name>
|
<file_name>CenRa_POSTGIS.zip</file_name>
|
||||||
@@ -11,15 +10,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_POSTGIS.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_POSTGIS.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-02-06</create_date>
|
<create_date>2024-02-06</create_date>
|
||||||
<update_date>2024-10-22</update_date>
|
<update_date>2025-04-03</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,postgis</tags>
|
<tags>cenra,postgis</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_COPIE" version="2.0">
|
<pyqgis_plugin name="CenRa_COPIE" version="2.2">
|
||||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>2.0</version>
|
<version>2.2</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_COPIE.zip</file_name>
|
<file_name>CenRa_COPIE.zip</file_name>
|
||||||
@@ -28,15 +27,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_COPIE.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_COPIE.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-02-06</create_date>
|
<create_date>2024-02-06</create_date>
|
||||||
<update_date>2024-10-22</update_date>
|
<update_date>2025-04-03</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,copie</tags>
|
<tags>cenra,copie</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_SICEN" version="1.7">
|
<pyqgis_plugin name="CenRa_SICEN" version="1.9">
|
||||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>1.7</version>
|
<version>1.9</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_SICEN.zip</file_name>
|
<file_name>CenRa_SICEN.zip</file_name>
|
||||||
@@ -45,15 +44,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_SICEN.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_SICEN.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-02-06</create_date>
|
<create_date>2024-02-06</create_date>
|
||||||
<update_date>2024-09-13</update_date>
|
<update_date>2025-04-03</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,sicen</tags>
|
<tags>cenra,sicen</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_FLUX" version="2.1">
|
<pyqgis_plugin name="CenRa_FLUX" version="2.6">
|
||||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>2.1</version>
|
<version>2.6</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_FLUX.zip</file_name>
|
<file_name>CenRa_FLUX.zip</file_name>
|
||||||
@@ -62,15 +61,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_FLUX.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_FLUX.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-02-06</create_date>
|
<create_date>2024-02-06</create_date>
|
||||||
<update_date>2024-11-08</update_date>
|
<update_date>2025-04-03</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,flux</tags>
|
<tags>cenra,flux</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_METABASE" version="1.3">
|
<pyqgis_plugin name="CenRa_METABASE" version="0.2.1">
|
||||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>1.3</version>
|
<version>0.2.1</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_METABASE.zip</file_name>
|
<file_name>CenRa_METABASE.zip</file_name>
|
||||||
@@ -79,15 +78,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_METABASE.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_METABASE.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-09-12</create_date>
|
<create_date>2024-09-12</create_date>
|
||||||
<update_date>2024-10-08</update_date>
|
<update_date>2025-04-03</update_date>
|
||||||
<experimental>False</experimental>
|
<experimental>True</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,metabase</tags>
|
<tags>cenra,metabase</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_AUTOMAP" version="1.7">
|
<pyqgis_plugin name="CenRa_AUTOMAP" version="1.4">
|
||||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>1.7</version>
|
<version>1.4</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_AUTOMAP.zip</file_name>
|
<file_name>CenRa_AUTOMAP.zip</file_name>
|
||||||
@@ -96,15 +95,15 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_AUTOMAP.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_AUTOMAP.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-09-25</create_date>
|
<create_date>2024-09-25</create_date>
|
||||||
<update_date>2024-10-21</update_date>
|
<update_date>2025-04-03</update_date>
|
||||||
<experimental>True</experimental>
|
<experimental>False</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,mise en page,atlas</tags>
|
<tags>cenra,mise en page,atlas</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
<pyqgis_plugin name="CenRa_PAGERENDER" version="1.3">
|
<pyqgis_plugin name="CenRa_PAGERENDER" version="0.1.6">
|
||||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
<version>1.3</version>
|
<version>0.1.6</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_PAGERENDER.zip</file_name>
|
<file_name>CenRa_PAGERENDER.zip</file_name>
|
||||||
@@ -113,26 +112,44 @@
|
|||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_PAGERENDER.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_PAGERENDER.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-10-09</create_date>
|
<create_date>2024-10-09</create_date>
|
||||||
<update_date>2024-11-08</update_date>
|
<update_date>2025-04-03</update_date>
|
||||||
<experimental>True</experimental>
|
<experimental>True</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,mise en page,atlas</tags>
|
<tags>cenra,mise en page,atlas</tags>
|
||||||
|
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
<pyqgis_plugin name="CenRa_COMPANIONCUBE" version="1.0">
|
|
||||||
<description><![CDATA[Dépôt pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.]]></description>
|
<pyqgis_plugin name="CenRa_gn2qgis" version="0.1.0">
|
||||||
<version>1.0</version>
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
|
<version>0.1.0</version>
|
||||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
<file_name>CenRa_COMPANIONCUBE.zip</file_name>
|
<file_name>CenRa_gn2qgis.zip</file_name>
|
||||||
<icon>CEN-Rhone-Alpes.png</icon>
|
<icon>CEN-Rhone-Alpes.png</icon>
|
||||||
<author_name>CEN-Rhone-Alpes</author_name>
|
<author_name>CEN-Rhone-Alpes</author_name>
|
||||||
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_COMPANIONCUBE.zip</download_url>
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_gn2qgis.zip</download_url>
|
||||||
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
<create_date>2024-10-21</create_date>
|
<create_date>2024-12-11</create_date>
|
||||||
<update_date>2024-10-22</update_date>
|
<update_date>2024-12-11</update_date>
|
||||||
<experimental>True</experimental>
|
<experimental>True</experimental>
|
||||||
<deprecated>False</deprecated>
|
<deprecated>False</deprecated>
|
||||||
<tags>cenra,ia</tags>
|
<tags>cenra,geonature</tags>
|
||||||
</pyqgis_plugin>
|
</pyqgis_plugin>
|
||||||
|
|
||||||
|
<pyqgis_plugin name="BiodivAURA" version="0.1.0">
|
||||||
|
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||||
|
<version>0.1.0</version>
|
||||||
|
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||||
|
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||||
|
<file_name>BiodivAURA.zip</file_name>
|
||||||
|
<icon>CEN-Rhone-Alpes.png</icon>
|
||||||
|
<author_name>CEN-Rhone-Alpes</author_name>
|
||||||
|
<download_url>https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/BiodivAURA.zip</download_url>
|
||||||
|
<uploaded_by>CEN-Rhone-Alpes</uploaded_by>
|
||||||
|
<create_date>2024-12-12</create_date>
|
||||||
|
<update_date>2024-12-12</update_date>
|
||||||
|
<experimental>True</experimental>
|
||||||
|
<deprecated>False</deprecated>
|
||||||
|
<tags>cenra,biodiv'aura</tags>
|
||||||
|
</pyqgis_plugin>
|
||||||
|
|
||||||
</plugins>
|
</plugins>
|
||||||