152 lines
5.8 KiB
Python
152 lines
5.8 KiB
Python
import logging
|
|
# from qgis.gui import *
|
|
|
|
from qgis.core import (
|
|
QgsDataSourceUri,
|
|
QgsProject,
|
|
QgsSettings,
|
|
QgsVectorLayer,
|
|
QgsMapThemeCollection,
|
|
)
|
|
from qgis.PyQt.QtCore import QSettings
|
|
from qgis.PyQt.QtGui import QIcon
|
|
from qgis.PyQt.QtWidgets import (
|
|
QDockWidget,
|
|
QInputDialog,
|
|
)
|
|
|
|
from qgis.PyQt.QtXml import QDomDocument
|
|
|
|
try:
|
|
Enabled = True
|
|
from .tools.StyleLayer import host, port, dbname, os_user
|
|
except ValueError:
|
|
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(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() is True:
|
|
layerName = layer.name()
|
|
listStyle = layer.listStylesInDatabase()
|
|
try:
|
|
StyleExist = True
|
|
indexStyle = (listStyle[2].index(layerName))
|
|
except ValueError:
|
|
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() is True:
|
|
layerName = layer.name()
|
|
listStyle = layer.listStylesInDatabase()
|
|
try:
|
|
StyleExist = True
|
|
indexStyle = (listStyle[2].index(layerName))
|
|
except ValueError:
|
|
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)
|