Skip to content
Snippets Groups Projects
main.py 43.1 KiB
Newer Older
        HBar = self.ui.scrollArea_imageChips.horizontalScrollBar()
        TSDs = list(self.CHIPWIDGETS.keys())
        if len(TSDs) == 0:
            return

        #get date INDEX that is closest to requested date
        if type(date_of_interest) is str:
            date_of_interest = np.datetime64(date_of_interest)

        if type(date_of_interest) is np.datetime64:
            i_doi = TSDs.index(sorted(TSDs, key=lambda TSD: abs(date_of_interest - TSD.getDate()))[0])
        else:
            i_doi = date_of_interest
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        step = int(float(HBar.maximum()) / (len(TSDs)+1))
        HBar.setSingleStep(step)
        HBar.setPageStep(step*5)
        HBar.setValue(i_doi * step)
unknown's avatar
unknown committed

        if len(self.TS) == 0:
            return
        D = self.ui
        easting = QgsVector(D.doubleSpinBox_subset_size_x.value(), 0.0)
        northing = QgsVector(0.0, D.doubleSpinBox_subset_size_y.value())

        Center = QgsPoint(D.spinBox_coordinate_x.value(), D.spinBox_coordinate_y.value())
        UL = Center - (easting * 0.5) + (northing * 0.5)
        LR = Center + (easting * 0.5) - (northing * 0.5)
        extent = QgsRectangle(UL,LR)
        maxPx = int(D.spinBoxMaxPixmapSize.value())
        pxSize = self.PIXMAPS.setExtent(extent, self.canvasCrs, maxPx)
unknown's avatar
unknown committed

unknown's avatar
unknown committed
        #get the dates of interes
        dates_of_interest = list()
Benjamin Jakimow's avatar
Benjamin Jakimow committed

        doiTSD = self.TS.data[int(D.sliderDOI.value())-1]
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        centerDate = doiTSD.getDate()
        allDates = self.TS.getObservationDates()
        i_doi = allDates.index(centerDate)

unknown's avatar
unknown committed
        if D.rb_showEntireTS.isChecked():
            dates_of_interest = allDates
unknown's avatar
unknown committed
        elif D.rb_showTimeWindow.isChecked():
            i0 = max([0, i_doi-D.sb_ndates_before.value()])
            ie = min([i_doi + D.sb_ndates_after.value(), len(allDates)-1])
            dates_of_interest = allDates[i0:ie+1]
unknown's avatar
unknown committed


        diff = set(dates_of_interest)
        diff = diff.symmetric_difference(self.CHIPWIDGETS.keys())
unknown's avatar
unknown committed

        self.clearLayoutWidgets(self.ICP)
unknown's avatar
unknown committed
        self.CHIPWIDGETS.clear()

unknown's avatar
unknown committed

        #initialize image labels

        cnt_chips = 0

        TSDs_of_interest = list()
Benjamin Jakimow's avatar
Benjamin Jakimow committed

        for date in dates_of_interest:
unknown's avatar
unknown committed

            #LV = QVBoxLayout()
            #LV.setSizeConstraint(QLayout.SetNoConstraint)

            for TSD in self.TS.getTSDs(date_of_interest=date):
                TSDs_of_interest.append(TSD)
                info_label_text = '{}\n{}'.format(TSD.date, TSD.sensor.sensorName)
                textLabel = QLabel(info_label_text)
                tt = [TSD.date,TSD.pathImg, TSD.pathMsk]
                textLabel.setToolTip(list2str(tt))
                self.ICP.addWidget(textLabel, 0, cnt_chips)
                viewList = list()
                j = 1
                for view in self.BAND_VIEWS:
                    viewWidget = view.getWidget(TSD.sensor)
                    layerRenderer = viewWidget.layerRenderer()

                    #imageLabel = QLabel()
                    #imv = pg.GraphicsView()
                    #imv = QGraphicsView(self.dlg.scrollArea_imageChip_content)
                    #imv = MyGraphicsView(self.dlg.scrollArea_imageChip_content, iface=self.iface, path=TSD.pathImg, bands=bands)
                    #imv = pg.ImageView(view=None)
                    imgLabel = ImageChipLabel(self, TSD, layerRenderer)
Benjamin Jakimow's avatar
Benjamin Jakimow committed

                    imgLabel.setMinimumSize(pxSize)
                    imgLabel.setMaximumSize(pxSize)
                    imgLabel.clicked.connect(self.ua_collect_date)
Benjamin Jakimow's avatar
Benjamin Jakimow committed

                    viewList.append(imgLabel)
                    self.ICP.addWidget(imgLabel, j, cnt_chips)
                    j += 1

                textLabel = QLabel(info_label_text)
                textLabel.setToolTip(str(TSD))
                self.ICP.addWidget(textLabel, j, cnt_chips)

                self.CHIPWIDGETS[TSD] = viewList

                cnt_chips += 1
unknown's avatar
unknown committed

        self.ui.scrollArea_imageChip_content.update()
        self.scrollToDate(centerDate)

        #todo: start pixmap loading
        #define render jobs
        #(TSD, [renderers] in order of views)
        LUT_RENDERER = {}
        for view in self.BAND_VIEWS:
            for sensor in view.Sensors.keys():
                if sensor not in LUT_RENDERER.keys():
                    LUT_RENDERER[sensor] = []
                LUT_RENDERER[sensor].append(
                    view.getWidget(sensor).layerRenderer()
                )
unknown's avatar
unknown committed


        for TSD in TSDs_of_interest:
            for i, r in enumerate(LUT_RENDERER[TSD.sensor]):
                jobs.append(RenderJob(TSD, r.clone(), destinationId=i))
Benjamin Jakimow's avatar
Benjamin Jakimow committed

        #oder jobs by distance to DOI
        jobs = sorted(jobs, key = lambda j: abs(j.TSD.date - doiTSD.date))
unknown's avatar
unknown committed

        #todo: recycling to save loading time
        self.PIXMAPS.loadSubsets(jobs)
    def showSubset(self, renderJob, pixmap):
        assert isinstance(renderJob, RenderJob)
        chipLabel = self.CHIPWIDGETS[renderJob.TSD][renderJob.destinationId]
        chipLabel.setPixmap(pixmap)
        chipLabel.setFixedSize(pixmap.size())
        chipLabel.update()
        s = ""
    def ua_collect_date(self, ICL, event):
        if self.ui.rb_labeling_activate.isChecked():
            txt = self.ui.tb_labeling_text.toPlainText()
            reg = re.compile('\d{4}-\d{2}-\d{2}', re.I | re.MULTILINE)
            dates = set([np.datetime64(m) for m in reg.findall(txt)])
            doi = ICL.TSD.getDate()

            if event.button() == Qt.LeftButton:
                dates.add(doi)
            elif event.button() == Qt.MiddleButton and doi in dates:
                dates.remove(doi)

            dates = sorted(list(dates))
            txt = ' '.join([d.astype(str) for d in dates])
            self.ui.tb_labeling_text.setText(txt)
unknown's avatar
unknown committed

    def clearLayoutWidgets(self, L):
        if L is not None:
            while L.count():
                w = L.takeAt(0)
                if w.widget():
                    w.widget().deleteLater()
unknown's avatar
unknown committed
                #if w is not None:
                #    w.widget().deleteLater()
unknown's avatar
unknown committed

    def ua_addTSImages(self, files=None):
        if files is None:
            files = QFileDialog.getOpenFileNames()

        if files:
            M = self.ui.tableView_TimeSeries.model()
unknown's avatar
unknown committed
            M.beginResetModel()
            self.TS.addFiles(files)
            M.endResetModel()
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            self.refreshBandViews()

unknown's avatar
unknown committed
        self.check_enabled()


    def ua_addTSMasks(self, files=None):

        if files is None:
            files = QFileDialog.getOpenFileNames()

        l = len(files)
        if l > 0:
            M = self.ui.tableView_TimeSeries.model()
unknown's avatar
unknown committed
            M.beginResetModel()
unknown's avatar
unknown committed
            self.TS.addMasks(files, raise_errors=False)
unknown's avatar
unknown committed
            M.endResetModel()

        self.check_enabled()



    def ua_addBandView(self):
        bandView = BandView(self.TS)
        #bandView.removeView.connect(self.ua_removeBandView)
        self.BAND_VIEWS.append(bandView)
Benjamin Jakimow's avatar
Benjamin Jakimow committed

Benjamin Jakimow's avatar
Benjamin Jakimow committed
    def refreshBandViews(self):
        if len(self.BAND_VIEWS) == 0 and len(self.TS) > 0:
            self.ua_addBandView() # add two bandviews by default
            self.ua_addBandView()
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        self.clearLayoutWidgets(self.BVP)
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        for i, BV in enumerate(self.BAND_VIEWS):
            W = QWidget()
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            hl = QHBoxLayout()
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            textLabel = VerticalLabel('View {}'.format(i+1))
            #textLabel = QLabel('View {}'.format(i+1))
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            textLabel.setToolTip('')
            textLabel.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)
            hl.addWidget(textLabel)
            for S in self.TS.Sensors.keys():
                w = BV.getWidget(S).ui
                if i > 0:
                    w.setTitle(None) #show sensor name only on top
Benjamin Jakimow's avatar
Benjamin Jakimow committed
                w.setMaximumSize(w.size())
                #w.setMinimumSize(w.size())
                w.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.MinimumExpanding)
                #w.setBands(band_recommendation)
                hl.addWidget(w)
                s = ""

            hl.addItem(QSpacerItem(1,1))
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            W.setLayout(hl)
            self.BVP.addWidget(W)
        self.BVP.addItem(QSpacerItem(1, 1))
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        self.check_enabled()
unknown's avatar
unknown committed

unknown's avatar
unknown committed

Benjamin Jakimow's avatar
Benjamin Jakimow committed
    def ua_removeBandView(self, w):
        self.BAND_VIEWS.remove(w)
    def ua_clear_TS(self):
unknown's avatar
unknown committed
        #remove views

        M = self.ui.tableView_TimeSeries.model()
unknown's avatar
unknown committed
        M.beginResetModel()
        self.TS.clear()
        M.endResetModel()
        self.check_enabled()

    def ua_removeTSD(self, TSDs=None):
        if TSDs is None:
            TSDs = self.getSelectedTSDs()
        assert isinstance(TSDs,list)
unknown's avatar
unknown committed

        M = self.ui.tableView_TimeSeries.model()
unknown's avatar
unknown committed
        M.beginResetModel()
        self.TS.removeDates(TSDs)
unknown's avatar
unknown committed
        M.endResetModel()
unknown's avatar
unknown committed
        self.check_enabled()
unknown's avatar
unknown committed


    def getSelectedTSDs(self):
        TV = self.ui.tableView_TimeSeries
        return [TVM.getTimeSeriesDatumFromIndex(idx) for idx in TV.selectionModel().selectedRows()]
def disconnect_signal(signal):
    while True:
        try:
            signal.disconnect()
        except TypeError:
            break
unknown's avatar
unknown committed


unknown's avatar
unknown committed
    from scipy.misc import toimage
    toimage(data).show()

unknown's avatar
unknown committed
def run_tests():

    if False:

        pathImg = r'O:\SenseCarbonProcessing\BJ_NOC\01_RasterData\00_VRTs\02_Cutted\2014-07-26_LC82270652014207LGN00_BOA.vrt'
        pathMsk = r'O:\SenseCarbonProcessing\BJ_NOC\01_RasterData\00_VRTs\02_Cutted\2014-07-26_LC82270652014207LGN00_Msk.vrt'

        if False:
            TSD = TimeSeriesDatum(pathImg)
            TSD.setMask(pathMsk)
unknown's avatar
unknown committed

unknown's avatar
unknown committed

            c = [670949.883,-786288.771]

            w_x = w_y = 1000 #1km box
            srs = TSD.getSpatialReference()
            ring = ogr.Geometry(ogr.wkbLinearRing)
            import itertools
            for x,y in itertools.product([1000, -1000], repeat=2):
                ring.AddPoint(c[0]+x, c[1]+y)
            ring.AssignSpatialReference(srs)
            bb = ogr.Geometry(ogr.wkbPolygon)
            bb.AddGeometry(ring)
            bb.AssignSpatialReference(srs)
unknown's avatar
unknown committed




        def getChip3d_OLD(chips, r,g,b, range_r, range_g, range_b):

            nl, ns = chips[r].shape
            a3d = np.ndarray((3,nl,ns), dtype='float')

            rgb_idx = [r,g,b]
            ranges = [range_r, range_g, range_b]

            for i, rgb_i in enumerate(rgb_idx):
                range = ranges[i]
                data = chips[rgb_i].astype('float')
                data -= range[0]
                data *= 255./range[1]
                a3d[i,:] = data

            np.clip(a3d, 0, 255, out=a3d)

            return a3d.astype('uint8')

Benjamin Jakimow's avatar
Benjamin Jakimow committed
        app  = QApplication([])
        main = PictureTest()
unknown's avatar
unknown committed
        main.show()
Benjamin Jakimow's avatar
Benjamin Jakimow committed

unknown's avatar
unknown committed
        range_r = [0,500]
        range_g = [0,500]
        range_b = [0,500]

        bands = [3,2,1]
        #chipData = TSD.readSpatialChip(bb,bands=bands )
unknown's avatar
unknown committed

        #main.addNumpy(getChip3d(chipData, bands, (range_r, range_g, range_b)))
unknown's avatar
unknown committed
        app.exec_()
        exit(0)

    if False:
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        dirSrcLS = r'O:\SenseCarbonProcessing\BJ_NOC\01_RasterData\00_VRTs\02_Cutted'
        filesImgLS = file_search(dirSrcLS, '2014*_BOA.vrt')
        filesMsk = file_search(dirSrcLS, '2014*_Msk.vrt')
        TS = TimeSeries(imageFiles=filesImgLS, maskFiles=filesMsk)
unknown's avatar
unknown committed

        print(TS)
        exit(0)


unknown's avatar
unknown committed
    if True:
unknown's avatar
unknown committed
        import PyQt4.Qt
        app=PyQt4.Qt.QApplication([])
        S = TimeSeriesViewer(None)
Benjamin Jakimow's avatar
Benjamin Jakimow committed
        S.run()

        if True:
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            dirSrcLS = r'\\141.20.140.107\NAS_Processing\SenseCarbonProcessing\BJ_NOC\01_RasterData\02_CuttedVRT'
            dirSrcRE = r'\\141.20.140.91\SAN_RSDBrazil\RapidEye\3A_VRTs'
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            filesImgLS = file_search(dirSrcLS, '20*_BOA.vrt')
            filesImgRE = file_search(dirSrcRE, '*.vrt', recursive=True)
            #filesMsk = file_search(dirSrc, '2014*_Msk.vrt')
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            S.ua_addTSImages(files=filesImgLS[0:2])
            S.ua_addTSImages(files=filesImgRE[0:2])
            #S.ua_addTSImages(files=filesImgLS)
            #S.ua_addTSImages(files=filesImgRE)
            #S.ua_loadExampleTS()
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            #S.ua_addTSMasks(files=filesMsk)

        #S.ua_addView(bands=[4,5,3])

Benjamin Jakimow's avatar
Benjamin Jakimow committed

    if False:
        import qgis.core

        # supply path to where is your qgis installed

        #QgsApplication.setPrefixPath("/Applications/QGIS_2.12.app/Contents/MacOS/QGIS", True)
Benjamin Jakimow's avatar
Benjamin Jakimow committed

        # load providers
        QgsApplication.initQgis()

        a = QgsApplication([], True)

        S = TimeSeriesViewer(a)
unknown's avatar
unknown committed
        S.run()
unknown's avatar
unknown committed
        if True:
Benjamin Jakimow's avatar
Benjamin Jakimow committed
            dirSrcLS = r'O:\SenseCarbonProcessing\BJ_NOC\01_RasterData\00_VRTs\02_Cutted'
            filesImgLS = file_search(dirSrcLS, '2014*_BOA.vrt')
            filesMsk = file_search(dirSrcLS, '2014*_Msk.vrt')
            S.ua_addTSImages(files=filesImgLS)
            S.ua_addTSMasks(files=filesMsk)
unknown's avatar
unknown committed

        #S.ua_addView(bands=[4,5,3])

        a.exec_()
unknown's avatar
unknown committed
    print('Tests done')
    exit(0)


if __name__ == '__main__':
unknown's avatar
unknown committed
    run_tests()
    print('Done')