Newer
Older
# coding=utf-8
"""Tests QGIS plugin init."""
import os
import unittest
import example
from osgeo import gdal, ogr, osr
from timeseriesviewer.utils import file_search, TestObjects
from timeseriesviewer.timeseries import *
from timeseriesviewertesting import initQgisApplication
app = initQgisApplication()
class TestInit(unittest.TestCase):
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
def createTestDatasets(self):
vsiDir = '/vsimem/tmp'
from timeseriesviewer.temporalprofiles2d import date2num
ns = 50
nl = 100
r1 = np.arange('2000-01-01', '2005-06-14', step=np.timedelta64(16, 'D'), dtype=np.datetime64)
r2 = np.arange('2000-01-01', '2005-06-14', step=np.timedelta64(8, 'D'), dtype=np.datetime64)
drv = gdal.GetDriverByName('ENVI')
crs = osr.SpatialReference()
crs.ImportFromEPSG(32633)
assert isinstance(drv, gdal.Driver)
datasets = []
for i, r in enumerate([r1, r2]):
p = '{}tmpstack{}.bsq'.format(vsiDir, i+1)
ds = drv.Create(p, ns, nl, len(r), eType=gdal.GDT_Float32)
assert isinstance(ds, gdal.Dataset)
ds.SetProjection(crs.ExportToWkt())
dateString = ','.join([str(d) for d in r])
dateString = '{{{}}}'.format(dateString)
ds.SetMetadataItem('wavelength', dateString, 'ENVI')
for b, date in enumerate(r):
decimalYear = date2num(date)
band = ds.GetRasterBand(b+1)
assert isinstance(band, gdal.Band)
band.Fill(decimalYear)
ds.FlushCache()
datasets.append(p)
return datasets
def test_sensorids(self):
configs = [(6, 30,30, [1,2,3,4,5,6], None),
(6, 10, 20, [1, 2, 3, 4, 5, 6], 'index'),
(6, 30, 30, [1, 2, 3, 323 ,23., 3.4], 'Micrometers'),
(6, 30, 30, None, None),
]
for conf in configs:
sid = sensorID(*conf)
self.assertIsInstance(sid, str)
c2 = sensorIDtoProperties(sid)
self.assertListEqual(list(conf),list(c2))
def test_timeseriesdatum(self):
file = example.Images.Img_2014_03_20_LC82270652014079LGN00_BOA
tss = TimeSeriesSource.create(file)
sensor = SensorInstrument(tss.sid())
tsd = TimeSeriesDatum(None, tss.date(), sensor)
self.assertIsInstance(tsd, TimeSeriesDatum)
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
self.assertEqual(tsd.sensor(), sensor)
self.assertEqual(len(tsd), 0)
tsd.addSource(tss)
self.assertEqual(len(tsd), 1)
def test_timeseriessource(self):
wcs = r'dpiMode=7&identifier=BGS_EMODNET_CentralMed-MCol&url=http://194.66.252.155/cgi-bin/BGS_EMODnet_bathymetry/ows?VERSION%3D1.1.0%26coverage%3DBGS_EMODNET_CentralMed-MCol'
if False:
webSources = [QgsRasterLayer(wcs, 'test', 'wcs')]
for src in webSources:
tss = TimeSeriesSource.create(src)
self.assertIsInstance(tss, TimeSeriesSource)
sources = [example.Images.Img_2014_03_20_LC82270652014079LGN00_BOA,
gdal.Open(example.Images.Img_2014_03_20_LC82270652014079LGN00_BOA),
QgsRasterLayer(example.Images.Img_2014_03_20_LC82270652014079LGN00_BOA)
]
ref = None
for src in sources:
tss = TimeSeriesSource.create(src)
self.assertIsInstance(tss.spatialExtent(), SpatialExtent)
self.assertIsInstance(tss, TimeSeriesSource)
if not isinstance(ref, TimeSeriesSource):
ref = tss
else:
self.assertTrue(ref == tss)
self.assertTrue(ref.sid() == tss.sid())
def test_multisource_tsd(self):
p1 = TestObjects.inMemoryImage()
p2 = TestObjects.inMemoryImage()
sources = [p1, p2]
for p in sources:
p.SetMetadataItem('acquisition_date', '2014-04-01')
s = ""
tssList = [TimeSeriesSource.create(p) for p in sources]
TS = TimeSeries()
self.assertTrue(len(TS) == 0)
TS.addSources(tssList)
self.assertTrue(len(TS) == 1)
tsd = TS[0]
self.assertIsInstance(tsd, TimeSeriesDatum)
self.assertTrue(len(tsd.sources()) == 2)
def test_timeseries(self):
files = list(file_search(os.path.dirname(example.__file__), '*.tif', recursive=True))
removedDates = []
addedSensors = []
removedSensors = []
sourcesChanged = []
TS = TimeSeries()
TS.sigTimeSeriesDatesAdded.connect(lambda dates: addedDates.extend(dates))
TS.sigTimeSeriesDatesRemoved.connect(lambda dates: removedDates.extend(dates))
TS.sigSourcesChanged.connect(lambda tsd: sourcesChanged.append(tsd))
TS.sigSensorAdded.connect(lambda sensor: addedSensors.append(sensor))
TS.sigSensorRemoved.connect(lambda sensor:removedSensors.append(sensor))
TS.addSources(files)
counts = dict()
for tsd in TS:
self.assertIsInstance(tsd, TimeSeriesDatum)
sensor = tsd.sensor()
if sensor not in counts.keys():
counts[sensor] = 0
counts[sensor] = counts[sensor] + 1
self.assertEqual(len(files), len(TS))
self.assertEqual(len(addedDates), len(TS))
self.assertEqual(len(removedDates), 0)
self.assertTrue(len(addedSensors) == 2)
self.assertIsInstance(TS.maxSpatialExtent(), SpatialExtent)
sensor = TS.sensors()[0]
self.assertIsInstance(sensor, SensorInstrument)
self.assertTrue(sensor == TS.sensor(sensor.id()))
TS.removeSensor(sensor)
self.assertEqual(counts[sensor], len(removedDates))
extent = TS.maxSpatialExtent()
self.assertIsInstance(extent, SpatialExtent)
def test_sensors(self):
tss = TimeSeriesSource.create(example.Images.Img_2014_01_15_LC82270652014015LGN00_BOA)
self.assertIsInstance(tss, TimeSeriesSource)
sensor = SensorInstrument(tss.sid())
sensor2 = SensorInstrument(tss.sid())
self.assertIsInstance(sensor, SensorInstrument)
self.assertTrue(sensor == sensor2)
sensor2.setName('foobar')
self.assertTrue(sensor == sensor2)
self.assertIsInstance(sensor2.id(), str)
lyr = sensor.mockupLayer()
self.assertIsInstance(lyr, QgsRasterLayer)
def test_datematching(self):
pass
if __name__ == '__main__':
unittest.main()