Skip to content
Snippets Groups Projects
screenshots.py 8.12 KiB
Newer Older
from qgis.core import *
from qgis.gui import *
from qgis.PyQt.QtWidgets import *
from qgis.PyQt.QtCore import *
from qgis.PyQt.QtGui import *
Benjamin Jakimow's avatar
Benjamin Jakimow committed
from timeseriesviewer.utils import *
from timeseriesviewer.main import TimeSeriesViewer
from timeseriesviewer.mapvisualization import *
from timeseriesviewer.profilevisualization import *
from timeseriesviewer.timeseries import *
Benjamin Jakimow's avatar
Benjamin Jakimow committed
from timeseriesviewer import DIR_REPO, DIR_QGIS_RESOURCES

#DIR_SCREENSHOTS = jp(DIR_REPO, 'screenshots')
DIR_SCREENSHOTS = jp(DIR_REPO, 'doc/source/img/autogenerated')

Benjamin Jakimow's avatar
Benjamin Jakimow committed
os.makedirs(DIR_SCREENSHOTS, exist_ok=True)

app = initQgisApplication(qgisResourceDir=DIR_QGIS_RESOURCES)

TSV = TimeSeriesViewer(None)
TSV.show()
#set up example settings
from example.Images import Img_2014_04_21_LC82270652014111LGN00_BOA, re_2014_06_25
Benjamin Jakimow's avatar
Benjamin Jakimow committed
if False:
    TSV.loadExampleTimeSeries()
    center = TSV.TS.getMaxSpatialExtent().spatialCenter()
else:
    dirTestData = r'F:\TSData'
    files = file_search(dirTestData, re.compile('\.tif$'))
    assert len(files) > 0
    TSV.loadImageFiles(files)

    dirTestData = r'Y:\Pleiades'
    files = file_search(dirTestData, re.compile('\.JP2$'), recursive=True)
    assert len(files) > 0
    TSV.loadImageFiles(files)

Benjamin Jakimow's avatar
Benjamin Jakimow committed
    center = TSV.TS.getMaxSpatialExtent().spatialCenter()
    #x = 682430.2823150387
    #y = -751432.9531412527
    x = 682459.8471361337
    y = -751853.6488464196
Benjamin Jakimow's avatar
Benjamin Jakimow committed
    center = SpatialPoint(center.crs(), x, y)

dx = 500
extent = SpatialExtent(center.crs(), center.x()-dx, center.y()-dx, center.x()+dx, center.y() + dx)
extent = SpatialExtent(center.crs(), 681519.46197612234391272, -752814.23602663306519389, 683369.92926584207452834, -750963.76873691333457828)
Benjamin Jakimow's avatar
Benjamin Jakimow committed
date = np.datetime64('2014-08-01')
TSV.spatialTemporalVis.setSpatialExtent(extent)
dt = np.asarray([np.abs(tsd.date - date) for tsd in TSV.TS])
i = np.argmin(dt)
TSV.spatialTemporalVis.navigateToTSD(TSV.TS[i])

#TS.loadImageFiles([Img_2014_04_21_LC82270652014111LGN00_BOA, re_2014_06_25])
toHide = ['2014-07-18', '2014-08-08', '2014-08-10', '2014-08-23', '2014-08-25', '2014-08-03', '2014-07-26', '2014-07-10']
for tsd in TSV.TS:
    assert isinstance(tsd, TimeSeriesDatum)
    if str(tsd.date) in toHide:
        tsd.setVisibility(False)
sensorLS = None
sensorRE = None
sensorPL = None
for sensor in TSV.TS.sensors():
    assert isinstance(sensor, SensorInstrument)

    if sensor.id() == '6b30.0m0.49;0.56;0.66;0.84;1.65;2.2um':
        sensor.setName('Landsat')
        sensorLS = sensor
    if sensor.id() == '5b5.0m':
        sensor.setName('RapidEye')
        sensorRE = sensor
        continue
    if sensor.id() == '4b0.5m':
        sensor.setName('Pléiades')
        sensorPL = sensor
        continue

assert isinstance(sensorLS, SensorInstrument)
assert isinstance(sensorRE, SensorInstrument)


#add second MapView
mv1 = TSV.mapViews()[0]
mv2 = TSV.mapViews()[1]
assert isinstance(mv1, MapView)
assert isinstance(mv2, MapView)
mv1.setTitle('True Color')
mv2.setTitle('Short-Wave IR')
#set True Color Bands
for sensor in [sensorLS, sensorRE, sensorPL]:
    rendering = mv1.sensorWidget(sensor)
    assert isinstance(rendering, MapViewRenderSettings)
    renderer = rendering.rasterRenderer()
    assert isinstance(renderer, QgsMultiBandColorRenderer)
    renderer.setRedBand(3)
    renderer.setGreenBand(2)
    renderer.setBlueBand(1)
    rendering.setRasterRenderer(renderer)

#set swIR-nIR-R Bands
rendering = mv2.sensorWidget(sensorLS)
assert isinstance(rendering, MapViewRenderSettings)
renderer = rendering.rasterRenderer()
assert isinstance(renderer, QgsMultiBandColorRenderer)
renderer.setRedBand(4)
renderer.setGreenBand(5)
renderer.setBlueBand(3)
rendering.setRasterRenderer(renderer)

rendering = mv2.sensorWidget(sensorRE)
assert isinstance(rendering, MapViewRenderSettings)
renderer = rendering.rasterRenderer()
assert isinstance(renderer, QgsMultiBandColorRenderer)
renderer.setRedBand(5)
renderer.setGreenBand(4)
renderer.setBlueBand(3)
rendering.setRasterRenderer(renderer)
if isinstance(sensorPL, SensorInstrument):
    rendering = mv2.sensorWidget(sensorPL)
    assert isinstance(rendering, MapViewRenderSettings)
    renderer = rendering.rasterRenderer()
    assert isinstance(renderer, QgsMultiBandColorRenderer)
    renderer.setRedBand(4)
    renderer.setGreenBand(3)
    renderer.setBlueBand(2)
    rendering.setRasterRenderer(renderer)

Benjamin Jakimow's avatar
Benjamin Jakimow committed

from timeseriesviewer.mapcanvas import MapTools

TSV.onShowProfile(center, mv1.mapCanvases()[0], MapTools.CursorLocation)
#load data from other locations

TSV.ui.dockSpectralLibrary.setAddCurrentSpectraToSpeclibMode(True)

Benjamin Jakimow's avatar
Benjamin Jakimow committed
n = 20
dx = random.sample(range(-500, 500, 30), n)
dy = random.sample(range(-500, 500, 20), n)
for i, mc in enumerate(mv1.mapCanvases()):


    coordinate = SpatialPoint(center.crs(), center.x()+dx[i], center.y() + dy[i])
    TSV.onShowProfile(center, mc, MapTools.SpectralProfile)
    if i == 10:
        break

ps2D_LS_NDVI = TSV.spectralTemporalVis.createNewPlotStyle2D()
ps2D_RE_NDVI = TSV.spectralTemporalVis.createNewPlotStyle2D()


for dx in range(-120, 120, 60):
    location = SpatialPoint(center.crs(), center.x() + dx, center.y())
    TSV.onShowProfile(location, mv1.mapCanvases()[0], MapTools.TemporalProfile)

TSV.spectralTemporalVis.loadMissingData(backgroundProcess=False)

Benjamin Jakimow's avatar
Benjamin Jakimow committed
TP = TSV.spectralTemporalVis.mTemporalProfileLayer[0]
ps2D_LS_NDVI.setSensor(sensorLS)
ps2D_LS_NDVI.setExpression('(b4-b3)/(b4+b3)')
ps2D_LS_NDVI.setTemporalProfile(TP)

ps2D_RE_NDVI.setSensor(sensorRE)
ps2D_RE_NDVI.setTemporalProfile(TP)
ps2D_RE_NDVI.setExpression('(b5-b3)/(b5+b3)')


TSV.spectralTemporalVis.updatePlot2D()
s = ""
def widgetScreenshot(widget, path):
    assert isinstance(widget, QWidget)
    rect = widget.rect()
    pixmap = QPixmap(rect.size())
    widget.render(pixmap, QPoint(), QRegion(rect))
    pixmap.save(path, quality=100)

def makePNG(widget, name):
    path = jp(DIR_SCREENSHOTS, name+'.png')
    widgetScreenshot(widget, path)

# makePNG(TS.ui, 'mainGUI')

for dockWidget in TSV.ui.findChildren(QDockWidget):
    assert isinstance(dockWidget, QDockWidget)
    #dockWidget.setFloating(True)
    name = dockWidget.objectName()
    dSize = dockWidget.size()
    #change sizes
    if name == 'cursorLocationInfoPanel':
        dockWidget.reloadCursorLocation()
        dockWidget.resize(QSize(300, 300))
        dockWidget.update()

    if name == 'mapViewPanel':
        dockWidget.setCurrentMapView(mv1)
        dockWidget.gbMapProperties.setCollapsed(True)
        dockWidget.gbMapProperties.update()
        mv1.ui.gbVectorRendering.setCollapsed(True)
        mv1.ui.gbVectorRendering.setChecked(False)
        mv1.ui.update()
        dockWidget.resize(QSize(300, 600))
        dockWidget.update()

    if name == 'sensorPanel':
        #dockWidget.setFixedHeight(200)
        dockWidget.resize(QSize(330, 125))
        makePNG(dockWidget, name)

    if name == 'systemInfoPanel':
        dockWidget.setFixedHeight(400)

    if name == 'spectralLibraryPanel':
    if name == 'temporalProfilePanel':
        dockWidget.resize(QSize(800, 250))
        for i in range(dockWidget.listWidget.count()):
            assert isinstance(dockWidget.listWidget, QListWidget)
            dockWidget.listWidget.setCurrentRow(i)
            page = dockWidget.stackedWidget.currentWidget()
            pageName = page.objectName()
            page.update()

Benjamin Jakimow's avatar
Benjamin Jakimow committed
            if pageName == 'page2D':
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            elif pageName == 'page3D' and dockWidget.plotWidget3D is not None:

                dockWidget.plotWidget3D.update()
                dockWidget.plotWidget3D.paintGL()
                #dockWidget.plotWidget3D.repaint()
            dockWidget.repaint()
            makePNG(dockWidget, '{}.{}'.format(name, pageName))

    if name == 'timeseriesPanel':
        dockWidget.resize(QSize(800, 250))
        makePNG(dockWidget, name)

    #dockWidget.setFloating(False)


app.exec_()
#print('Done')