Skip to content
Snippets Groups Projects
profilevisualization.py 81 KiB
Newer Older
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            locations = set()
            for plotStyle in self.plotSettingsModel2D:
                assert isinstance(plotStyle, TemporalProfile2DPlotStyle)
                if plotStyle.isPlotable():
                    locations.add(plotStyle.temporalProfile().mCoordinate)
                    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)
    ui = ProfileViewDockUI()
    ui.show()
Benjamin Jakimow's avatar
Benjamin Jakimow committed

Benjamin Jakimow's avatar
Benjamin Jakimow committed

    s =""
Benjamin Jakimow's avatar
Benjamin Jakimow committed
    if True:
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        STVis = SpectralTemporalVisualization(ui)
        STVis.setTimeSeries(TS)
        import example.Images
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        from timeseriesviewer.utils import file_search
        files = file_search(os.path.dirname(example.Images.__file__), '*.tif')
        TS.addFiles(files)
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        ext = TS.getMaxSpatialExtent()
        for tsd in TS:
            ext = tsd.spatialExtent()
            if ext.crs().description() != '':
                break
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        cp1 = SpatialPoint(ext.crs(),ext.center())
        cpND = SpatialPoint(ext.crs(), 681151.214,-752388.476)
        cp2 = SpatialPoint(ext.crs(), ext.center())
        cp3 = SpatialPoint(ext.crs(), ext.center().x()+500, ext.center().y()+250)
Benjamin Jakimow's avatar
Benjamin Jakimow committed

        STVis.createNewPlotStyle2D()
        def addProfile():
            x0,y1 = ext.upperLeftPt()
            x1,y0 = ext.lowerRightPt()

            x = x0 + (x1 - x0) * np.random.sample()
            y = y0 + (y1 - y0) * np.random.sample()
            pt = SpatialPoint(ext.crs(), x, y)
            STVis.loadCoordinate(pt)


        btn = QPushButton('Add Profile')
        btn.clicked.connect(addProfile)
        btn.show()

        if False:
            for tp in STVis.tpCollection:
                assert isinstance(tp, TemporalProfile)
                tp.plot()
        #STVis.tpCollection.removeTemporalProfiles(STVis.tpCollection[-1])
        STVis.createNewPlotStyle3D()
        STVis.ui.listWidget.setCurrentRow(1)

        STVis.loadCoordinate(cpND)

        from example import  exampleEvents
        #STVis.loadCoordinatesFromOgr(exampleEvents)
        # STVis.loadCoordinate(cp2)
        # STVis.loadCoordinate(cp3)

Benjamin Jakimow's avatar
Benjamin Jakimow committed
    qgsApp.exec_()
    qgsApp.exitQgis()