Skip to content
Snippets Groups Projects
profilevisualization.py 80.1 KiB
Newer Older
  • Learn to ignore specific revisions
  •         if isinstance(self.plotSettingsModel2D, PlotSettingsModel2D):
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
                locations = set()
    
                for plotStyle in self.plotSettingsModel2D:
                    assert isinstance(plotStyle, TemporalProfile2DPlotStyle)
                    if plotStyle.isPlotable():
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
                        locations.add(plotStyle.temporalProfile().coordinate())
    
                        for pdi in plotStyle.mPlotItems:
                            assert isinstance(pdi, TemporalProfilePlotDataItem)
                            pdi.updateDataAndStyle()
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
                #2. load pixel data
                self.loadCoordinate(list(locations))
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
                # https://github.com/pyqtgraph/pyqtgraph/blob/5195d9dd6308caee87e043e859e7e553b9887453/examples/customPlot.py
                return
    
    def examplePixelLoader():
    
    
        # prepare QGIS environment
        if sys.platform == 'darwin':
            PATH_QGS = r'/Applications/QGIS.app/Contents/MacOS'
            os.environ['GDAL_DATA'] = r'/usr/local/Cellar/gdal/1.11.3_1/share'
        else:
            # assume OSGeo4W startup
            PATH_QGS = os.environ['QGIS_PREFIX_PATH']
        assert os.path.exists(PATH_QGS)
    
        qgsApp = QgsApplication([], True)
        QApplication.addLibraryPath(r'/Applications/QGIS.app/Contents/PlugIns')
        QApplication.addLibraryPath(r'/Applications/QGIS.app/Contents/PlugIns/qgis')
        qgsApp.setPrefixPath(PATH_QGS, True)
        qgsApp.initQgis()
    
    
        gb = QGroupBox()
        gb.setTitle('Sandbox')
    
        PL = PixelLoader()
    
        PL.setNumberOfThreads(2)
    
    
        if False:
            files = ['observationcloud/testdata/2014-07-26_LC82270652014207LGN00_BOA.bsq',
                     'observationcloud/testdata/2014-08-03_LE72270652014215CUB00_BOA.bsq'
                     ]
        else:
    
            from timeseriesviewer.utils import file_search
    
            searchDir = r'H:\LandsatData\Landsat_NovoProgresso'
            files = file_search(searchDir, '*227065*band4.img', recursive=True)
            #files = files[0:3]
    
        lyr = QgsRasterLayer(files[0])
        coord = lyr.extent().center()
        crs = lyr.crs()
    
        l = QVBoxLayout()
    
        btnStart = QPushButton()
        btnStop = QPushButton()
        prog = QProgressBar()
        tboxResults = QPlainTextEdit()
        tboxResults.setMaximumHeight(300)
        tboxThreads = QPlainTextEdit()
        tboxThreads.setMaximumHeight(200)
        label = QLabel()
        label.setText('Progress')
    
        def showProgress(n,m,md):
            prog.setMinimum(0)
            prog.setMaximum(m)
            prog.setValue(n)
    
            info = []
            for k, v in md.items():
                info.append('{} = {}'.format(k,str(v)))
            tboxResults.setPlainText('\n'.join(info))
            #tboxThreads.setPlainText(PL.threadInfo())
            qgsApp.processEvents()
    
        PL.sigPixelLoaded.connect(showProgress)
        btnStart.setText('Start loading')
        btnStart.clicked.connect(lambda : PL.startLoading(files, coord, crs))
        btnStop.setText('Cancel')
        btnStop.clicked.connect(lambda: PL.cancelLoading())
        lh = QHBoxLayout()
        lh.addWidget(btnStart)
        lh.addWidget(btnStop)
        l.addLayout(lh)
        l.addWidget(prog)
        l.addWidget(tboxThreads)
        l.addWidget(tboxResults)
    
        gb.setLayout(l)
        gb.show()
        #rs.setBackgroundStyle('background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #222, stop:1 #333);')
        #rs.handle.setStyleSheet('background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #282, stop:1 #393);')
        qgsApp.exec_()
        qgsApp.exitQgis()
    
    if __name__ == '__main__':
        import site, sys
    
        from timeseriesviewer import utils
    
        qgsApp = utils.initQgisApplication(qgisDebug=True)
    
        DEBUG = False
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        import itertools
    
        lot = list(itertools.product([1,2,3,4,5,6,7], [87,88,89]))
        arr = np.asanyarray(lot, dtype=tuple)
    
        lot = [(1,2),(2,3)]
    
    
        t1 =(1,2)
        t2 =(2,3,3,4,5)
    
        arr[0,0] = t1
        arr[1,1] = t2
    
    
        if False:
            f = QgsFeature()
    
            fields = QgsFields()
            field = QgsField('b', QVariant.Double, 'double', 40, 5)
            fields.append(field)
            f.setFields(fields)
    
            expr = QgsExpression('b')
    
            for n in [23, 42.24, None]:
                f.setAttribute('b', n)
                context = QgsExpressionContextUtils.createFeatureBasedContext(f, f.fields())
                r = expr.evaluate(context)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
                #print((n,r))
    
        if False: #the ultimative test for floating point division correctness, at least on a DOY-level
            date1 = np.datetime64('1960-12-31','D')
            assert date1 == num2date(date2num(date1))
            #1960 - 12 - 31
            for year in  range(1960, 2057):
                for doy in range(1, daysPerYear(year)+1):
                    dt = datetime.timedelta(days=doy - 1)
                    date1 = np.datetime64('{}-01-01'.format(year)) + np.timedelta64(doy-1,'D')
                    date2 = datetime.date(year=year, month=1, day=1) + datetime.timedelta(days=doy-1)
    
                    assert date1 == num2date(date2num(date1), dt64=True), 'date1: {}'.format(date1)
                    assert date2 == num2date(date2num(date2), dt64=False), 'date2: {}'.format(date1)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        TS = TimeSeries()
    
        pd = ProfileViewDockUI()
        STVis = SpectralTemporalVisualization(TS, pd)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        STVis.ui.show()
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        qgsApp.exec_()
        qgsApp.exitQgis()