-
Notifications
You must be signed in to change notification settings - Fork 0
/
vmmQryDlg.py
104 lines (87 loc) · 4.31 KB
/
vmmQryDlg.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# -*- coding: utf-8 -*-
import sys, os, webbrowser
from qgis.gui import QgsMessageBar
from PyQt4 import QtGui, QtCore
from pgHelper import pgHelper
from geometryhelper import geometryHelper
from ui_vmmQry_baseDlg import Ui_vmmQryDlg
from settings import settings
class vmmQryDialog(QtGui.QDialog):
def __init__(self, iface, parent=None):
QtGui.QDialog.__init__(self, None)
self.setWindowFlags( self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint )
# initialize locale
locale = QtCore.QSettings().value("locale/userLocale", "en")[0:2]
if not locale in ['en','nl'] : locale = 'en'
localePath = os.path.join(os.path.dirname(__file__), 'i18n', '{}.qm'.format(locale))
if os.path.exists(localePath):
self.translator = QtCore.QTranslator()
self.translator.load(localePath)
QtCore.QCoreApplication.installTranslator(self.translator)
self.iface = iface
self.helpUrl = "https://github.com/milieuinfo/Spatial-Subset-Query-Tool/blob/master/README_NL.md" if locale == 'nl' \
else "https://github.com/milieuinfo/Spatial-Subset-Query-Tool/blob/master/README.md"
self._initGui()
def _initGui(self):
self.ui = Ui_vmmQryDlg()
self.ui.setupUi(self)
self.setup()
self.gh = geometryHelper(self.iface)
#setup a message bar
self.bar = QgsMessageBar()
self.bar.setSizePolicy( QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed )
self.ui.verticalLayout.addWidget(self.bar)
#events
self.ui.addLayerBtn.clicked.connect(self.addLayerClick)
self.ui.button_box.helpRequested.connect(self.help)
def setup(self):
self.firstShow = True
self.pg = None
self.s = settings()
#overwrite
def show(self):
QtGui.QDialog.show(self)
self.setWindowModality(0)
if self.firstShow:
if not self.s.database : return
if not self.s.dbuser : return
if not self.s.dbhost : return
if not self.s.polyLayer : return
if not self.s.polyLayerName : return
if not self.s.schema : return
if not self.s.dbpassw :
passw, ok = QtGui.QInputDialog.getText( self, "Password",
"Enter pasword for user {}".format(self.s.dbuser), QtGui.QLineEdit.Password )
if ok: self.s.dbpassw = passw
else: return
self.ui.gemeenteCbx.clear()
self.ui.lyrList.clear()
try:
self.pg = pgHelper(
database=self.s.database , user=self.s.dbuser , passw=self.s.dbpassw, host=self.s.dbhost)
except:
self.bar.pushMessage( "Error", QtCore.QCoreApplication.translate('vmmQry',
"Kan niet verbinden met database, is deze correct ingesteld?"), level=QgsMessageBar.CRITICAL )
return
subsets = self.pg.listField( self.s.polyLayer , self.s.polyLayerName, self.s.schema)
lagen = self.pg.listGeoLayers(self.s.schema)
self.ui.gemeenteCbx.addItems([unicode(n) for n in subsets])
self.ui.gemeenteCbx.insertItem(0,'')
self.ui.gemeenteCbx.setCurrentIndex(0)
self.ui.lyrList.addItems(lagen)
self.firstShow = False
def help(self):
webbrowser.open_new_tab(self.helpUrl)
def addLayerClick(self):
gemeente = self.ui.gemeenteCbx.currentText()
selItems = [n.text() for n in self.ui.lyrList.selectedItems()]
for layer in selItems:
targetGeom = self.pg.getGeomName( layer , self.s.schema )
sql = ""
if self.ui.bboxSelBtn.isChecked() and gemeente <> '':
sql= self.pg.spatialWhereClause( targetGeom, self.s.polyLayerGeom , self.s.polyLayer,
"\"{0}\" = '{1}'".format(self.s.polyLayerName , gemeente ), bboxOnly=True, schema= self.s.schema )
elif self.ui.borderSelBtn.isChecked() and gemeente <> '':
sql= self.pg.spatialWhereClause( targetGeom, self.s.polyLayerGeom , self.s.polyLayer,
"\"{0}\" = '{1}'".format(self.s.polyLayerName , gemeente ), bboxOnly=False, schema= self.s.schema )
self.pg.loadPostGISLayer(layer, targetGeom, sql, schema= self.s.schema )