Skip to content

Commit

Permalink
Merge pull request #10 from Septima/komfilter
Browse files Browse the repository at this point in the history
Komfilter merged with master
  • Loading branch information
Telling committed May 13, 2015
2 parents 9e21b4a + fcf4d24 commit 379bd8d
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 85 deletions.
143 changes: 78 additions & 65 deletions src/geosearch_dk/searchbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
* *
***************************************************************************/
"""
BASEURL = "http://kortforsyningen.kms.dk/Geosearch?service=GEO&resources={resources}&limit={limit}&login={login}&password={password}&callback={callback}&search="
BASEURL = "http://kortforsyningen.kms.dk/Geosearch?service=GEO&resources={resources}&area={area}&limit={limit}&login={login}&password={password}&callback={callback}&search="
RESOURCES = "Adresser,Stednavne,Postdistrikter,Matrikelnumre,Kommuner,Opstillingskredse,Politikredse,Regioner,Retskredse"

from PyQt4.QtGui import *
Expand Down Expand Up @@ -77,24 +77,28 @@ def readconfig(self):
'resources': str(s.value(k + "/resources", RESOURCES, type=str)),
'maxresults': s.value(k + "/maxresults", 25, type=int),
'callback': str(s.value(k + "/callback", "callback", type=str)),
'muncodes': s.value(k + "/muncodes", [])
}

def updateconfig(self):
s = QSettings()
k = __package__
s.setValue(k + "/username", self.config['username'])
s.setValue(k + "/password", self.config['password'])
s.setValue(k + "/resources", self.config['resources'])
s.setValue(k + "/maxresults", self.config['maxresults'])
s.setValue(k + "/callback", self.config['callback'])
s.setValue(k + "/username", self.config['username'])
s.setValue(k + "/password", self.config['password'])
s.setValue(k + "/resources", self.config['resources'])
s.setValue(k + "/maxresults", self.config['maxresults'])
s.setValue(k + "/callback", self.config['callback'])
s.setValue(k + "/muncodes", self.config['muncodes'])

def geturl(self, searchterm):
# TODO: prepare what can be prepared
url = BASEURL.format(
resources=self.config['resources'],
limit=self.config['maxresults'],
login=self.config['username'],
password=self.config['password'],
callback=self.config['callback']
callback=self.config['callback'],
area=','.join(['muncode0'+str(k) for k in self.config['muncodes']])
)
url += searchterm
return QUrl(url)
Expand All @@ -110,105 +114,110 @@ def parseresponse(self, response):
'Invalid JSON response from server: ' + result, __package__
)
# Check if we have an auth error
if 'User not found' in response or 'User not authenticated' in response:
if 'User not found' in response or \
'User not authenticated' in response:
QMessageBox.warning(
None,
'Bruger afvist af Kortforsyningen',
'Manglende eller ukorrekt brugernavn og password til Kortforsyningen.\n\n'
'Manglende eller ukorrekt brugernavn og password \
til Kortforsyningen.\n\n'
+ 'Kortforsyningen svarede:\n'
+ str(response)
)
self.show_settings_dialog()
return None

if not obj.has_key('status'):
QgsMessageLog.logMessage('Unexpected result from server: ' + result, __package__)
if 'status' not in obj:
QgsMessageLog.logMessage(
'Unexpected result from server: ' + result, __package__
)
return None

if not obj['status'] == 'OK':
QgsMessageLog.logMessage('Server reported an error: ' + obj['message'], __package__)
QgsMessageLog.logMessage(
'Server reported an error: ' + obj['message'], __package__
)
return None

data = obj['data']

# Make tuple with ("text", object) for each result
return [(e['presentationString'], e) for e in data ]
return [(e['presentationString'], e) for e in data]

def setupCrsTransform(self):
if not QgsCoordinateReferenceSystem is None:
srcCrs = QgsCoordinateReferenceSystem( 25832, QgsCoordinateReferenceSystem.EpsgCrsId )
dstCrs = qgisutils.getCurrentCrs( self.qgisIface )
#print "CRS: ", dstCrs.toWkt()
self.crsTransform = QgsCoordinateTransform( srcCrs, dstCrs )
if QgsCoordinateReferenceSystem is not None:
srcCrs = QgsCoordinateReferenceSystem(
25832, QgsCoordinateReferenceSystem.EpsgCrsId
)
dstCrs = qgisutils.getCurrentCrs(self.qgisIface)
self.crsTransform = QgsCoordinateTransform(srcCrs, dstCrs)

def setMarkerGeom( self, geom ):
def setMarkerGeom(self, geom):
# Show geometry
self.clearMarkerGeom()

if geom.wkbType() == QGis.WKBPoint:
m = QgsVertexMarker( self.qgisIface.mapCanvas() )
m.setCenter( geom.asPoint() )
## else:
## m = QgsRubberBand(self.qgisIface.mapCanvas(), QGis.Line)
## m.setToGeometry( geom , None)
## m.setColor(QColor(255,0,0))
m = QgsVertexMarker(self.qgisIface.mapCanvas())
m.setCenter(geom.asPoint())
elif geom.wkbType() == QGis.WKBLineString:
m = QgsRubberBand(self.qgisIface.mapCanvas(), False) # False = not a polygon
m.setToGeometry( geom , None)
m = QgsRubberBand(self.qgisIface.mapCanvas(), False) # not polygon
m.setToGeometry(geom, None)
elif geom.wkbType() == QGis.WKBPolygon:
m = QgsRubberBand(self.qgisIface.mapCanvas(), False)
m.setToGeometry( QgsGeometry.fromPolyline(geom.asPolygon()[0] ) , None)
m.setToGeometry(
QgsGeometry.fromPolyline(geom.asPolygon()[0]),
None
)

m.setColor(QColor(255,0,0))
m.setColor(QColor(255, 0, 0))
self.marker = m

def clearMarkerGeom( self ):
if not self.marker is None:
self.qgisIface.mapCanvas().scene().removeItem( self.marker )
def clearMarkerGeom(self):
if self.marker is not None:
self.qgisIface.mapCanvas().scene().removeItem(self.marker)
self.marker = None

def clear( self ):
def clear(self):
self.clearMarkerGeom()
self.ui.searchEdit.clear()

def doSearch(self):
self.completion.preventSuggest()

o = self.completion.selectedObject
#print o
# print o
if not o:
return

# Create a QGIS geom to represent object
geom = None
if o.has_key('geometryWkt'):
if 'geometryWkt' in o:
wkt = o['geometryWkt']
# Fix invalid wkt
if wkt.startswith('BOX'):
wkt = 'LINESTRING' + wkt[3:]
geom = QgsGeometry.fromRect( QgsGeometry.fromWkt( wkt ).boundingBox() )
geom = QgsGeometry.fromRect(
QgsGeometry.fromWkt(wkt).boundingBox()
)
else:
geom = QgsGeometry.fromWkt( wkt )
elif o.has_key('xMin'):
geom = QgsGeometry.fromRect( QgsRectangle( o['xMin'], o['yMin'], o['xMax'], o['yMax']) )
geom = QgsGeometry.fromWkt(wkt)
elif 'xMin' in o:
geom = QgsGeometry.fromRect(
QgsRectangle(o['xMin'], o['yMin'], o['xMax'], o['yMax'])
)
else:
geom = QgsGeometry.fromPoint(QgsPoint(o['x'] , o['y']))
geom = QgsGeometry.fromPoint(QgsPoint(o['x'], o['y']))

# Zoom to feature
bufgeom = geom.buffer(200.0, 2)
#if self.qgisIface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
bufgeom.transform(self.crsTransform)
rect= bufgeom.boundingBox()
#print "BBOX: ", rect.toString()
mc=self.qgisIface.mapCanvas()
mc.setExtent( rect )
rect = bufgeom.boundingBox()
mc = self.qgisIface.mapCanvas()
mc.setExtent(rect)

# Mark the spot
#print "Geom: ", geom.exportToWkt()
#if self.qgisIface.mapCanvas().mapRenderer().hasCrsTransformEnabled():
geom.transform( self.crsTransform )
#print"Transformed geom: ", geom.exportToWkt()
self.setMarkerGeom( geom )
geom.transform(self.crsTransform)
self.setMarkerGeom(geom)

mc.refresh()

Expand All @@ -217,6 +226,9 @@ def show_settings_dialog(self):
dlg = settingsdialog.SettingsDialog()
dlg.loginLineEdit.setText(self.config['username'])
dlg.passwordLineEdit.setText(self.config['password'])
dlg.kommunekoderLineEdit.setText(
','.join(map(str, self.config['muncodes']))
)
# show the dialog
dlg.show()
result = dlg.exec_()
Expand All @@ -226,20 +238,25 @@ def show_settings_dialog(self):
# save settings
self.config['username'] = str(dlg.loginLineEdit.text())
self.config['password'] = str(dlg.passwordLineEdit.text())
self.config['muncodes'] = [int(k) for k in dlg.kommunekoderLineEdit.text().split(',') if not k.strip() == '']
self.updateconfig()

def show_about_dialog(self):
infoString = QCoreApplication.translate('Geosearch DK',
u"Geosearch DK lader brugeren zoome til navngivne steder i Danmark.<br />"
u"Pluginet benytter tjenesten 'geosearch' fra <a href=\"http://kortforsyningen.dk/\">kortforsyningen.dk</a>"
u" og kræver derfor et gyldigt login til denne tjeneste.<br />"
u"Pluginets webside: <a href=\"http://github.com/Septima/qgis-geosearch\">github.com/Septima/qgis-geosearch</a><br />"
u"Udviklet af: Septima<br />"
u"Mail: <a href=\"mailto:kontakt@septima.dk\">kontakt@septima.dk</a><br />"
u"Web: <a href=\"http://www.septima.dk\">www.septima.dk</a>\n")
QMessageBox.information(self.qgisIface.mainWindow(), "Om Geosearch DK",infoString)

def unload( self ):
infoString = QCoreApplication.translate(
'Geosearch DK',
u"Geosearch DK lader brugeren zoome til navngivne steder i Danmark.<br />"
u"Pluginet benytter tjenesten 'geosearch' fra <a href=\"http://kortforsyningen.dk/\">kortforsyningen.dk</a>"
u" og kræver derfor et gyldigt login til denne tjeneste.<br />"
u"Pluginets webside: <a href=\"http://github.com/Septima/qgis-geosearch\">github.com/Septima/qgis-geosearch</a><br />"
u"Udviklet af: Septima<br />"
u"Mail: <a href=\"mailto:kontakt@septima.dk\">kontakt@septima.dk</a><br />"
u"Web: <a href=\"http://www.septima.dk\">www.septima.dk</a>\n"
)
QMessageBox.information(
self.qgisIface.mainWindow(), "Om Geosearch DK", infoString
)

def unload(self):
self.completion.unload()
self.clearMarkerGeom()

Expand All @@ -248,10 +265,6 @@ def unload( self ):
app = QApplication(sys.argv)

suggest = SearchBox()
#suggest.setWindowFlags(Qt.FramelessWindowHint)
suggest.show()

#charm = DragMoveCharm()
#charm.activateOn(suggest)

sys.exit(app.exec_())
47 changes: 28 additions & 19 deletions src/geosearch_dk/septimageosearch.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@

from searchbox import SearchBox

#import win32api


class SeptimaGeoSearch:

Expand All @@ -39,10 +37,10 @@ def __init__(self, iface):

# initialize plugin directory
self.plugin_dir = QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "/python/plugins/" + __package__

# config
self.config = QSettings()

# initialize locale
localePath = ""
locale = self.config.value("locale/userLocale")[0:2]
Expand All @@ -61,27 +59,38 @@ def initGui(self):
# create the widget to display information
self.searchwidget = SearchBox(self.iface)
# create the dockwidget with the correct parent and add the valuewidget
self.searchdockwidget=QDockWidget("Geosearch DK" , self.iface.mainWindow() )
self.searchdockwidget = QDockWidget(
"Geosearch DK", self.iface.mainWindow()
)
self.searchdockwidget.setObjectName("Geosearch DK")
self.searchdockwidget.setWidget(self.searchwidget)
# add the dockwidget to iface
self.iface.addDockWidget(Qt.TopDockWidgetArea,self.searchdockwidget) # & Qt.LeftDockWidgetArea

self.iface.addDockWidget(
Qt.TopDockWidgetArea, self.searchdockwidget
)

# Menu items
self.configAction=QAction(QIcon(), QCoreApplication.translate('Geosearch DK', "&Indstillinger"), self.iface.mainWindow())
self.aboutAction=QAction(QIcon(), QCoreApplication.translate('Geosearch DK', "&Om pluginet"), self.iface.mainWindow())

#QObject.connect(self.configAction, SIGNAL("activated()"), self.searchwidget.show_settings_dialog)
self.configAction.triggered.connect( self.searchwidget.show_settings_dialog )
#QObject.connect(self.aboutAction, SIGNAL("activated()"), self.searchwidget.show_about_dialog)
self.aboutAction.triggered.connect( self.searchwidget.show_about_dialog )

self.configAction = QAction(
QIcon(),
QCoreApplication.translate('Geosearch DK', "&Indstillinger"),
self.iface.mainWindow()
)
self.aboutAction = QAction(
QIcon(),
QCoreApplication.translate('Geosearch DK', "&Om pluginet"),
self.iface.mainWindow()
)

self.configAction.triggered.connect(
self.searchwidget.show_settings_dialog
)
self.aboutAction.triggered.connect(self.searchwidget.show_about_dialog)

self.iface.addPluginToMenu("Geosearch DK", self.configAction)
self.iface.addPluginToMenu("Geosearch DK", self.aboutAction)

def unload(self):
#win32api.MessageBox(0, 'unload', 'title')
self.searchwidget.unload() # try to avoid processing events, when QGIS is closing
self.iface.removePluginMenu("Geosearch DK", self.configAction )
self.iface.removePluginMenu("Geosearch DK", self.aboutAction )
self.iface.removeDockWidget( self.searchdockwidget )
self.iface.removePluginMenu("Geosearch DK", self.configAction)
self.iface.removePluginMenu("Geosearch DK", self.aboutAction)
self.iface.removeDockWidget(self.searchdockwidget)
10 changes: 9 additions & 1 deletion src/geosearch_dk/settingsdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,20 @@
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import uic
#from ui_settings import Ui_Dialog

FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'ui_settings.ui'))

MUNCODE_REGEX = '[0-9,]*'


class SettingsDialog (QDialog, FORM_CLASS):
def __init__(self):
QDialog.__init__(self)
self.setupUi(self)

regex = QRegExp(MUNCODE_REGEX, Qt.CaseInsensitive)
self.muncodeValidator = QRegExpValidator(regex)
self.kommunekoderLineEdit.setValidator(
self.muncodeValidator
)
Loading

0 comments on commit 379bd8d

Please sign in to comment.