def uploadHeader(self):
        """Import header from ASCII or TXT file.

        This function open a QFileDialog() to select and open an ASC file.
        The beginning of this file (ie. the header) is parsed to get value and
        to fill corresponding widget parameter value.
        The goal is to automate the filling of the parameters to improve
        the user experience

        Example of file header:
        ```
        ncols 144
        nrows 138
        xllcorner 312487.6891250734
        yllcorner 2397321.4964859663
        cellsize 10.0
        NODATA_value -1
        ```
        """

        # Select the file with a QFileDialog()
        dlg = QFileDialog()
        dlg.setFileMode(QFileDialog.AnyFile)
        #dlg.setFilter("ASC File (*.asc);; TXT File (*.txt);;All File (*.*)")
        dlg.setNameFilters(
            ["All File (*.*)", "ASC File (*.asc)", "TXT File (*.txt)"])
        dlg.selectNameFilter("All File (*.*)")
        filenames = ''
        if dlg.exec_():
            filenames = dlg.selectedFiles()
        if filenames != '':
            # Open the file and parse header data
            with open(str(filenames[0]), 'r') as infile:
                for line in infile:
                    values = line.strip().split(' ')
                    if values[0] == "ncols":
                        ChloeUtils.wrapperSetValue(self.wrappers["N_COLS"],
                                                   int(values[1]))
                    elif values[0] == "nrows":
                        ChloeUtils.wrapperSetValue(self.wrappers["N_ROWS"],
                                                   float(values[1]))
                    elif values[0] == "xllcorner":
                        ChloeUtils.wrapperSetValue(self.wrappers["XLL_CORNER"],
                                                   float(values[1]))
                    elif values[0] == "yllcorner":
                        ChloeUtils.wrapperSetValue(self.wrappers["YLL_CORNER"],
                                                   float(values[1]))
                    elif values[0] == "cellsize":
                        ChloeUtils.wrapperSetValue(self.wrappers["CELL_SIZE"],
                                                   float(values[1]))
                    elif values[0] == "NODATA_value":
                        ChloeUtils.wrapperSetValue(
                            self.wrappers["NODATA_VALUE"], int(values[1]))
                    else:
                        break
Esempio n. 2
0
    def showOpen(self):
        startdir = '.'
        filters = QgsProviderRegistry.instance().fileRasterFilters()
        lastFilter = "Multi-resolution Seamless Image Database (*.sid *.SID)"

        dlg = QFileDialog(self)
        dlg.setWindowTitle("Open raster")
        dlg.setFileMode(QFileDialog.ExistingFile)
        dlg.setNameFilter(filters)
        dlg.selectNameFilter(lastFilter)
        dlg.fileSelected.connect(self.openFile)
        dlg.show()
Esempio n. 3
0
    def on_file_browse(self):
        settings = QSettings()

        # look for directory
        path = QgsProject.instance().homePath()
        if path == "":
            path = settings.value("mask/file_dir", "")
            if path == "":
                path = QDir.homePath()

        drivers = QgsVectorFileWriter.ogrDriverList()
        filterList = []
        filterMap = {}
        for driver in drivers:
            # grrr, driverMetadata is not really consistent
            if driver.driverName == "ESRI Shapefile":
                ext = "shp"
                glob = "*.shp"
            else:
                md = QgsVectorFileWriter.MetaData()
                if QgsVectorFileWriter.driverMetadata(driver.driverName, md):
                    ext = md.ext
                    glob = md.glob
                else:
                    continue

            fn = "%s (%s)" % (driver.longName, glob)
            filterMap[fn] = (driver.driverName, ext, glob)
            filterList += [fn]

        fileFilters = ";;".join(filterList)
        fd = QFileDialog(
            None,
            self.tr("Select a filename to save the mask layer to"),
            path,
            fileFilters,
        )
        save_format_name = self.parameters.file_format
        self.save_format = None
        for k, v in filterMap.items():
            if v[0] == save_format_name:
                self.save_format = v
                fd.selectNameFilter(k)
                break

        def on_filter_selected(ff):
            self.save_format = filterMap[ff]

        fd.filterSelected.connect(on_filter_selected)
        fd.setAcceptMode(QFileDialog.AcceptSave)
        r = fd.exec_()
        if r == 1:
            fn = fd.selectedFiles()[0]
            driver, ext, glob = self.save_format
            if not fn.endswith("." + ext):
                fn += "." + ext

            self.ui.filePath.setText(fn)
            self.ui.formatLbl.setText(self.save_format[0])
            self.parameters.file_format = self.save_format[0]
            self.parameters.file_path = fn