Newer
Older
# -*- coding: utf-8 -*-
"""
***************************************************************************
---------------------
Date : 30.11.2017
Copyright : (C) 2017 by Benjamin Jakimow
Email : benjamin jakimow at geo dot hu-berlin dot de
***************************************************************************
* *
* 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. *
* *
***************************************************************************
"""
# noinspection PyPep8Naming
from timeseriesviewer.tests import initQgisApplication, createTimeSeries, testRasterFiles
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import unittest
from timeseriesviewer.mapcanvas import *
from timeseriesviewer.mapvisualization import *
from example.Images import Img_2014_05_07_LC82270652014127LGN00_BOA
def getChildElements(node):
assert isinstance(node, QDomNode)
childs = node.childNodes()
return [childs.at(i) for i in range(childs.count())]
assert isinstance(element1, QDomNode)
assert isinstance(element2, QDomNode)
tag1 = element1.nodeName()
tag2 = element2.nodeName()
if tag1 != tag2:
return False
elts1 = getChildElements(element1)
elts2 = getChildElements(element2)
if len(elts1) != len(elts2):
return False
if len(elts1) == 0:
value1 = element1.nodeValue()
value2 = element2.nodeValue()
if value1 != value2:
return False
else:
return True
else:
for e1, e2 in zip(elts1, elts2):
if not compareXML(e1, e2):
return False
return True
class testclassMapVisualization(unittest.TestCase):
"""Test resources work."""
def setUp(self):
"""Runs before each test."""
pass
def tearDown(self):
"""Runs after each test."""
pass
def test_mapcanvas(self):
files = testRasterFiles()
lyr1 = QgsRasterLayer(files[0])
m.setLayers([])
lyr = QgsRasterLayer(Img_2014_05_07_LC82270652014127LGN00_BOA)
wl, wlu = parseWavelength(lyr)
self.assertIsInstance(wl, np.ndarray)
self.assertIsInstance(wlu, str)
self.assertEqual(wlu, 'um')
refWL = [0.49, 0.56, 0.66, 0.84, 1.65, 2.2]
self.assertEqual(len(wl), len(refWL))
for wla, wlb in zip(wl, refWL):
self.assertAlmostEqual(wla, wlb)
self.assertEqual(0, bandClosestToWavelength(lyr, 'B'))
s = ""
styleFiles = file_search(os.path.dirname(__file__), 'style*.txt')
lyr = QgsRasterLayer(Img_2014_05_07_LC82270652014127LGN00_BOA)
r0 = lyr.renderer()
xml0 = rendererToXml(r0)
r0b = rendererFromXml(xml0)
self.assertTrue(type(r0), type(r0b))
rasterRenderer = [QgsMultiBandColorRenderer(r0, 3,2,1, QgsContrastEnhancement(), QgsContrastEnhancement(), QgsContrastEnhancement()),
QgsPalettedRasterRenderer(r0,0, [
QgsPalettedRasterRenderer.Class(0, QColor('black'), 'class1'),
QgsPalettedRasterRenderer.Class(1, QColor('green'), 'class2'),
] ),
QgsHillshadeRenderer(r0, 0, 0.0, 100.0),
QgsSingleBandPseudoColorRenderer(r0, 0, QgsRasterShader(0.0, 255.0)),
QgsSingleBandColorDataRenderer(r0, 0),
QgsSingleBandGrayRenderer(r0, 0)]
vectorRenderer = []#[QgsSingleSymbolRenderer(QgsLineSymbol()), QgsPointDistanceRenderer()]
for r1 in rasterRenderer + vectorRenderer:
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
xml1 = rendererToXml(r1)
self.assertIsInstance(xml1, QDomDocument)
r1b = rendererFromXml(xml1)
self.assertTrue(type(r1), type(r1b))
if isinstance(r1, QgsRasterRenderer):
self.assertIsInstance(r1b, QgsRasterRenderer)
elif isinstance(r1, QgsFeatureRenderer):
self.assertIsInstance(r1b, QgsFeatureRenderer)
xml2 = rendererToXml(r1b)
self.assertIsInstance(xml2, QDomDocument)
self.assertTrue(xml1.toString() == xml2.toString())
rClone = cloneRenderer(r1)
self.assertTrue(type(r1), type(rClone))
xmlClone = rendererToXml(rClone)
self.assertIsInstance(xmlClone, QDomDocument)
similar = compareXML(xml1.firstChild(), xml2.firstChild())
self.assertTrue(similar)
for path in styleFiles:
with open(path, encoding='utf8') as f:
xml = ''.join(f.readlines())
renderer = rendererFromXml(xml)
self.assertTrue(renderer != None)
def test_maprendersettings(self):
from example.Images import Img_2014_01_15_LC82270652014015LGN00_BOA
from timeseriesviewer.timeseries import TimeSeries
TS = TimeSeries()
TS.addSources([Img_2014_01_15_LC82270652014015LGN00_BOA])
w.show()
lyr = QgsRasterLayer(Img_2014_01_15_LC82270652014015LGN00_BOA)
doc = QDomDocument()
err = ''
lyr.exportNamedStyle(doc)
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
xml0 = doc.toString()
self.assertEqual(err, '')
xml = rendererToXml(lyr.renderer())
self.assertIsInstance(xml, QDomDocument)
xml = xml.toString()
self.assertEqual(xml0, xml)
r0 = lyr.renderer()
r = w.rasterRenderer()
self.assertIsInstance(r, QgsMultiBandColorRenderer)
r2 = QgsSingleBandGrayRenderer(r, 2)
w.setRasterRenderer(r2)
self.assertIsInstance(w.currentRenderWidget(), QgsSingleBandGrayRendererWidget)
r2b = w.rasterRenderer()
self.assertIsInstance(r2b, QgsSingleBandGrayRenderer)
xml2, xml2b = rendererToXml(r2).toString(), rendererToXml(r2b).toString()
#self.assertEqual(xml2, xml2b)
r3 = QgsSingleBandPseudoColorRenderer(r,0)
r3.setClassificationMin(0)
r3.setClassificationMax(100)
w.setRasterRenderer(r3)
self.assertIsInstance(w.currentRenderWidget(), QgsSingleBandPseudoColorRendererWidget)
r3b = w.rasterRenderer()
self.assertIsInstance(r3b, QgsSingleBandPseudoColorRenderer)
xml3, xml3b = rendererToXml(r3).toString(), rendererToXml(r3b).toString()
#self.assertEqual(xml3, xml3b)
s = ""
def test_spatialTemporalVisualization(self):
from timeseriesviewer.main import TimeSeriesViewer
TSV = TimeSeriesViewer()
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
TSV.show()
SV = TSV.spatialTemporalVis
self.assertIsInstance(SV, SpatialTemporalVisualization)
SV.timedCanvasRefresh()
withLayers = []
empty = []
extent = None
for mc in SV.mapCanvases():
self.assertIsInstance(mc, MapCanvas)
self.assertIsInstance(mc.spatialExtent(), SpatialExtent)
if extent == None:
extent = mc.spatialExtent()
else:
self.assertTrue(mc.spatialExtent() == extent)
if len(mc.layers()) == 0:
empty.append(mc)
else:
withLayers.append(mc)
self.assertTrue(len(withLayers) > 0)
self.assertTrue(len(empty) > 0)
#shift spatial extent
extent2 = extent.setCenter(SpatialPoint(extent.crs(), extent.center().x()-100, extent.center().y()))
SV.setSpatialExtent(extent2)
SV.timedCanvasRefresh()
for mc in SV.mapCanvases():
self.assertIsInstance(mc, MapCanvas)
if mc.isVisibleToViewport():
self.assertTrue(mc.spatialExtent() == extent2)
extent3 = extent.setCenter(SpatialPoint(extent.crs(), extent.center().x() + 100, extent.center().y()))
canvas = SV.mapCanvases()[0]
self.assertIsInstance(canvas, MapCanvas)
canvas.setSpatialExtent(extent3)
SV.timedCanvasRefresh()
for mc in SV.mapCanvases():
if mc.isVisibleToViewport():
self.assertTrue(mc.spatialExtent() == extent3)
for canvas in SV.mapCanvases():
self.assertIsInstance(canvas, MapCanvas)
menu = canvas.contextMenu()
self.assertIsInstance(menu, QMenu)
if canvas.isVisibleToViewport():
for action in menu.findChildren(QAction):
self.assertIsInstance(action, QAction)
text = action.text()
if text in ['', 'Style', 'PNG', 'JPEG']:
# skip menu / blocking dialog options
continue
else:
print('Test QAction "{}"'.format(action.text()))
action.trigger()
break
s = ""
if __name__ == "__main__":
unittest.main()