-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsparql_for_qgis_dialog.py
117 lines (86 loc) · 3.76 KB
/
sparql_for_qgis_dialog.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
104
105
106
107
108
109
110
111
112
113
114
# -*- coding: utf-8 -*-
"""
/***************************************************************************
SparqlForQGISDialog
A QGIS plugin
Display and update data from Sparql queries
-------------------
begin : 2015-06-22
git sha : $Format:%H$
copyright : (C) 2015 by Olivier Dalang
email : [email protected]
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
"""
import os
from PyQt4 import QtGui, uic
from SparqlLayer import SparqlLayer
class SparqlForQGISDialog(QtGui.QDialog):
count = 0
defaultDisplaySparql = '''PREFIX geo: <http://www.opengis.net/ont/geosparql#>
SELECT ?subject
?geom
?class
WHERE {
?subject geo:geometry ?geom .
?subject a ?class .
}'''
defaultUpdateSparql = '''PREFIX geo: <http://www.opengis.net/ont/geosparql#>
WITH <http://dhlab.epfl.ch/vtm/>
DELETE {
?subject geo:geometry ?geom
}
INSERT {
?subject geo:geometry !newgeom
}
WHERE {
?subject geo:geometry ?geom
FILTER (
?subject=!subject
)
}'''
def __init__(self, main):
super(SparqlForQGISDialog, self).__init__()
self.main = main
uic.loadUi(os.path.join( os.path.dirname(__file__), 'sparql_for_qgis_dialog_base.ui'), self)
self.createButton.pressed.connect( self.createLayer )
self.deleteButton.pressed.connect( self.deleteLayer )
self.updateButton.pressed.connect( self.updateLayer )
self.listWidget.currentRowChanged.connect( self.rowSelected )
self.refreshList()
def refreshList(self):
self.listWidget.clear()
for layer in self.main.layers:
self.listWidget.addItem( layer.name + ('*' if layer.needsUpdate else '') )
def createLayer(self):
SparqlForQGISDialog.count += 1
self.main.layers.append( SparqlLayer( self.main, 'Sparql Layer '+str(SparqlForQGISDialog.count), 'http://dhlabpc3.epfl.ch:8890/sparql/', self.defaultDisplaySparql, self.defaultUpdateSparql ) )
self.refreshList()
self.listWidget.setCurrentRow( self.listWidget.count() - 1 )
def deleteLayer(self):
row = self.listWidget.currentRow()
layer = self.main.layers[ row ]
layer.unload()
self.refreshList()
def rowSelected(self, row):
layer = self.main.layers[row]
self.nameLineEdit.setText( layer.name )
self.urlLineEdit.setText( layer.url )
self.displaySparqlPlainTextEdit.setPlainText( layer.displaySparql )
self.updateSparqlPlainTextEdit.setPlainText( layer.updateSparql )
def updateLayer(self):
row = self.listWidget.currentRow()
layer = self.main.layers[ row ]
layer.name = self.nameLineEdit.text()
layer.url = self.urlLineEdit.text()
layer.displaySparql = self.displaySparqlPlainTextEdit.toPlainText()
layer.updateSparql = self.updateSparqlPlainTextEdit.toPlainText()
layer.needsUpdate = True
self.refreshList()