Skip to content
Snippets Groups Projects
sensecarbon_tsv.py 40.7 KiB
Newer Older
unknown's avatar
unknown committed

    def initGui(self):
        """Create the menu entries and toolbar icons inside the QGIS GUI."""

        self.icon_path = ':/plugins/EnMAPBox/icon.png'
        self.add_action(
            self.icon_path,
            text=self.tr(u'EnMAP-Box'),
            callback=self.run,
            parent=self.iface.mainWindow())


    def unload(self):
        """Removes the plugin menu item and icon from QGIS GUI."""
        for action in self.actions:
            self.iface.removePluginMenu(
                self.tr(u'&EnMAP-Box'),
                action)
            self.iface.removeToolBarIcon(action)
        # remove the toolbar
        del self.toolbar

    def run(self):
        """Run method that performs all the real work"""

        #self.dlg.setWindowIcon(QIcon(self.icon_path))
        # show the GUI
        self.dlg.show()

        if DEBUG:
            pass

    def ua_showPxCoordinate_start(self):
        D = self.dlg
        h_x = D.doubleSpinBox_subset_size_x.value() * 0.5
        h_y = D.doubleSpinBox_subset_size_x.value() * 0.5

        c_x = D.spinBox_coordinate_x.value()
        c_y = D.spinBox_coordinate_y.value()


        ring = ogr.Geometry(ogr.wkbLinearRing)
        ring.AddPoint(c_x - h_x, c_y + h_y)
        ring.AddPoint(c_x + h_x, c_y + h_y)
        ring.AddPoint(c_x + h_x, c_y - h_y)
        ring.AddPoint(c_x - h_x, c_y - h_y)

        bb = ogr.Geometry(ogr.wkbPolygon)
        bb.AssignSpatialReference(self.TS.srs)
        bb.AddGeometry(ring)
        bbWkt = bb.ExportToWkt()
        srsWkt = bb.GetSpatialReference().ExportToWkt()


        self.ImageChipBuffer.setBoundingBox(bb)

        D = self.dlg
        size_x = D.spinBox_chipsize_x.value()
        size_y = D.spinBox_chipsize_y.value()

        ScrollArea = D.scrollArea
        #S.setWidgetResizable(False)
        #remove widgets

        all_dates = self.TS.getDates()
        if self.CPV is None:
            ScrollArea.setLayout(QHBoxLayout())
            self.CPV = ScrollArea.layout()
        else:
            diff = set(all_dates)
            diff = diff.symmetric_difference(self.CHIPWIDGETS.keys())
            if len(diff) != 0:
                self.clearLayoutWidgets(self.CPV)
            else:
                for date, viewList in self.CHIPWIDGETS.items():
                    for imageLabel in viewList:
                        imageLabel.clear()

        #initialize image labels

        for i, date in enumerate(all_dates):

            #LV = QVBoxLayout()
            #LV.setSizeConstraint(QLayout.SetNoConstraint)
            TSD = self.TS.data[date]
            textLabel = QLabel('{}'.format(date.astype(str)))
            textLabel.setToolTip(str(TSD))
            #textLabel.setMinimumWidth(size_x)
            #textLabel.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
            self.CPV.addWidget(textLabel, 0, i)
            viewList = list()
            for j, view in enumerate(self.VIEWS):
                imageLabel=QLabel()
                imageLabel.setFrameShape(QFrame.StyledPanel)
                imageLabel.setMinimumSize(size_x, size_y)
                imageLabel.setMaximumSize(size_x, size_y)
                imageLabel.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)
                viewList.append(imageLabel)
                self.CPV.addWidget(imageLabel,j+1, i)
            self.CHIPWIDGETS[date] = viewList

        #LH.addSpacerItem(Spacer(size_x, size_y))
        ScrollArea.show()

        #fill image labels
        missing_dates = set()
        missing_bands = set()
        for i, date in enumerate(self.TS.getDates()):
            required_bands = set()
            for j, view in enumerate(self.VIEWS):
                required_bands = required_bands.union(set(view.getBands()))

            missing = self.ImageChipBuffer.getMissingBands(date, required_bands)
            if len(missing) == 0:
                self.ua_showPxCoordinate_addChips(None, date=date)
            else:
                missing_dates.add(date)
                missing_bands = missing_bands.union(missing)

        if len(missing_dates) > 0:
            self.TS.getSpatialChips_parallel(bbWkt, srsWkt, dates=list(missing_dates), bands=list(missing_bands))

    def ua_showPxCoordinate_addChips(self, results, date=None):

        if results is not None:
            date, chipData = results
            self.ImageChipBuffer.addDataCube(date, chipData)

        viewList = self.CHIPWIDGETS.get(date)
        if viewList:
            for j, view in enumerate(self.VIEWS):

                imageLabel = viewList[j]
                img = self.ImageChipBuffer.getChipImage(date, view)
                pxMap = QPixmap.fromImage(img)
                pxMap = pxMap.scaled(imageLabel.size(), Qt.KeepAspectRatio)
                imageLabel.setPixmap(pxMap)

                s = ""
                pass
        s = ""

        pass

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

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

        if files:
            M = self.dlg.tableView_TimeSeries.model()
            M.beginResetModel()
            self.TS.addFiles(files)
            M.endResetModel()

            nb = self.TS.nb
            if len(self.VIEWS) == 0 and nb > 0:
                if nb < 3:
                    bands = [1,1,1]
                else:
                    self.ua_addView([3,2,1])
                    if nb >= 5:
                        self.ua_addView([4,5,3])


        self.check_enabled()


    def ua_addTSMasks(self, files=None):

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

        l = len(files)
        if l > 0:
            M = self.dlg.tableView_TimeSeries.model()
            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 setViewNames(self):
        for i, w in enumerate(self.VIEWS):
            w.setTitle('View {}'.format(i+1))
        self.check_enabled()



    def ua_addView(self, bands = [3,2,1]):
        import imagechipviewsettings_widget

Benjamin Jakimow's avatar
Benjamin Jakimow committed
        if len(self.TS.bandnames) > 0:

            w = imagechipviewsettings_widget.ImageChipViewSettings(self.TS, parent=self.dlg)
            w.setMaximumSize(w.size())
            w.setMinimumSize(w.size())
            w.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)
            #imageLabel.setMinimumSize(size_x, size_y)
            #imageLabel.setMaximumSize(size_x, size_y)
            #imageLabel.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)
            w.setBands(bands)
            w.removeView.connect(lambda : self.ua_removeView(w))
            self.VIEWS.append(w)
            L = self.dlg.scrollArea_viewsWidget.layout()
            L.addWidget(w)
            self.dlg.scrollArea_views.show()
            self.setViewNames()
            self.check_enabled()
unknown's avatar
unknown committed

    def ua_removeTSD(self, dates):
        if dates is None:
            selected = self.dlg.tableView_TimeSeries.selectedIndexes()
            s = ""
        M = self.dlg.tableView_TimeSeries.model()
        M.beginResetModel()
        for date in dates:
            self.TS.removeDate(date)
        M.endResetModel()



    def ua_removeView(self,w):
        self.VIEWS.remove(w)
        L = self.dlg.scrollArea_viewsWidget.layout()
        L.removeWidget(w)
        w.deleteLater()
        self.setViewNames()


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'
        TSD = TimeSeriesDatum(pathImg)
        TSD.setMask(pathMsk)

        print(TSD)

        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)




        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')

        app=QApplication([])
        main=PictureTest()
        main.show()
        range_r = [0,500]
        range_g = [0,500]
        range_b = [0,500]

        bands = [3,2,1]
        chipData = TSD.readSpatialChip(bb,bands=bands )

        main.addNumpy(getChip3d(chipData, bands, (range_r, range_g, range_b)))
        app.exec_()
        exit(0)

    if False:
        dirSrc = r'O:\SenseCarbonProcessing\BJ_NOC\01_RasterData\00_VRTs\02_Cutted'
        filesImg = file_search(dirSrc, '2014*_BOA.vrt')
        filesMsk = file_search(dirSrc, '2014*_Msk.vrt')
        TS = TimeSeries(imageFiles=filesImg, maskFiles=filesMsk)

        print(TS)
        exit(0)


    if True:
        import PyQt4.Qt
        a = PyQt4.Qt.QApplication([])
        S = SenseCarbon_TSV(a)
        S.run()
Benjamin Jakimow's avatar
Benjamin Jakimow committed

        if False:
            dirSrc = r'O:\SenseCarbonProcessing\BJ_NOC\01_RasterData\00_VRTs\02_Cutted'
            filesImg = file_search(dirSrc, '2014*_BOA.vrt')
            filesMsk = file_search(dirSrc, '2014*_Msk.vrt')
            S.ua_addTSImages(files=filesImg)
            S.ua_addTSMasks(files=filesMsk)
unknown's avatar
unknown committed

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

        a.exec_()
    print('Tests done')
    exit(0)

if __name__ == '__main__':

    run_tests()

    print('Done')