Skip to content
Snippets Groups Projects
screenshots.py 8.48 KiB
Newer Older
  • Learn to ignore specific revisions
  • from qgis.core import *
    from qgis.gui import *
    from qgis.PyQt.QtWidgets import *
    from qgis.PyQt.QtCore import *
    from qgis.PyQt.QtGui import *
    
    from timeseriesviewertesting import initQgisApplication
    app = initQgisApplication()
    
    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.{}', sys.platform)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    os.makedirs(DIR_SCREENSHOTS, exist_ok=True)
    
    
    TSV = TimeSeriesViewer(None)
    
    #set up example settings
    from example.Images import Img_2014_04_21_LC82270652014111LGN00_BOA, re_2014_06_25
    
    if True:
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        TSV.loadExampleTimeSeries()
        center = TSV.TS.getMaxSpatialExtent().spatialCenter()
    else:
        dirTestData = r'F:\TSData'
    
        files = list(file_search(dirTestData, re.compile('\.tif$')))
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        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
    
        else:
            s = ""
    
    
    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 TSV.TS.sensors():
    
        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
    
    if isinstance(sensorLS, SensorInstrument):
        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)
    
    if isinstance(sensorRE, SensorInstrument):
        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)
    
    
    #activate Crosshair
    TSV.spatialTemporalVis.setCrosshairVisibility(True)
    
    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 = widget.grab()
        #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')
    
    TSV.show()
    TSV.ui.resize(QSize(1000,600))
    QApplication.processEvents()
    
    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')