Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c02da75f0b | ||
|
|
d4b181ff61 | ||
|
|
7a3814a429 | ||
|
|
1cd816c706 | ||
|
|
94cac31fbb | ||
|
|
2690220a02 |
@@ -24,8 +24,9 @@ from pg_metadata.processing.provider import PgMetadataProvider
|
||||
from pg_metadata.qgis_plugin_tools.tools.custom_logging import setup_logger
|
||||
'''
|
||||
import os
|
||||
from qgis.PyQt.QtCore import QSettings
|
||||
from .tools.resources import (
|
||||
plugin_path,
|
||||
# plugin_path,
|
||||
resources_path,
|
||||
pyperclip,
|
||||
maj_verif,
|
||||
@@ -37,9 +38,6 @@ from .style_invoke import AutoMap_Style
|
||||
from .about_form import AboutDialog
|
||||
|
||||
|
||||
from qgis.PyQt.QtCore import *
|
||||
|
||||
|
||||
class PgAutoMap:
|
||||
def __init__(self):
|
||||
""" Constructor. """
|
||||
@@ -129,6 +127,7 @@ class PgAutoMap:
|
||||
"""
|
||||
dialog = AboutDialog(iface)
|
||||
dialog.exec()
|
||||
|
||||
def open_help():
|
||||
""" Open the online help. """
|
||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||
|
||||
@@ -61,8 +61,7 @@ from qgis.PyQt.QtWidgets import (
|
||||
)
|
||||
|
||||
from qgis.PyQt.QtCore import QSettings
|
||||
from qgis.PyQt import QtGui
|
||||
from qgis.PyQt import QtWidgets
|
||||
from qgis.PyQt import QtGui, QtWidgets
|
||||
|
||||
|
||||
from qgis.PyQt.QtXml import QDomDocument
|
||||
@@ -71,7 +70,7 @@ import glob
|
||||
from .tools.resources import (
|
||||
load_ui,
|
||||
resources_path,
|
||||
send_issues,
|
||||
# send_issues,
|
||||
)
|
||||
from .issues import CenRa_Issues
|
||||
|
||||
@@ -109,8 +108,8 @@ data_source = [
|
||||
A4_size = {'Portrait': {'RIGHT': 210, 'LEFT': 0, 'TOP': 0, 'BOTTOM': 297}, 'Landscape': {'RIGHT': 297, 'LEFT': 0, 'TOP': 0, 'BOTTOM': 210}}
|
||||
A3_size = {'Portrait': {'RIGHT': 298, 'LEFT': 0, 'TOP': 0, 'BOTTOM': 420}, 'Landscape': {'RIGHT': 420, 'LEFT': 0, 'TOP': 0, 'BOTTOM': 298}}
|
||||
|
||||
class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
|
||||
class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
def __init__(self, parent=None):
|
||||
_ = parent
|
||||
super().__init__()
|
||||
@@ -140,13 +139,12 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
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 = []
|
||||
|
||||
for filename in glob.glob(resources_path("mises_en_pages", "*.py")):
|
||||
mises_en_page.append(filename)
|
||||
|
||||
|
||||
for i, filename in enumerate(mises_en_page):
|
||||
nom_fichier = os.path.basename(filename)
|
||||
self.comboBox.addItem(nom_fichier)
|
||||
@@ -204,8 +202,10 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
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):
|
||||
self.mComboBox_4.clear()
|
||||
logo_library = []
|
||||
@@ -237,16 +237,20 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
try:
|
||||
layout_subtitle = project_subtitle.layoutManager().layoutByName(self.comboBox_7.currentText())
|
||||
self.lineEdit_3.setText(layout_subtitle.itemById("SubTitle").text())
|
||||
except:
|
||||
except NameError:
|
||||
print("")
|
||||
|
||||
def load_ortho(self):
|
||||
global myGroup, last_group
|
||||
runing = False
|
||||
try: myGroup
|
||||
except NameError: runing = True
|
||||
try: last_group
|
||||
except NameError: last_group = ''
|
||||
try:
|
||||
myGroup
|
||||
except NameError:
|
||||
runing = True
|
||||
try:
|
||||
last_group
|
||||
except NameError:
|
||||
last_group = ''
|
||||
if runing or (last_group != '' and last_group != 'ortho'):
|
||||
layername = False
|
||||
layerAll = QgsProject.instance().layerTreeRoot().children()
|
||||
@@ -287,10 +291,14 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
def load_osm(self):
|
||||
global myGroup, last_group
|
||||
runing = False
|
||||
try: myGroup
|
||||
except NameError: runing = True
|
||||
try: last_group
|
||||
except NameError: last_group = ''
|
||||
try:
|
||||
myGroup
|
||||
except NameError:
|
||||
runing = True
|
||||
try:
|
||||
last_group
|
||||
except NameError:
|
||||
last_group = ''
|
||||
if runing or (last_group != '' and last_group != 'osm'):
|
||||
layername = False
|
||||
layerAll = QgsProject.instance().layerTreeRoot().children()
|
||||
@@ -365,6 +373,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
self.show_map()
|
||||
else:
|
||||
self.hide_map()
|
||||
|
||||
def show_map(self):
|
||||
self.groupBox_3.setEnabled(True)
|
||||
self.groupBox_3.show()
|
||||
@@ -378,6 +387,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
self.show_titre()
|
||||
else:
|
||||
self.hide_titre()
|
||||
|
||||
def show_titre(self):
|
||||
self.lineEdit_2.setEnabled(False)
|
||||
self.lineEdit_2.hide()
|
||||
@@ -395,6 +405,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
self.show_source()
|
||||
else:
|
||||
self.hide_source()
|
||||
|
||||
def show_source(self):
|
||||
self.lineEdit_4.setEnabled(False)
|
||||
self.lineEdit_4.hide()
|
||||
@@ -473,11 +484,12 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
logo_div = A3_size['Portrait']['RIGHT']
|
||||
if self.radioButton_5.isChecked() and self.radioButton_8.isChecked():
|
||||
logo_div = A3_size['Portrait']['BOTTOM']
|
||||
if True:#os.path.basename(filename) == "1. Modèle carto standard (consolidé).qpt":
|
||||
# os.path.basename(filename) == "1. Modèle carto standard (consolidé).qpt":
|
||||
if True:
|
||||
|
||||
self.actualisation_mise_en_page()
|
||||
|
||||
## Add map to layout
|
||||
# Add map to layout
|
||||
self.map_modele_test = QgsLayoutItemMap(self.layout)
|
||||
# Charger une carte vide
|
||||
self.map_modele_test.setRect(20, 20, 20, 20)
|
||||
@@ -525,7 +537,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
self.layout.addLayoutItem(self.map_modele_test)
|
||||
self.map_modele_test.setId("carte_principale")
|
||||
|
||||
## Ajout d'un titre à la mise en page
|
||||
# Ajout d'un titre à la mise en page
|
||||
title = QgsLayoutItemLabel(self.layout)
|
||||
self.layout.addLayoutItem(title)
|
||||
titre = titre_layout_name
|
||||
@@ -542,8 +554,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
title.setHAlign(Qt.AlignmentFlag(0x0004))
|
||||
title.setVAlign(Qt.AlignmentFlag(0x0080))
|
||||
|
||||
|
||||
## Ajout d'un sous titre à la mise en page
|
||||
# Ajout d'un sous titre à la mise en page
|
||||
subtitle = QgsLayoutItemLabel(self.layout)
|
||||
self.layout.addLayoutItem(subtitle)
|
||||
titre = self.lineEdit_3.text()
|
||||
@@ -561,8 +572,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
subtitle.setHAlign(Qt.AlignmentFlag(0x0004))
|
||||
subtitle.setVAlign(Qt.AlignmentFlag(0x0080))
|
||||
|
||||
|
||||
## Ajout du logo CEN NA en haut à gauche de la page
|
||||
# Ajout du logo CEN NA en haut à gauche de la page
|
||||
logo = QgsLayoutItemPicture(self.layout)
|
||||
logo.setResizeMode(QgsLayoutItemPicture.Zoom)
|
||||
logo.setMode(QgsLayoutItemPicture.FormatRaster)
|
||||
@@ -573,8 +583,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
logo.setId('logo')
|
||||
self.layout.addLayoutItem(logo)
|
||||
|
||||
|
||||
## Ajout de la legende :
|
||||
# Ajout de la legende :
|
||||
legend = QgsLayoutItemLegend(self.layout)
|
||||
|
||||
legend.setId('legende_model1')
|
||||
@@ -619,7 +628,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
layertreelayer = root.findLayer(layer.id())
|
||||
|
||||
# get the parent of the layer tree layer (layer tree root, or group)
|
||||
if layertreelayer != None:
|
||||
if layertreelayer is not None:
|
||||
parent = layertreelayer.parent()
|
||||
|
||||
# if the parent is a group and has a name, find it and remove the layer
|
||||
@@ -630,7 +639,6 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
else:
|
||||
root_group.removeLayer(layer)
|
||||
|
||||
|
||||
legend.setEqualColumnWidth(True)
|
||||
legend.setSplitLayer(True)
|
||||
legend.setColumnSpace(5)
|
||||
@@ -647,7 +655,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
legend.updateLegend()
|
||||
legend.attemptMove(self.template_parameters['Legande_locals'])
|
||||
|
||||
## Ajout de l'échelle numeric à la mise en page
|
||||
# Ajout de l'échelle numeric à la mise en page
|
||||
self.scalebarnumeric_qpt = QgsLayoutItemScaleBar(self.layout)
|
||||
self.scalebarnumeric_qpt.setStyle('Numeric')
|
||||
self.scalebarnumeric_qpt.setLinkedMap(self.map_modele_test)
|
||||
@@ -667,7 +675,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
|
||||
self.layout.addLayoutItem(self.scalebarnumeric_qpt)
|
||||
|
||||
## Ajout de l'échelle à la mise en page
|
||||
# Ajout de l'échelle à la mise en page
|
||||
self.scalebar_qpt = QgsLayoutItemScaleBar(self.layout)
|
||||
self.scalebar_qpt.setStyle('Single Box')
|
||||
self.scalebar_qpt.setLinkedMap(self.map_modele_test)
|
||||
@@ -736,7 +744,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
self.layout.addLayoutItem(credit_text)
|
||||
self.layout.addLayoutItem(credit_text2)
|
||||
|
||||
## Ajout du logo credit en bas à droit de la page
|
||||
# Ajout du logo credit en bas à droit de la page
|
||||
len_item = (len(self.mComboBox_4.checkedItems()))
|
||||
for logo_run in self.mComboBox_4.checkedItems():
|
||||
logo_credit = QgsLayoutItemPicture(self.layout)
|
||||
@@ -792,8 +800,6 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
else:
|
||||
existing_layout = True
|
||||
|
||||
|
||||
|
||||
self.manager.addLayout(self.layout)
|
||||
if self.radioButton_9.isChecked() == 1:
|
||||
self.layout.atlas().setEnabled(True)
|
||||
@@ -814,7 +820,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
except:
|
||||
TryMessage = True
|
||||
|
||||
if TryMessage == True:
|
||||
if TryMessage is True:
|
||||
iface.openLayoutDesigner(layout_modifie)
|
||||
self.close()
|
||||
else:
|
||||
@@ -844,7 +850,6 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
|
||||
eval("exec('self.template_parameters = '+ values_page_import + '.fletch_canvas(self)')")
|
||||
|
||||
def bar_echelle_auto(self, echelle, bar_echelle):
|
||||
|
||||
if True:
|
||||
if echelle.scale() >= 40000:
|
||||
bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers)
|
||||
|
||||
+18
-13
@@ -1,10 +1,4 @@
|
||||
import os
|
||||
plugin_dir = os.path.dirname(__file__)
|
||||
end_find = plugin_dir.rfind('\\')+1
|
||||
|
||||
NAME = plugin_dir[end_find:]
|
||||
#print(NAME)
|
||||
|
||||
from qgis.gui import *
|
||||
|
||||
from qgis.core import (
|
||||
@@ -35,14 +29,20 @@ from qgis.utils import iface
|
||||
|
||||
from .tools.resources import (
|
||||
load_ui,
|
||||
resources_path,
|
||||
# resources_path,
|
||||
send_issues,
|
||||
)
|
||||
|
||||
plugin_dir = os.path.dirname(__file__)
|
||||
end_find = plugin_dir.rfind('\\') + 1
|
||||
|
||||
NAME = plugin_dir[end_find:]
|
||||
# print(NAME)
|
||||
|
||||
EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
|
||||
|
||||
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||
|
||||
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||
def __init__(self, parent=None):
|
||||
_ = parent
|
||||
super().__init__()
|
||||
@@ -63,11 +63,16 @@ class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||
statu_autre = self.check_autre.isChecked()
|
||||
|
||||
statu = []
|
||||
if statu_bug == True : statu = statu + [1]
|
||||
if statu_aide == True : statu = statu + [3]
|
||||
if statu_question == True : statu = statu + [5]
|
||||
if statu_amelioration == True : statu = statu + [2]
|
||||
if statu_autre == True : statu = statu + [6]
|
||||
if statu_bug is True:
|
||||
statu = statu + [1]
|
||||
if statu_aide is True:
|
||||
statu = statu + [3]
|
||||
if statu_question is True:
|
||||
statu = statu + [5]
|
||||
if statu_amelioration is True:
|
||||
statu = statu + [2]
|
||||
if statu_autre is True:
|
||||
statu = statu + [6]
|
||||
|
||||
if len(statu) >= 1:
|
||||
import qgis
|
||||
|
||||
@@ -4,28 +4,25 @@ __email__ = "info@3liz.org"
|
||||
|
||||
|
||||
from qgis.core import QgsApplication
|
||||
from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl
|
||||
from qgis.PyQt.QtCore import QUrl, QSettings
|
||||
from qgis.PyQt.QtGui import QDesktopServices, QIcon
|
||||
from qgis.PyQt.QtWidgets import QAction, QMessageBox
|
||||
from qgis.PyQt.QtWidgets import QAction
|
||||
from qgis.utils import iface
|
||||
import qgis
|
||||
|
||||
|
||||
# include <QSettings>
|
||||
import socket
|
||||
|
||||
import os
|
||||
from .tools.resources import (
|
||||
plugin_path,
|
||||
pyperclip,
|
||||
resources_path,
|
||||
maj_verif,
|
||||
)
|
||||
pyperclip()
|
||||
|
||||
from .flux_editor import Flux_Editor
|
||||
from .about_form import AboutDialog
|
||||
|
||||
from qgis.PyQt.QtCore import *
|
||||
|
||||
|
||||
class PgFlux:
|
||||
def __init__(self):
|
||||
@@ -65,8 +62,6 @@ class PgFlux:
|
||||
self.help_action.triggered.connect(self.open_help)
|
||||
if not self.action_editor:
|
||||
self.action_editor = Flux_Editor()
|
||||
|
||||
|
||||
self.flux_editor = QAction(icon, 'SigCEN', None)
|
||||
self.toolBar.addAction(self.flux_editor)
|
||||
self.flux_editor.triggered.connect(self.open_editor)
|
||||
@@ -80,6 +75,7 @@ class PgFlux:
|
||||
"""
|
||||
dialog = AboutDialog(iface)
|
||||
dialog.exec()
|
||||
|
||||
def open_help():
|
||||
""" Open the online help. """
|
||||
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
|
||||
@@ -93,7 +89,6 @@ class PgFlux:
|
||||
if self.action_editor:
|
||||
iface.removePluginMenu('CenRa_Flux', self.flux_editor)
|
||||
|
||||
|
||||
if self.provider:
|
||||
QgsApplication.processingRegistry().removeProvider(self.provider)
|
||||
del self.provider
|
||||
|
||||
@@ -3,7 +3,7 @@ import os.path
|
||||
from pathlib import Path
|
||||
|
||||
from qgis.PyQt import uic
|
||||
from qgis.PyQt.QtGui import QPixmap
|
||||
# from qgis.PyQt.QtGui import QPixmap
|
||||
from qgis.PyQt.QtWidgets import QDialog
|
||||
|
||||
from .tools.resources import devlog
|
||||
|
||||
+115
-330
@@ -2,63 +2,69 @@
|
||||
|
||||
from __future__ import absolute_import
|
||||
# Import the PyQt and QGIS libraries
|
||||
from builtins import next
|
||||
# from builtins import next
|
||||
from builtins import str
|
||||
from builtins import object
|
||||
import qgis
|
||||
from qgis.PyQt import QtCore
|
||||
# from builtins import object
|
||||
|
||||
from qgis.PyQt import QtCore, QtGui
|
||||
from qgis.PyQt.QtCore import QSettings
|
||||
from qgis.PyQt import QtWidgets
|
||||
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog
|
||||
# from qgis.PyQt.QtWidgets import QDialog
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
try:
|
||||
from PyQt5.QtCore import *
|
||||
from PyQt5.QtGui import *
|
||||
from PyQt5 import QtGui
|
||||
except:
|
||||
from PyQt6.QtCore import *
|
||||
from PyQt6.QtGui import *
|
||||
from PyQt6 import QtGui
|
||||
|
||||
from qgis.core import *
|
||||
from qgis.core import QgsDataSourceUri
|
||||
# from qgis.PyQt.QtCore import *
|
||||
|
||||
# from qgis.core import QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject, QgsSettings
|
||||
from qgis.core import QgsDataSourceUri, QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject, QgsSettings, QgsApplication, QgsVectorLayer, QgsRasterLayer, QgsWkbTypes
|
||||
from qgis.PyQt.QtWidgets import (
|
||||
QDialog,
|
||||
QAction,
|
||||
QDockWidget,
|
||||
QFileDialog,
|
||||
QInputDialog,
|
||||
QMenu,
|
||||
QToolButton,
|
||||
QTableWidget,
|
||||
# QAction,
|
||||
# QDockWidget,
|
||||
# QFileDialog,
|
||||
# QInputDialog,
|
||||
# QMenu,
|
||||
# QToolButton,
|
||||
# QTableWidget,
|
||||
QTableWidgetItem,
|
||||
QMessageBox,
|
||||
QVBoxLayout,
|
||||
)
|
||||
from .tools.SQLRequet import *
|
||||
from .tools.SQLRequet import schemaname_list, schemaname_list_ref, schemaname_distinct
|
||||
from .tools.resources import (
|
||||
load_ui,
|
||||
resources_path,
|
||||
send_issues,
|
||||
# send_issues,
|
||||
)
|
||||
try:
|
||||
from .tools.PythonSQL import login_base
|
||||
except:
|
||||
except NameError:
|
||||
print('Pas de fichier PythonSQL')
|
||||
|
||||
from .issues import CenRa_Issues
|
||||
|
||||
from ast import literal_eval
|
||||
# from .issues import CenRa_Issues
|
||||
|
||||
# from ast import literal_eval
|
||||
from qgis.utils import iface
|
||||
import os.path
|
||||
import webbrowser, os
|
||||
# import os.path
|
||||
# import os
|
||||
# import webbrowser
|
||||
import psycopg2
|
||||
import psycopg2.extras
|
||||
import base64
|
||||
# import base64
|
||||
|
||||
global DeBUG
|
||||
DeBUG = 0
|
||||
|
||||
itemIconRaster = QTableWidgetItem()
|
||||
icon = QIcon()
|
||||
icon.addPixmap(QtGui.QPixmap(resources_path('icons', 'mIconRaster.svg')), QIcon.Mode(0), QIcon.State(1))
|
||||
itemIconRaster.setIcon(icon)
|
||||
|
||||
itemIconVecteur = QTableWidgetItem()
|
||||
icon = QIcon()
|
||||
icon.addPixmap(QtGui.QPixmap(resources_path('icons', 'mIconVecteur.svg')), QIcon.Mode(0), QIcon.State(1))
|
||||
itemIconVecteur.setIcon(icon)
|
||||
|
||||
try:
|
||||
account = login_base('account')
|
||||
user = account[0]
|
||||
@@ -69,126 +75,17 @@ try:
|
||||
sigdb = account[5]
|
||||
refdb = account[6]
|
||||
|
||||
except NameError:
|
||||
print('Fails to login DB for account')
|
||||
|
||||
|
||||
except:
|
||||
print('')
|
||||
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):
|
||||
def __init__(self, parent=None):
|
||||
_ = parent
|
||||
super().__init__()
|
||||
@@ -202,7 +99,6 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
self.commandLinkButton.setIcon(QtGui.QIcon(resources_path('ui', 'arrow-bottom.png')))
|
||||
self.commandLinkButton_2.setIcon(QtGui.QIcon(resources_path('ui', 'arrow-up.png')))
|
||||
|
||||
#self.tableWidget.setSelectionBehavior(QTableWidget.selectRow)
|
||||
self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger(0))
|
||||
self.toolButton.setIcon(QtGui.QIcon(resources_path('ui', 'find.png')))
|
||||
self.comboBox_2.addItem("SIG")
|
||||
@@ -215,11 +111,11 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
self.tableWidget_2.itemDoubleClicked.connect(self.suppression_flux)
|
||||
self.comboBox_2.currentIndexChanged.connect(self.bd_source)
|
||||
self.checkBox.hide()
|
||||
self.checkBox.stateChanged.connect(self.modeCarte)
|
||||
# self.checkBox.stateChanged.connect(self.modeCarte)
|
||||
self.toolButton.clicked.connect(self.getCanevas)
|
||||
layout = QVBoxLayout()
|
||||
self.lineEdit.textChanged.connect(self.filtre_dynamique)
|
||||
self.viewer.textChanged.connect(self.NewTitle)
|
||||
# self.viewer.textChanged.connect(self.NewTitle)
|
||||
layout.addWidget(self.lineEdit)
|
||||
self.viewer.hide()
|
||||
self.DeBUG.addItem('')
|
||||
@@ -228,14 +124,11 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
self.DeBUG.addItem('4269')
|
||||
|
||||
self.DeBUG.hide()
|
||||
#self.lineEdit.mousePressEvent = self._mousePressEvent
|
||||
|
||||
#metadonnees_plugin = open(self.plugin_path + '/metadata.txt')
|
||||
#infos_metadonnees = metadonnees_plugin.readlines()
|
||||
|
||||
def raise_(self):
|
||||
"""Run method that performs all the real work"""
|
||||
self.bd_source()
|
||||
|
||||
def ModeDeBUG(self):
|
||||
self.DeBUG.show()
|
||||
|
||||
@@ -250,127 +143,13 @@ class Flux_Editor(QDialog, EDITOR_CLASS):
|
||||
DeBUG = 0
|
||||
self.DeBUG.hide()
|
||||
|
||||
"""
|
||||
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):
|
||||
self.activateWindow()
|
||||
@@ -393,7 +172,7 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
self.combobox_custom()
|
||||
# Create the dialog with elements (after translation) and keep reference
|
||||
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
|
||||
if self.first_start == True:
|
||||
if self.first_start is True:
|
||||
self.first_start = False
|
||||
# show the dialog
|
||||
self.show()
|
||||
@@ -417,7 +196,7 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
self.combobox_custom()
|
||||
# Create the dialog with elements (after translation) and keep reference
|
||||
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
|
||||
if self.first_start == True:
|
||||
if self.first_start is True:
|
||||
self.first_start = False
|
||||
# show the dialog
|
||||
self.show()
|
||||
@@ -432,9 +211,6 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
def suppression_flux(self):
|
||||
self.tableWidget_2.removeRow(self.tableWidget_2.currentRow())
|
||||
|
||||
def open_url(self, item):
|
||||
url = item.data(Qt.UserRole)
|
||||
|
||||
def initialisation_flux(self):
|
||||
if dbtype == sigdb:
|
||||
# self.toolButton.setEnabled(1)
|
||||
@@ -445,7 +221,7 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
where schemaname like '""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) UNION (SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews where schemaname like '""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) order by schemaname,tablename;"""
|
||||
else:
|
||||
custom_list = """(SELECT schemaname,tablename from pg_catalog.pg_tables
|
||||
where schemaname like '\_"""+ str(self.comboBox.currentText()) +"""%' order by schemaname,tablename) UNION (SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews where schemaname like '\_"""+ str(self.comboBox.currentText()) +"""%' order by schemaname,tablename) order by schemaname,tablename;"""
|
||||
where schemaname like '\\_""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) UNION (SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews where schemaname like '\\_""" + str(self.comboBox.currentText()) + """%' order by schemaname,tablename) order by schemaname,tablename;"""
|
||||
else:
|
||||
if self.comboBox.currentText() == 'toutes les catégories':
|
||||
custom_list = schemaname_list_ref
|
||||
@@ -455,15 +231,23 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
cur.execute(custom_list)
|
||||
list_schema = cur.fetchall()
|
||||
|
||||
SQLraster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
||||
cur.execute(SQLraster)
|
||||
SQLcountRaster = """SELECT schemaname,viewname FROM pg_catalog.pg_views
|
||||
WHERE schemaname LIKE 'public' AND viewname LIKE 'raster_columns';"""
|
||||
cur.execute(SQLcountRaster)
|
||||
RasterIF = len(cur.fetchall())
|
||||
|
||||
if RasterIF == 1:
|
||||
SQLloadRaster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
||||
cur.execute(SQLloadRaster)
|
||||
list_raster = cur.fetchall()
|
||||
RasterList = []
|
||||
for rasterFind in list_raster:
|
||||
RasterList.append(rasterFind[0])
|
||||
else:
|
||||
RasterList = []
|
||||
|
||||
self.tableWidget.setRowCount(len(list_schema))
|
||||
self.tableWidget.setColumnCount(3)
|
||||
self.tableWidget.setColumnCount(4)
|
||||
i = 0
|
||||
for value in list_schema:
|
||||
if dbtype == sigdb:
|
||||
@@ -490,68 +274,62 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
schema_name = str(value[0])
|
||||
table_name = str(value[1])
|
||||
elif type_val != '00' and type_val != '01' and type_val != '07' and type_val != '26' and type_val != '42' and type_val != '69' and type_val != 'ra':
|
||||
if dbtype == refdb:
|
||||
if (schema_name+'.'+table_name) in RasterList:
|
||||
type_val = 'agregation'
|
||||
schema_name = str(value[0])
|
||||
table_name = str(value[1])
|
||||
|
||||
if (str(value[0]) + '.' + str(value[1])) in RasterList:
|
||||
SVG = 'mIconRaster.svg'
|
||||
else:
|
||||
SVG = 'mIconWfs.svg'
|
||||
SVG = 'mIconVecteur.svg'
|
||||
|
||||
itemIcon = QTableWidgetItem()
|
||||
icon = QIcon()
|
||||
icon.addPixmap(QtGui.QPixmap(resources_path('icons', SVG)), QIcon.Mode(0), QIcon.State(1))
|
||||
itemIcon.setIcon(icon)
|
||||
|
||||
else:
|
||||
type_val='agregation'
|
||||
schema_name=str(value[0])
|
||||
table_name=str(value[1])
|
||||
|
||||
item = QTableWidgetItem(type_val)
|
||||
if dbtype == refdb:
|
||||
self.tableWidget.setItem(i, 0, itemIcon)
|
||||
else:
|
||||
self.tableWidget.setCellWidget(i,0,None)
|
||||
self.tableWidget.setItem(i,0,item)
|
||||
item = QTableWidgetItem(schema_name)
|
||||
item = QTableWidgetItem(type_val)
|
||||
self.tableWidget.setItem(i, 1, item)
|
||||
item = QTableWidgetItem(table_name)
|
||||
item = QTableWidgetItem(schema_name)
|
||||
self.tableWidget.setItem(i, 2, item)
|
||||
item = QTableWidgetItem(table_name)
|
||||
self.tableWidget.setItem(i, 3, item)
|
||||
i = i + 1
|
||||
self.tableWidget.setColumnWidth(0, 20)
|
||||
self.tableWidget.setColumnWidth(1, 300)
|
||||
self.tableWidget.setColumnWidth(1, 70)
|
||||
self.tableWidget.setColumnWidth(2, 300)
|
||||
self.tableWidget.setHorizontalHeaderLabels(["Code","Schema","Table"])
|
||||
self.tableWidget.setColumnWidth(3, 300)
|
||||
self.tableWidget.setHorizontalHeaderLabels(["Type", "Code", "Schema", "Table"])
|
||||
|
||||
def selection_flux(self):
|
||||
selected_row = 0
|
||||
selected_items = self.tableWidget.selectedItems()
|
||||
|
||||
# Assuming you want to compare items in the first column for uniqueness
|
||||
svgTake = (selected_items[2].tableWidget().cellWidget(0,0))
|
||||
new_item_text = selected_items[2].text()
|
||||
# svgTake = (selected_items[2].tableWidget().cellWidget(0,0))
|
||||
new_item_text = selected_items[3].text()
|
||||
|
||||
if not self.item_already_exists(new_item_text):
|
||||
self.tableWidget_2.insertRow(selected_row)
|
||||
|
||||
for column in range(self.tableWidget.columnCount()):
|
||||
cloned_item = selected_items[column].clone()
|
||||
self.tableWidget_2.setHorizontalHeaderLabels(["Code","Schema", "Table"])
|
||||
self.tableWidget_2.setColumnCount(3)
|
||||
self.tableWidget_2.setHorizontalHeaderLabels(["Type", "Code", "Schema", "Table"])
|
||||
self.tableWidget_2.setColumnCount(4)
|
||||
self.tableWidget_2.setItem(selected_row, column, cloned_item)
|
||||
|
||||
self.tableWidget_2.setColumnWidth(0, 50)
|
||||
self.tableWidget_2.setColumnWidth(1, 300)
|
||||
self.tableWidget_2.setColumnWidth(0, 20)
|
||||
self.tableWidget_2.setColumnWidth(1, 70)
|
||||
self.tableWidget_2.setColumnWidth(2, 300)
|
||||
|
||||
self.tableWidget_2.setColumnWidth(3, 300)
|
||||
|
||||
def item_already_exists(self, new_item_text):
|
||||
# Assuming you want to compare items in the first column for uniqueness
|
||||
existing_items = self.tableWidget_2.findItems(new_item_text, QtCore.Qt.MatchFlag(0))
|
||||
|
||||
# Check if there are any existing items with the same text in the first column
|
||||
return len(existing_items) > 0
|
||||
|
||||
|
||||
|
||||
def limite_flux(self):
|
||||
|
||||
if self.tableWidget_2.rowCount() > 5:
|
||||
@@ -567,11 +345,13 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
|
||||
if self.tableWidget_2.rowCount() <= 5:
|
||||
self.chargement_flux()
|
||||
|
||||
"""
|
||||
def openPostGIS(self, schema, table):
|
||||
uri = QgsDataSourceUri()
|
||||
uri.setConnection(host, port, sigdb, user, mdp)
|
||||
|
||||
if (schema+'.'+table) in RasterList:
|
||||
if (schema + '.' + table) in LRasterList:
|
||||
uri.setDataSource(schema, table, "rast")
|
||||
uri.setKeyColumn('rid')
|
||||
uri.setSrid('2154')
|
||||
@@ -583,11 +363,11 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||
# Ajout de la couche au canevas QGIS
|
||||
QgsProject.instance().addMapLayer(layer)
|
||||
"""
|
||||
|
||||
def chargement_flux(self):
|
||||
|
||||
managerAU = QgsApplication.authManager()
|
||||
k = managerAU.availableAuthMethodConfigs().keys()
|
||||
managerAU.availableAuthMethodConfigs().keys()
|
||||
|
||||
def REQUEST(type):
|
||||
switcher = {
|
||||
@@ -599,13 +379,11 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
}
|
||||
return switcher.get(type, "nothing")
|
||||
|
||||
# def displayOnWindows(type, uri, name):
|
||||
# p = []
|
||||
|
||||
|
||||
def displayOnWindows(type, uri, name):
|
||||
p = []
|
||||
|
||||
SQLraster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
||||
cur.execute(SQLraster)
|
||||
SQLloadRaster = """SELECT concat(r_table_schema,'.',r_table_name) from public.raster_columns; """
|
||||
cur.execute(SQLloadRaster)
|
||||
list_raster = cur.fetchall()
|
||||
RasterList = []
|
||||
for rasterFind in list_raster:
|
||||
@@ -613,26 +391,26 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
|
||||
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
|
||||
if self.tableWidget_2.item(row, 1).background().color().rgba() != color_rgba:
|
||||
# supression de la partie de l'url après le point d'interrogation
|
||||
if dbtype == sigdb:
|
||||
code = self.tableWidget_2.item(row,0).text()
|
||||
schema = '_'+code+'_'+self.tableWidget_2.item(row,1).text()
|
||||
code = self.tableWidget_2.item(row, 1).text()
|
||||
schema = '_' + code + '_' + self.tableWidget_2.item(row, 2).text()
|
||||
if code == 'travaux' or code == 'agregation':
|
||||
schema = self.tableWidget_2.item(row,1).text()
|
||||
table = self.tableWidget_2.item(row,2).text()
|
||||
schema = self.tableWidget_2.item(row, 2).text()
|
||||
table = self.tableWidget_2.item(row, 3).text()
|
||||
else:
|
||||
table = self.tableWidget_2.item(row,2).text()
|
||||
table = self.tableWidget_2.item(row, 3).text()
|
||||
table = schema + '_' + table
|
||||
if dbtype == refdb:
|
||||
# code = self.tableWidget_2.item(row,0).text()
|
||||
schema = self.tableWidget_2.item(row,1).text()
|
||||
table = self.tableWidget_2.item(row,2).text()#.split("?", 1)[0]
|
||||
elif dbtype == refdb:
|
||||
# code = self.tableWidget_2.item(row,1).text()
|
||||
schema = self.tableWidget_2.item(row, 2).text()
|
||||
table = self.tableWidget_2.item(row, 3).text()
|
||||
# .split("?", 1)[0]
|
||||
uri = QgsDataSourceUri()
|
||||
uri.setConnection(host, port, dbtype, 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
|
||||
|
||||
if (schema + '.' + table) in RasterList:
|
||||
uri.setDataSource(schema, table, "rast")
|
||||
uri.setKeyColumn('rid')
|
||||
@@ -661,7 +439,7 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
uri.setWkbType(QgsWkbTypes.LineString)
|
||||
elif typegeom[0] == 'MultiPoint':
|
||||
uri.setWkbType(QgsWkbTypes.MultiPoint)
|
||||
if (typegeom[0] != None and typegeom[0] != 'Polygon'):
|
||||
if (typegeom[0] is not None and typegeom[0] != 'Polygon'):
|
||||
uri.setSrid('2154')
|
||||
layer = QgsVectorLayer(uri.uri(), table, "postgres")
|
||||
# Ajout de la couche au canevas QGIS
|
||||
@@ -672,6 +450,7 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
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.StandardButton(0x00004000))
|
||||
|
||||
def combobox_custom(self):
|
||||
if dbtype == sigdb:
|
||||
self.toolButton.setEnabled(1)
|
||||
@@ -746,9 +525,16 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
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)
|
||||
|
||||
itemIcon = QTableWidgetItem()
|
||||
icon = QIcon()
|
||||
icon.addPixmap(QtGui.QPixmap(resources_path('icons', 'mIconVecteur.svg')), QIcon.Mode(0), QIcon.State(1))
|
||||
itemIcon.setIcon(icon)
|
||||
|
||||
self.tableWidget.setItem(row_count, 0, itemIcon)
|
||||
self.tableWidget.setItem(row_count, 1, DepName)
|
||||
self.tableWidget.setItem(row_count, 2, SchemaName)
|
||||
self.tableWidget.setItem(row_count, 3, TableName)
|
||||
if TableSomme == 0:
|
||||
for j in range(self.tableWidget.columnCount()):
|
||||
self.tableWidget.item(row_count, j).setBackground(QtGui.QColor(246, 185, 73, 50))
|
||||
@@ -765,7 +551,6 @@ var Travaux = L.geoJSON(TravauxJSON,{
|
||||
new_object = new_object[:-1] + ']'
|
||||
return (new_object)
|
||||
|
||||
def popup(self):
|
||||
|
||||
self.dialog = Popup() # +++ - self
|
||||
self.dialog.text_edit.show()
|
||||
# def popup(self):
|
||||
# self.dialog = Popup() # +++ - self
|
||||
# self.dialog.text_edit.show()
|
||||
|
||||
+16
-12
@@ -1,9 +1,4 @@
|
||||
import os
|
||||
plugin_dir = os.path.dirname(__file__)
|
||||
end_find = plugin_dir.rfind('\\')+1
|
||||
|
||||
NAME = plugin_dir[end_find:]
|
||||
|
||||
from qgis.gui import *
|
||||
|
||||
from qgis.core import (
|
||||
@@ -34,14 +29,18 @@ from qgis.utils import iface
|
||||
|
||||
from .tools.resources import (
|
||||
load_ui,
|
||||
resources_path,
|
||||
# resources_path,
|
||||
send_issues,
|
||||
)
|
||||
plugin_dir = os.path.dirname(__file__)
|
||||
end_find = plugin_dir.rfind('\\') + 1
|
||||
|
||||
NAME = plugin_dir[end_find:]
|
||||
|
||||
EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
|
||||
|
||||
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||
|
||||
class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||
def __init__(self, parent=None):
|
||||
_ = parent
|
||||
super().__init__()
|
||||
@@ -62,11 +61,16 @@ class CenRa_Issues(QDialog, EDITOR_CLASS):
|
||||
statu_autre = self.check_autre.isChecked()
|
||||
|
||||
statu = []
|
||||
if statu_bug == True : statu = statu + [1]
|
||||
if statu_aide == True : statu = statu + [3]
|
||||
if statu_question == True : statu = statu + [5]
|
||||
if statu_amelioration == True : statu = statu + [2]
|
||||
if statu_autre == True : statu = statu + [6]
|
||||
if statu_bug is True:
|
||||
statu = statu + [1]
|
||||
if statu_aide is True:
|
||||
statu = statu + [3]
|
||||
if statu_question is True:
|
||||
statu = statu + [5]
|
||||
if statu_amelioration is True:
|
||||
statu = statu + [2]
|
||||
if statu_autre is True:
|
||||
statu = statu + [6]
|
||||
|
||||
if len(statu) >= 1:
|
||||
import qgis
|
||||
|
||||
@@ -7,7 +7,7 @@ name=CenRa_FLUX
|
||||
qgisMinimumVersion=3.0
|
||||
supportsQt6=True
|
||||
description=Permet d'ouvrire une table dans la base PostGis
|
||||
version=3.2
|
||||
version=3.4
|
||||
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
|
||||
email=si_besoin@cen-rhonealpes.fr
|
||||
|
||||
@@ -19,7 +19,6 @@ email=si_besoin@cen-rhonealpes.fr
|
||||
|
||||
hasProcessingProvider=no
|
||||
# Uncomment the following line and add your changelog:
|
||||
# changelog= correctif de sécurité: envoi du certificat d'authentification seulement pour les couches fonciercen et drone / intégration des styles RPG geoportail / modification des noms de couches pour plus de clarté
|
||||
|
||||
# Tags are comma separated with spaces allowed
|
||||
tags=cenra, postgis, database
|
||||
@@ -33,7 +32,7 @@ icon=icon.png
|
||||
# experimental flag
|
||||
experimental=False
|
||||
|
||||
changelog=<h2>CenRa_FLUX:</h2></br><p><h3>22/07/2025 - Version 3.2: </h3> - Visualisation des format raster et vecteur dans REF.</p></br><p><h3>21/07/2025 - Version 3.1: </h3> - Bug fix pour l'ouverture de plus de 5 couches.</p></br><p><h3>19/05/2025 - Version 3.0: </h3> - Compatible PyQt5 et PyQt6.</p></br><p><h3>09/04/2025 - Version 2.9: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 2.8: </h3> - Optimisation pour le TT.</p></br><p><h3>07/04/2025 - Version 2.7: </h3> - mode debug.</p></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>
|
||||
changelog=<h2>CenRa_FLUX:</h2></br><p><h3>23/07/2025 - Version 3.4: </h3> - Ouverture raster dans la base SIG.</p></br><p><h3>23/07/2025 - Version 3.3: </h3> - Optimisation des chargement.</p></br><p><h3>22/07/2025 - Version 3.2: </h3> - Visualisation des format raster et vecteur dans REF.</p></br><p><h3>21/07/2025 - Version 3.1: </h3> - Bug fix pour l'ouverture de plus de 5 couches.</p></br><p><h3>19/05/2025 - Version 3.0: </h3> - Compatible PyQt5 et PyQt6.</p></br><p><h3>09/04/2025 - Version 2.9: </h3> - Correctif bug en TT.</p></br><p><h3>09/04/2025 - Version 2.8: </h3> - Optimisation pour le TT.</p></br><p><h3>07/04/2025 - Version 2.7: </h3> - mode debug.</p></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=False
|
||||
@@ -46,4 +45,3 @@ deprecated=False
|
||||
|
||||
# If the plugin can run on QGIS Server.
|
||||
server=False
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
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'
|
||||
|
||||
@@ -6,7 +6,7 @@ schemaname_list_ref="""SELECT schemaname,tablename 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'
|
||||
order by schemaname,tablename;"""
|
||||
schemaname_list = """(SELECT schemaname,tablename from pg_catalog.pg_tables
|
||||
where schemaname like 'trav%' or schemaname like '\_ag%' or schemaname like '\_00%' or schemaname like '\_01%' or schemaname like '\_07%' or schemaname like '\_26%' or schemaname like '\_form%' or schemaname like '\_42%' or schemaname like '\_69%' order by schemaname,tablename)
|
||||
where schemaname like 'trav%' or schemaname like '\\_ag%' or schemaname like '\\_00%' or schemaname like '\\_01%' or schemaname like '\\_07%' or schemaname like '\\_26%' or schemaname like '\\_form%' or schemaname like '\\_42%' or schemaname like '\\_69%' order by schemaname,tablename)
|
||||
UNION
|
||||
(SELECT schemaname,matviewname AS tablename FROM pg_catalog.pg_matviews order by schemaname,tablename) order by schemaname,tablename;"""
|
||||
geom = "geom"
|
||||
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
@@ -77,15 +77,17 @@ def plugin_test_data_path(*args, copy=False):
|
||||
else:
|
||||
return path
|
||||
|
||||
|
||||
def pyperclip():
|
||||
dst = dirname(dirname(__file__)) + "\\tools\\"
|
||||
if os.access('N:/', os.R_OK):
|
||||
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
|
||||
try:
|
||||
shutil.copy(src, dst)
|
||||
except:
|
||||
except NameError:
|
||||
print('404')
|
||||
|
||||
|
||||
def resources_path(*args):
|
||||
"""Get the path to our resources folder.
|
||||
|
||||
@@ -112,37 +114,39 @@ def load_ui(*args):
|
||||
ui_class, _ = uic.loadUiType(resources_path("ui", *args))
|
||||
|
||||
return ui_class
|
||||
|
||||
|
||||
def send_issues(url, titre, body, labels):
|
||||
import requests
|
||||
import json
|
||||
import os
|
||||
import qgis
|
||||
# import os
|
||||
# import qgis
|
||||
|
||||
usr = os.environ['USERNAME']
|
||||
# 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:
|
||||
except NameError:
|
||||
binar = False
|
||||
r = ''
|
||||
if binar:
|
||||
r = requests.post(url, data=json.dumps(payload), headers=headers)
|
||||
return r
|
||||
|
||||
|
||||
def maj_verif(NAME):
|
||||
import qgis
|
||||
import urllib.request
|
||||
iface = qgis.utils.iface
|
||||
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 = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
|
||||
# print(URL)
|
||||
@@ -151,7 +155,7 @@ def maj_verif(NAME):
|
||||
try:
|
||||
urllib.request.urlopen('https://google.com')
|
||||
binar = True
|
||||
except:
|
||||
except NameError:
|
||||
binar = False
|
||||
if binar:
|
||||
try:
|
||||
@@ -161,11 +165,12 @@ def maj_verif(NAME):
|
||||
version_plugin = version_web[valeur_version_web: valeur_version_web + len_version]
|
||||
if version_plugin != version:
|
||||
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30)
|
||||
except:
|
||||
except NameError:
|
||||
print("error gitea version ssl")
|
||||
else:
|
||||
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
|
||||
|
||||
|
||||
def devlog(NAME):
|
||||
import qgis
|
||||
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
|
||||
|
||||
@@ -3,7 +3,7 @@ import os.path
|
||||
from pathlib import Path
|
||||
|
||||
from qgis.PyQt import uic
|
||||
from qgis.PyQt.QtGui import QPixmap
|
||||
# from qgis.PyQt.QtGui import QPixmap
|
||||
from qgis.PyQt.QtWidgets import QDialog
|
||||
|
||||
from .tools.resources import devlog
|
||||
|
||||
+3
-3
@@ -50,9 +50,9 @@
|
||||
<tags>cenra,sicen</tags>
|
||||
</pyqgis_plugin>
|
||||
|
||||
<pyqgis_plugin name="CenRa_FLUX" version="3.2">
|
||||
<pyqgis_plugin name="CenRa_FLUX" version="3.4">
|
||||
<description>Depot pour les extensiont QGIS du CEN Rhone-Alpes, sur GitHub.</description>
|
||||
<version>3.2</version>
|
||||
<version>3.4</version>
|
||||
<qgis_minimum_version>3.16</qgis_minimum_version>
|
||||
<homepage>https://plateformesig.cenra-outils.org/</homepage>
|
||||
<file_name>CenRa_FLUX.zip</file_name>
|
||||
@@ -61,7 +61,7 @@
|
||||
<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>
|
||||
<create_date>2024-02-06</create_date>
|
||||
<update_date>2025-07-22</update_date>
|
||||
<update_date>2025-07-23</update_date>
|
||||
<experimental>False</experimental>
|
||||
<deprecated>False</deprecated>
|
||||
<tags>cenra,flux</tags>
|
||||
|
||||
Reference in New Issue
Block a user