def saveScript(self, saveAs):
        newPath = None
        if self.filePath is None or saveAs:
            scriptDir = ScriptUtils.scriptsFolders()[0]
            newPath, _ = QFileDialog.getSaveFileName(self,
                                                     self.tr("Save script"),
                                                     scriptDir,
                                                     self.tr("Processing scripts (*.py *.PY)"))

            if newPath:
                if not newPath.lower().endswith(".py"):
                    newPath += ".py"

                self.filePath = newPath

        if self.filePath:
            text = self.editor.text()
            try:
                with codecs.open(self.filePath, "w", encoding="utf-8") as f:
                    f.write(text)
            except IOError as e:
                QMessageBox.warning(self,
                                    self.tr("I/O error"),
                                    self.tr("Unable to save edits:\n{}").format(str(e))
                                    )
                return

            self.setHasChanged(False)

        QgsApplication.processingRegistry().providerById("script").refreshAlgorithms()
Esempio n. 2
0
 def new_profile(self):
     """Create a new profile by name.
     """
     # noinspection PyCallByClass,PyTypeChecker
     dir = os.path.join(QgsApplication.qgisSettingsDirPath(),
                        'inasafe', 'minimum_needs')
     file_name, __ = QFileDialog.getSaveFileName(
         self,
         self.tr('Create a minimum needs profile'),
         expanduser(dir),
         self.tr('JSON files (*.json *.JSON)'),
         options=QFileDialog.DontUseNativeDialog)
     if not file_name:
         return
     file_name = basename(file_name)
     if self.profile_combo.findText(file_name) == -1:
         minimum_needs = {
             'resources': [], 'provenance': '', 'profile': file_name}
         self.minimum_needs.update_minimum_needs(minimum_needs)
         self.minimum_needs.save_profile(file_name)
         self.profile_combo.addItem(file_name)
         self.clear_resource_list()
         self.profile_combo.setCurrentIndex(
             self.profile_combo.findText(file_name))
     else:
         self.profile_combo.setCurrentIndex(
             self.profile_combo.findText(file_name))
         self.select_profile_by_name(file_name)
Esempio n. 3
0
    def exportAsImage(self):
        self.repaintModel(controls=False)
        filename, fileFilter = QFileDialog.getSaveFileName(self,
                                                           self.tr('Save Model As Image'), '',
                                                           self.tr('PNG files (*.png *.PNG)'))
        if not filename:
            return

        if not filename.lower().endswith('.png'):
            filename += '.png'

        totalRect = self.scene.itemsBoundingRect()
        totalRect.adjust(-10, -10, 10, 10)
        imgRect = QRectF(0, 0, totalRect.width(), totalRect.height())

        img = QImage(totalRect.width(), totalRect.height(),
                     QImage.Format_ARGB32_Premultiplied)
        img.fill(Qt.white)
        painter = QPainter()
        painter.setRenderHint(QPainter.Antialiasing)
        painter.begin(img)
        self.scene.render(painter, imgRect, totalRect)
        painter.end()

        img.save(filename)

        self.bar.pushMessage("", "Model was correctly exported as image", level=Qgis.Success, duration=5)
        self.repaintModel(controls=True)
Esempio n. 4
0
    def saveModel(self, saveAs):
        if str(self.textGroup.text()).strip() == '' \
                or str(self.textName.text()).strip() == '':
            QMessageBox.warning(
                self, self.tr('Warning'), self.tr('Please enter group and model names before saving')
            )
            return
        self.model.setName(str(self.textName.text()))
        self.model.setGroup(str(self.textGroup.text()))
        if self.model.sourceFilePath() and not saveAs:
            filename = self.model.sourceFilePath()
        else:
            filename, filter = QFileDialog.getSaveFileName(self,
                                                           self.tr('Save Model'),
                                                           ModelerUtils.modelsFolders()[0],
                                                           self.tr('Processing models (*.model3)'))
            if filename:
                if not filename.endswith('.model3'):
                    filename += '.model3'
                self.model.setSourceFilePath(filename)
        if filename:
            if not self.model.toFile(filename):
                if saveAs:
                    QMessageBox.warning(self, self.tr('I/O error'),
                                        self.tr('Unable to save edits. Reason:\n {0}').format(str(sys.exc_info()[1])))
                else:
                    QMessageBox.warning(self, self.tr("Can't save model"), QCoreApplication.translate('QgsPluginInstallerInstallingDialog', (
                        "This model can't be saved in its original location (probably you do not "
                        "have permission to do it). Please, use the 'Save as…' option."))
                    )
                return
            self.update_model.emit()
            self.bar.pushMessage("", "Model was correctly saved", level=Qgis.Success, duration=5)

            self.hasChanged = False
Esempio n. 5
0
    def exportAsPdf(self):
        self.repaintModel(controls=False)
        filename, fileFilter = QFileDialog.getSaveFileName(self,
                                                           self.tr('Save Model As PDF'), '',
                                                           self.tr('PDF files (*.pdf *.PDF)'))
        if not filename:
            return

        if not filename.lower().endswith('.pdf'):
            filename += '.pdf'

        totalRect = self.scene.itemsBoundingRect()
        totalRect.adjust(-10, -10, 10, 10)
        printerRect = QRectF(0, 0, totalRect.width(), totalRect.height())

        printer = QPrinter()
        printer.setOutputFormat(QPrinter.PdfFormat)
        printer.setOutputFileName(filename)
        printer.setPaperSize(QSizeF(printerRect.width(), printerRect.height()), QPrinter.DevicePixel)
        printer.setFullPage(True)

        painter = QPainter(printer)
        self.scene.render(painter, printerRect, totalRect)
        painter.end()

        self.bar.pushMessage("", "Model was correctly exported as PDF", level=Qgis.Success, duration=5)
        self.repaintModel(controls=True)
    def showSelectionDialog(self):
        if isinstance(self.output, OutputDirectory):
            self.selectDirectory()
            return

        filefilter = self.output.getFileFilter(self.alg)
        settings = QSettings()
        if settings.contains('/Processing/LastBatchOutputPath'):
            path = str(settings.value('/Processing/LastBatchOutputPath'))
        else:
            path = ''
        filename, selectedFileFilter = QFileDialog.getSaveFileName(self,
                                                                   self.tr('Save file'), path, filefilter)
        if filename:
            if not filename.lower().endswith(
                    tuple(re.findall("\*(\.[a-z]{1,10})", filefilter))):
                ext = re.search("\*(\.[a-z]{1,10})", selectedFileFilter)
                if ext:
                    filename += ext.group(1)
            settings.setValue('/Processing/LastBatchOutputPath', os.path.dirname(filename))
            dlg = AutofillDialog(self.alg)
            dlg.exec_()
            if dlg.mode is not None:
                try:
                    if dlg.mode == AutofillDialog.DO_NOT_AUTOFILL:
                        self.table.cellWidget(self.row,
                                              self.col).setValue(filename)
                    elif dlg.mode == AutofillDialog.FILL_WITH_NUMBERS:
                        n = self.table.rowCount() - self.row
                        for i in range(n):
                            name = filename[:filename.rfind('.')] \
                                + str(i + 1) + filename[filename.rfind('.'):]
                            self.table.cellWidget(i + self.row,
                                                  self.col).setValue(name)
                    elif dlg.mode == AutofillDialog.FILL_WITH_PARAMETER:
                        n = self.table.rowCount() - self.row
                        for i in range(n):
                            widget = self.table.cellWidget(i + self.row,
                                                           dlg.param)
                            param = self.alg.parameters[dlg.param]
                            if isinstance(param, (ParameterRaster,
                                                  ParameterVector, ParameterTable,
                                                  ParameterMultipleInput)):
                                s = str(widget.getText())
                                s = os.path.basename(s)
                                s = os.path.splitext(s)[0]
                            elif isinstance(param, ParameterBoolean):
                                s = str(widget.currentIndex() == 0)
                            elif isinstance(param, ParameterSelection):
                                s = str(widget.currentText())
                            elif isinstance(param, ParameterFixedTable):
                                s = str(widget.table)
                            else:
                                s = str(widget.text())
                            name = filename[:filename.rfind('.')] + s \
                                + filename[filename.rfind('.'):]
                            self.table.cellWidget(i + self.row,
                                                  self.col).setValue(name)
                except:
                    pass
    def saveToGeopackage(self):
        file_filter = self.tr('GeoPackage files (*.gpkg);;All files (*.*)', 'OutputFile')

        settings = QgsSettings()
        if settings.contains('/Processing/LastOutputPath'):
            path = settings.value('/Processing/LastOutputPath')
        else:
            path = ProcessingConfig.getSetting(ProcessingConfig.OUTPUT_FOLDER)

        filename, filter = QFileDialog.getSaveFileName(self, self.tr("Save to GeoPackage"), path,
                                                       file_filter, options=QFileDialog.DontConfirmOverwrite)

        if not filename:
            return

        layer_name, ok = QInputDialog.getText(self, self.tr('Save to GeoPackage'), self.tr('Layer name'), text=self.parameter.name().lower())
        if ok:
            self.use_temporary = False
            if not filename.lower().endswith('.gpkg'):
                filename += '.gpkg'
            settings.setValue('/Processing/LastOutputPath',
                              os.path.dirname(filename))

            uri = QgsDataSourceUri()
            uri.setDatabase(filename)
            uri.setDataSource('', layer_name,
                              'geom' if isinstance(self.parameter, QgsProcessingParameterFeatureSink) and self.parameter.hasGeometry() else None)
            self.leText.setText("ogr:" + uri.uri())

            self.skipOutputChanged.emit(False)
            self.destinationChanged.emit()
Esempio n. 8
0
    def select_file(self):
        """select file ops"""

        label = self.tr('eXtensible Markup Language (*.xml *.XML)')

        if self.mode == 0:
            slabel = self.tr('Save connections')
            self.filename, filter = QFileDialog.getSaveFileName(self, slabel,
                                                                '.', label)
        else:
            slabel = self.tr('Load connections')
            self.filename, selected_filter = QFileDialog.getOpenFileName(self, slabel,
                                                                         '.', label)

        if not self.filename:
            return

        # ensure the user never omitted the extension from the file name
        if not self.filename.lower().endswith('.xml'):
            self.filename = '%s.xml' % self.filename

        self.leFileName.setText(self.filename)

        if self.mode == 1:
            self.populate()

        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(True)
 def browse(self):
     settings = QSettings()
     key = '/UI/lastShapefileDir'
     outDir = settings.value(key)
     home = outDir
     #outDir = expanduser("~")
     #filter = (self.DEFAULTPROVIDER + " (*" +
     #             self.DEFAULTEXTENSION + ");;All files (*)")
     filter = (self.DEFAULTPROVIDER + " (*" +
                  self.DEFAULTEXTENSION + self.EXTRAEXTENSION + ")")
     #if (self.gdalprovider != self.DEFAULTPROVIDER and
     #                                     (self.canCreateCopy or
     #                                           self.canCreate)):
     #    filter = (self.gdalprovider + " (*" + self.gdalext +
     #                                          ");;" + filter)
     outFilePath = QFileDialog.getSaveFileName(self,
                                'Specify file name for skeleton',
                                                  outDir, filter)
     outFilePath = unicode(outFilePath)
     if outFilePath:
         root, ext = splitext(outFilePath)
         if ext.lower() != '.tif' and ext.lower() != '.tiff':
             outFilePath = '%s.tif' % outFilePath
         outDir = dirname(outFilePath)
         settings.setValue(key, outDir)
     #        (self.canCreateCopy or self.canCreate):
     #    fileName = splitext(str(fileName))[0]+self.gdalext
     self.outputRaster.setText(outFilePath)
Esempio n. 10
0
    def exportAsImage(self):
        self.repaintModel(controls=False)
        filename, fileFilter = QFileDialog.getSaveFileName(self,
                                                           self.tr('Save Model As Image'), '',
                                                           self.tr('PNG files (*.png *.PNG)'))
        if not filename:
            return

        if not filename.lower().endswith('.png'):
            filename += '.png'

        totalRect = self.scene.itemsBoundingRect()
        totalRect.adjust(-10, -10, 10, 10)
        imgRect = QRectF(0, 0, totalRect.width(), totalRect.height())

        img = QImage(totalRect.width(), totalRect.height(),
                     QImage.Format_ARGB32_Premultiplied)
        img.fill(Qt.white)
        painter = QPainter()
        painter.setRenderHint(QPainter.Antialiasing)
        painter.begin(img)
        self.scene.render(painter, imgRect, totalRect)
        painter.end()

        img.save(filename)

        self.bar.pushMessage("", self.tr("Successfully exported model as image to <a href=\"{}\">{}</a>").format(QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5)
        self.repaintModel(controls=True)
Esempio n. 11
0
    def getFileName(self, text, filter, filePath):
        """filter: [["Shapefile", "shp"], ["Keyhole Markup Language", "kml"]]"""
        filters = []
        for item in filter:
            filters.append("%s (*.%s)" % (item[0], item[1]))
        fileDlg = QFileDialog(self.iface.mainWindow())
        fileDlg.setNameFilters(filters)
        fileName, selectedFilter = fileDlg.getSaveFileName(self.iface.mainWindow(),
                                           text,
                                           filePath,
                                           ";;".join(filters)
                                           )
        QgsMessageLog.logMessage("selectedFilter: {0}".format(selectedFilter), "VoGis", Qgis.Info)

        #QgsMessageLog.logMessage("{0}".format(fileName), "VoGis", Qgis.Info)
        if fileName is None or fileName == "":
            return "", ""

        QgsMessageLog.logMessage("fileDlg.filters(): {0}".format(fileDlg.nameFilters()), "VoGis", Qgis.Info)
        selectedFilter = fileDlg.nameFilters().index(selectedFilter)
        fileExt = filter[selectedFilter][1]

        QgsMessageLog.logMessage("selectedFilter: {0}".format(selectedFilter), "VoGis", Qgis.Info)
        QgsMessageLog.logMessage("fileExt: {0}".format(fileExt), "VoGis", Qgis.Info)

        if fileName.lower().endswith(fileExt) is False:
            fileName = fileName + "." + fileExt
        return fileName, fileExt
Esempio n. 12
0
    def exportAsPdf(self):
        self.repaintModel(controls=False)
        filename, fileFilter = QFileDialog.getSaveFileName(self,
                                                           self.tr('Save Model As PDF'), '',
                                                           self.tr('PDF files (*.pdf *.PDF)'))
        if not filename:
            return

        if not filename.lower().endswith('.pdf'):
            filename += '.pdf'

        totalRect = self.scene.itemsBoundingRect()
        totalRect.adjust(-10, -10, 10, 10)
        printerRect = QRectF(0, 0, totalRect.width(), totalRect.height())

        printer = QPrinter()
        printer.setOutputFormat(QPrinter.PdfFormat)
        printer.setOutputFileName(filename)
        printer.setPaperSize(QSizeF(printerRect.width(), printerRect.height()), QPrinter.DevicePixel)
        printer.setFullPage(True)

        painter = QPainter(printer)
        self.scene.render(painter, printerRect, totalRect)
        painter.end()

        self.bar.pushMessage("", self.tr("Successfully exported model as PDF to <a href=\"{}\">{}</a>").format(QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5)
        self.repaintModel(controls=True)
Esempio n. 13
0
 def _saveToFile( self, sender, startFolder=None ):
     filter =  "OGC GeoPackage (*.gpkg);;ESRI Shape Files (*.shp);;SpatiaLite (*.sqlite);;Geojson File (*.geojson);;GML ( *.gml);;Comma separated value File (excel) (*.csv);;MapInfo TAB (*.TAB);;Any File (*.*)" 
     Fdlg = QFileDialog()
     Fdlg.setFileMode(QFileDialog.AnyFile)
     fName, __ = QFileDialog.getSaveFileName(sender, "open file", filter=filter, directory=startFolder)
     if fName:
         ext = os.path.splitext( fName )[1]
         if "GPKG" in ext.upper():
           flType = "GPKG"
         elif "SHP" in ext.upper():
           flType = "ESRI Shapefile"
         elif "SQLITE" in ext.upper():
           flType = "SQLite" 
         elif "GEOJSON" in ext.upper():  #no update possible -> hidden
           flType = "GeoJSON"
         elif "GML" in ext.upper():
           flType = "GML"
         elif 'TAB' in ext.upper():
           flType = 'MapInfo File'
         elif 'CSV' in ext.upper():
           flType = 'CSV'
         else:
           fName = fName + ".shp"
           flType = "ESRI Shapefile"
         return (fName , flType )
     else:
         return None
 def export(self):
     """ Export the results to a CSV file """
     
     # Remember the last location in which we saved
     settings = QSettings()
     lastFolder = str(settings.value("constraintchecker/lastSaveFolder", os.sep))
     
     outFileName, ext_selector = QFileDialog.getSaveFileName(self, 'Save Query Results', lastFolder,
                                                   'Comma Separated Variable Files (*.csv)')
     
     # Store the path we just looked in
     head, tail = os.path.split(outFileName)
     if head != os.sep and head.lower() != 'c:\\' and head != '':
         settings.setValue("constraintchecker/lastSaveFolder", head)
     
     if len(outFileName) == 0:
         # User hit cancel
         return
     
     # Export the file
     try:
         csvfile = open(outFileName+'.csv', 'w')
     except:
         msg = 'Failed to open %s for writing - perhaps it is open in another application?' % outFileName
         QMessageBox.critical(self, 'Failed to Open File', msg)
         return
     
     resWriter = csv.writer(csvfile)
     resWriter.writerow(self.resultModel.headerNames)
     for i in range(self.resultModel.rowCount()):
         resWriter.writerow(self.resultModel.fetchRow(i))
     csvfile.close()
Esempio n. 15
0
    def exportAsSvg(self):
        self.repaintModel(controls=False)
        filename, fileFilter = QFileDialog.getSaveFileName(self,
                                                           self.tr('Save Model As SVG'), '',
                                                           self.tr('SVG files (*.svg *.SVG)'))
        if not filename:
            return

        if not filename.lower().endswith('.svg'):
            filename += '.svg'

        totalRect = self.scene.itemsBoundingRect()
        totalRect.adjust(-10, -10, 10, 10)
        svgRect = QRectF(0, 0, totalRect.width(), totalRect.height())

        svg = QSvgGenerator()
        svg.setFileName(filename)
        svg.setSize(QSize(totalRect.width(), totalRect.height()))
        svg.setViewBox(svgRect)
        svg.setTitle(self.model.displayName())

        painter = QPainter(svg)
        self.scene.render(painter, svgRect, totalRect)
        painter.end()

        self.bar.pushMessage("", self.tr("Successfully exported model as SVG to <a href=\"{}\">{}</a>").format(QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5)
        self.repaintModel(controls=True)
Esempio n. 16
0
    def saveModel(self, saveAs):
        if not self.can_save():
            return
        self.model.setName(str(self.textName.text()))
        self.model.setGroup(str(self.textGroup.text()))
        if self.model.sourceFilePath() and not saveAs:
            filename = self.model.sourceFilePath()
        else:
            filename, filter = QFileDialog.getSaveFileName(self,
                                                           self.tr('Save Model'),
                                                           ModelerUtils.modelsFolders()[0],
                                                           self.tr('Processing models (*.model3 *.MODEL3)'))
            if filename:
                if not filename.endswith('.model3'):
                    filename += '.model3'
                self.model.setSourceFilePath(filename)
        if filename:
            if not self.model.toFile(filename):
                if saveAs:
                    QMessageBox.warning(self, self.tr('I/O error'),
                                        self.tr('Unable to save edits. Reason:\n {0}').format(str(sys.exc_info()[1])))
                else:
                    QMessageBox.warning(self, self.tr("Can't save model"), QCoreApplication.translate('QgsPluginInstallerInstallingDialog', (
                        "This model can't be saved in its original location (probably you do not "
                        "have permission to do it). Please, use the 'Save as…' option."))
                    )
                return
            self.update_model.emit()
            if saveAs:
                self.bar.pushMessage("", self.tr("Model was correctly saved to <a href=\"{}\">{}</a>").format(QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5)
            else:
                self.bar.pushMessage("", self.tr("Model was correctly saved"), level=Qgis.Success, duration=5)

            self.hasChanged = False
Esempio n. 17
0
    def saveAsScriptFile(self, index=None):
        tabWidget = self.tabEditorWidget.currentWidget()
        if not index:
            index = self.tabEditorWidget.currentIndex()
        if not tabWidget.path:
            fileName = self.tabEditorWidget.tabText(index) + '.py'
            folder = self.settings.value("pythonConsole/lastDirPath", QDir.homePath())
            pathFileName = os.path.join(folder, fileName)
            fileNone = True
        else:
            pathFileName = tabWidget.path
            fileNone = False
        saveAsFileTr = QCoreApplication.translate("PythonConsole", "Save File As")
        filename, filter = QFileDialog.getSaveFileName(self,
                                                       saveAsFileTr,
                                                       pathFileName, "Script file (*.py)")
        if filename:
            try:
                tabWidget.save(filename)
            except (IOError, OSError) as error:
                msgText = QCoreApplication.translate('PythonConsole',
                                                     'The file <b>{0}</b> could not be saved. Error: {1}').format(tabWidget.path,
                                                                                                                  error.strerror)
                self.callWidgetMessageBarEditor(msgText, 2, False)
                if fileNone:
                    tabWidget.path = None
                else:
                    tabWidget.path = pathFileName
                return

            if not fileNone:
                self.updateTabListScript(pathFileName, action='remove')
Esempio n. 18
0
 def getSaveFileName(self, parent=None, caption='', filter='', selectedFilter=None, useEncoding=False):
     if useEncoding:
         return self.getDialog(parent, caption, QFileDialog.AcceptSave, QFileDialog.AnyFile, filter, selectedFilter, useEncoding)
     res, filter = QFileDialog.getSaveFileName(parent, caption, getLastUsedDir(), filter)
     if res:
         setLastUsedDir(res)
     return res
Esempio n. 19
0
    def select_output_directory(self):
        """Select output directory"""
        # Input layer
        input_layer_path = self.layer.source()
        input_file_name = os.path.basename(input_layer_path)
        input_extension = os.path.splitext(input_file_name)[1]

        # Get current path
        current_file_path = self.output_path_line_edit.text()
        if not current_file_path or not os.path.exists(current_file_path):
            current_file_path = input_layer_path

        # Filtering based on input layer
        extension_mapping = {
            '.shp': tr('Shapefile (*.shp);;'),
            '.geojson': tr('GeoJSON (*.geojson);;'),
            '.tif': tr('Raster TIF/TIFF (*.tif, *.tiff);;'),
            '.tiff': tr('Raster TIF/TIFF (*.tiff, *.tiff);;'),
            '.asc': tr('Raster ASCII File (*.asc);;'),
        }
        # Open File Dialog
        file_path, __ = QFileDialog.getSaveFileName(
            self,
            tr('Output File'),
            current_file_path,
            extension_mapping[input_extension]
        )
        if file_path:
            self.output_path_line_edit.setText(file_path)
Esempio n. 20
0
    def on_btnSave_clicked(self):
        fileName, _ = QFileDialog.getSaveFileName(
            None, self.tr("Export Colors and elevations as XML"), QDir.homePath(), self.tr("XML files (*.xml *.XML)")
        )

        if fileName == "":
            return

        if not fileName.lower().endswith(".xml"):
            fileName += ".xml"

        doc = QDomDocument()
        colorsElem = doc.createElement("ReliefColors")
        doc.appendChild(colorsElem)

        colors = self.reliefColors()
        for c in colors:
            elem = doc.createElement("ReliefColor")
            elem.setAttribute("MinElevation", str(c.minElevation))
            elem.setAttribute("MaxElevation", str(c.maxElevation))
            elem.setAttribute("red", str(c.color.red()))
            elem.setAttribute("green", str(c.color.green()))
            elem.setAttribute("blue", str(c.color.blue()))
            colorsElem.appendChild(elem)

        with codecs.open(fileName, "w", encoding="utf-8") as f:
            f.write(doc.toString(2))
Esempio n. 21
0
    def chooseOutputFile(self):
        # get last used dir
        settings = QSettings()
        lastUsedDir = settings.value(self.lastUsedVectorDirSettingsKey, ".")

        # get selected filter
        selectedFilter = self.cboFileFormat.itemData(self.cboFileFormat.currentIndex())

        # ask for a filename
        filename, filter = QFileDialog.getSaveFileName(self, self.tr("Choose where to save the file"), lastUsedDir,
                                                       selectedFilter)
        if filename == "":
            return

        filterString = QgsVectorFileWriter.filterForDriver(selectedFilter)
        ext = filterString[filterString.find('.'):]
        ext = ext[:ext.find(' ')]

        if not filename.lower().endswith(ext):
            filename += ext

        # store the last used dir
        settings.setValue(self.lastUsedVectorDirSettingsKey, QFileInfo(filename).filePath())

        self.editOutputFile.setText(filename)
Esempio n. 22
0
    def exportAsSvg(self):
        self.repaintModel(controls=False)
        filename, fileFilter = QFileDialog.getSaveFileName(self,
                                                           self.tr('Save Model As SVG'), '',
                                                           self.tr('SVG files (*.svg *.SVG)'))
        if not filename:
            return

        if not filename.lower().endswith('.svg'):
            filename += '.svg'

        totalRect = self.scene.itemsBoundingRect()
        totalRect.adjust(-10, -10, 10, 10)
        svgRect = QRectF(0, 0, totalRect.width(), totalRect.height())

        svg = QSvgGenerator()
        svg.setFileName(filename)
        svg.setSize(QSize(totalRect.width(), totalRect.height()))
        svg.setViewBox(svgRect)
        svg.setTitle(self.model.displayName())

        painter = QPainter(svg)
        self.scene.render(painter, svgRect, totalRect)
        painter.end()

        self.bar.pushMessage("", self.tr("Model was correctly exported as SVG"), level=Qgis.Success, duration=5)
        self.repaintModel(controls=True)
Esempio n. 23
0
    def on_btnSave_clicked(self):
        fileName, _ = QFileDialog.getSaveFileName(None,
                                                  self.tr('Export Colors and elevations as XML'),
                                                  QDir.homePath(),
                                                  self.tr('XML files (*.xml *.XML)'))

        if fileName == '':
            return

        if not fileName.lower().endswith('.xml'):
            fileName += '.xml'

        doc = QDomDocument()
        colorsElem = doc.createElement('ReliefColors')
        doc.appendChild(colorsElem)

        colors = self.reliefColors()
        for c in colors:
            elem = doc.createElement('ReliefColor')
            elem.setAttribute('MinElevation', str(c.minElevation))
            elem.setAttribute('MaxElevation', str(c.maxElevation))
            elem.setAttribute('red', str(c.color.red()))
            elem.setAttribute('green', str(c.color.green()))
            elem.setAttribute('blue', str(c.color.blue()))
            colorsElem.appendChild(elem)

        with codecs.open(fileName, 'w', encoding='utf-8') as f:
            f.write(doc.toString(2))
Esempio n. 24
0
    def exportAsImage(self):
        filename = unicode(QFileDialog.getSaveFileName(self,
                                                       self.tr('Save Model As Image'), '',
                                                       self.tr('PNG files (*.png *.PNG)')))
        if not filename:
            return

        if not filename.lower().endswith('.png'):
            filename += '.png'

        totalRect = QRectF(0, 0, 1, 1)
        for item in self.scene.items():
            totalRect = totalRect.united(item.sceneBoundingRect())
        totalRect.adjust(-10, -10, 10, 10)

        img = QImage(totalRect.width(), totalRect.height(),
                     QImage.Format_ARGB32_Premultiplied)
        img.fill(Qt.white)
        painter = QPainter()
        painter.setRenderHint(QPainter.Antialiasing)
        painter.begin(img)
        self.scene.render(painter, totalRect, totalRect)
        painter.end()

        img.save(filename)
Esempio n. 25
0
    def save(self):
        toSave = []
        for row in range(self.tblParameters.rowCount()):
            algParams = {}
            algOutputs = {}
            col = 0
            alg = self.alg.getCopy()
            for param in alg.parameters:
                if param.hidden:
                    continue
                if isinstance(param, ParameterExtent):
                    col += 1
                    continue
                widget = self.tblParameters.cellWidget(row, col)
                if not self.setParamValue(param, widget, alg):
                    self.parent.lblProgress.setText(
                        self.tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1))
                    return
                algParams[param.name] = param.getValueAsCommandLineParameter()
                col += 1

            col = 0
            for param in alg.parameters:
                if param.hidden:
                    continue
                if isinstance(param, ParameterExtent):
                    widget = self.tblParameters.cellWidget(row, col)
                    if not self.setParamValue(param, widget, alg):
                        self.parent.lblProgress.setText(
                            self.tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1))
                        return
                    algParams[param.name] = unicode(param.value)
                col += 1

            for out in alg.outputs:
                if out.hidden:
                    continue
                widget = self.tblParameters.cellWidget(row, col)
                text = widget.getValue()
                if text.strip() != '':
                    algOutputs[out.name] = text.strip()
                    col += 1
                else:
                    self.parent.lblProgress.setText(
                        self.tr('<b>Wrong or missing parameter value: %s (row %d)</b>') % (out.description, row + 1))
                    return
            toSave.append({self.PARAMETERS: algParams, self.OUTPUTS: algOutputs})

        filename = unicode(QFileDialog.getSaveFileName(self,
                                                       self.tr('Save batch'),
                                                       None,
                                                       self.tr('JSON files (*.json)')))
        if filename:
            if not filename.endswith('.json'):
                filename += '.json'
            with open(filename, 'w') as f:
                json.dump(toSave, f)
Esempio n. 26
0
    def openOutput(sender=None, startFolder=None):
        fd = QFileDialog()
        filter =  "OGC GeoPackage (*.gpkg);;ESRI Shape File (*.shp);;Comma separated value File (excel) (*.csv);;geojson (*.geojson);;GML File (*.gml);;MapInfo TAB (*.tab);;SpatiaLite (*.sqlite);;KML (google earth) (*.kml);;Any File (*.*)"
        fName = fd.getSaveFileName( sender, "open file", filter=filter, directory=startFolder)

        if fName:
            return fName[0]
        else:
            return None
Esempio n. 27
0
 def open_keyword_cache_path(self):
     """Open File dialog to choose the keyword cache path."""
     # noinspection PyCallByClass,PyTypeChecker
     file_name, __ = QFileDialog.getSaveFileName(
         self,
         self.tr('Set keyword cache file'),
         self.leKeywordCachePath.text(),
         self.tr('Sqlite DB File (*.db)'))
     if file_name:
         self.leKeywordCachePath.setText(file_name)
Esempio n. 28
0
    def saveLog(self):
        fileName, filter = QFileDialog.getSaveFileName(self,
                                                       self.tr('Save file'), '.', self.tr('Log files (*.log *.LOG)'))

        if fileName == '':
            return

        if not fileName.lower().endswith('.log'):
            fileName += '.log'

        ProcessingLog.saveLog(fileName)
Esempio n. 29
0
    def saveResults(self, saveAll=False):
        currentItem = self.resultsTree.currentItem()
        if not saveAll and not hasattr(currentItem, "result"):
            QMessageBox.warning(self, "Save results", "No test item selected")
            return

        settings = QSettings('Boundless', 'qgistester')
        lastDirectory = settings.value('lastDirectory', '.')
        fileName, __ = QFileDialog.getSaveFileName(self,
                                               self.tr('Save file'),
                                               lastDirectory,
                                               self.tr('HTML files (*.html)'))

        # Needed to handle different return values in Qt4 and Qt5
        if isinstance(fileName, tuple):
            fileName = fileName[0]

        if fileName == '':
            return

        if not fileName.lower().endswith('.html'):
            fileName += '.html'

        settings.setValue('lastDirectory', QFileInfo(fileName).absoluteDir().absolutePath())

        out = '<html><head>'
        out += '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body>'

        if saveAll:
            for i in range(self.resultsTree.topLevelItemCount()):
                groupItem = self.resultsTree.topLevelItem(i)
                out += '<h3>{}</h3>'.format(groupItem.text(0))
                out += '<ul>'
                for j in range(groupItem.childCount()):
                    results = groupItem.child(j).result
                    out += '<li>[{}] {}'.format(self.resultTag[results.status], results.test.name)
                    if results.status not in [results.SKIPPED, results.PASSED]:
                        out += '<p>Failed at step {} with message</p>'.format(results.errorStep)
                        out += '<code>{}</code>'.format(results.errorMessage)
                    out += '</li>'
                out += '</ul>'
        else:
            results = self.resultsTree.currentItem().result
            out += '<h3>{}</h3>'.format(results.test.group)
            out += '<ul>'
            out += '<li>[{}] {}'.format(self.resultTag[results.status], results.test.name)
            if results.status not in [results.SKIPPED, results.PASSED]:
                out += '<p>Failed at step {} with message</p>'.format(results.errorStep)
                out += '<code>{}</code>'.format(results.errorMessage)
            out += '</li></ul>'
        out += '</body></html>'

        with codecs.open(fileName, 'w', encoding='utf-8') as f:
            f.write(out)
 def save_fig(self):
     formats = (
     "Joint Photographic Experts Group (*.jpg) (*.jpg);;Scalable Vector Grapics (*.svg) (*.svg);;"+
     "Portable Document Format (*.pdf) (*.pdf);;Tagged Image File Format (*.tif) (*.tif)"+
     ";;Encapsulated Postscript (*.eps) (*.eps)")
   
     if not(sys.platform == 'win32'):
        formats += ";;Portable Network Graphics  (*.png) (*.png)"
   
     fileName, __ = QFileDialog.getSaveFileName( self , "Save File", self.startDir, formats);
     self.figure.savefig(fileName)
Esempio n. 31
0
    def saveModel(self, saveAs) -> bool:
        if not self.validateSave(QgsModelDesignerDialog.SaveAction.SaveAsFile):
            return False

        model_name_matched_file_name = self.model().modelNameMatchesFilePath()
        if self.model().sourceFilePath() and not saveAs:
            filename = self.model().sourceFilePath()
        else:
            if self.model().sourceFilePath():
                initial_path = Path(self.model().sourceFilePath())
            elif self.model().name():
                initial_path = Path(ModelerUtils.modelsFolders()[0]) / (
                    self.model().name() + '.model3')
            else:
                initial_path = Path(ModelerUtils.modelsFolders()[0])

            filename, _ = QFileDialog.getSaveFileName(
                self, self.tr('Save Model'), initial_path.as_posix(),
                self.tr('Processing models (*.model3 *.MODEL3)'))
            if not filename:
                return False

            filename = QgsFileUtils.ensureFileNameHasExtension(
                filename, ['model3'])
            self.model().setSourceFilePath(filename)

            if not self.model().name() or self.model().name() == self.tr(
                    'model'):
                self.setModelName(Path(filename).stem)
            elif saveAs and model_name_matched_file_name:
                # if saving as, and the model name used to match the filename, then automatically update the
                # model name to match the new file name
                self.setModelName(Path(filename).stem)

        if not self.model().toFile(filename):
            if saveAs:
                QMessageBox.warning(
                    self, self.tr('I/O error'),
                    self.tr('Unable to save edits. Reason:\n {0}').format(
                        str(sys.exc_info()[1])))
            else:
                QMessageBox.warning(
                    self, self.tr("Can't save model"),
                    self.
                    tr("This model can't be saved in its original location (probably you do not "
                       "have permission to do it). Please, use the 'Save as…' option."
                       ))
            return False

        self.update_model.emit()
        if saveAs:
            self.messageBar().pushMessage(
                "",
                self.tr("Model was saved to <a href=\"{}\">{}</a>").format(
                    QUrl.fromLocalFile(filename).toString(),
                    QDir.toNativeSeparators(filename)),
                level=Qgis.Success,
                duration=5)

        self.setDirty(False)
        return True
Esempio n. 32
0
    def on_btnSave_clicked(self):
        f, __ = QFileDialog.getSaveFileName(self, 'Save Optimization File:',
                                            os.getcwd(), '*.gso')
        if f == '':
            return

        os.chdir(os.path.dirname(str(f)))
        ofile = OptimizationFile.OptimizationFile()
        ofile.ControlFile = self.ui.tbxControlFile.text()
        ofile.BaseLayer = self.ui.cmbBaseLayer.currentText()
        for i in range(self.ui.tblOptAttributes.rowCount()):
            col1 = self.ui.tblOptAttributes.item(
                i, 0) or self.ui.tblOptAttributes.cellWidget(i, 0)
            col2 = self.ui.tblOptAttributes.item(i, 1)
            col3 = self.ui.tblOptAttributes.item(i, 2)
            col4 = self.ui.tblOptAttributes.item(i, 3)
            col5 = self.ui.tblOptAttributes.item(i, 4)
            if col1 and col2 and col3 and col4 and col5:
                try:
                    col1 = str(
                        self.ui.tblOptAttributes.cellWidget(i,
                                                            0).currentText())
                except:
                    col1 = str(self.ui.tblOptAttributes.item(i, 0).text())
                col2 = str(self.ui.tblOptAttributes.item(i, 1).text())
                col3 = str(self.ui.tblOptAttributes.item(i, 2).text())
                col4 = str(self.ui.tblOptAttributes.item(i, 3).text())
                col5 = str(self.ui.tblOptAttributes.item(i, 4).text())
                ofile.OptAttributes.update({i: [col1, col2, col3, col4, col5]})
        for i in range(self.ui.tblObjAttributes.rowCount()):
            col1 = self.ui.tblObjAttributes.item(
                i, 0) or self.ui.tblObjAttributes.cellWidget(i, 0)
            col2 = self.ui.tblObjAttributes.item(
                i, 1) or self.ui.tblObjAttributes.cellWidget(i, 1)
            if col1 and col2:
                try:
                    col1 = str(
                        self.ui.tblObjAttributes.cellWidget(i,
                                                            0).currentText())
                except:
                    col1 = str(self.ui.tblObjAttributes.item(i, 0).text())
                try:
                    col2 = str(
                        self.ui.tblObjAttributes.cellWidget(i,
                                                            1).currentText())
                except:
                    col2 = str(self.ui.tblObjAttributes.item(i, 1).text())
                col3 = str(self.ui.tblObjAttributes.item(i, 2).text())
                ofile.ObjAttributes.update({i: [col1, col2, col3]})

        ofile.T0 = self.ui.tbxT0.text()
        ofile.Tf = self.ui.tbxTf.text()
        ofile.dwell = self.ui.tbxDwell.text()
        ofile.feps = self.ui.tbxTolerance.text()
        ofile.maxeval = self.ui.tbxMaxEval.text()
        ofile.maxiter = self.ui.tbxMaxIter.text()
        ofile.maxaccept = self.ui.tbxMaxAccept.text()
        ofile.m = self.ui.tbxm.text()
        ofile.n = self.ui.tbxn.text()
        ofile.quench = self.ui.tbxQuench.text()
        ofile.boltzmann = self.ui.tbxBoltzmann.text()
        ofile.WriteFile(f)
Esempio n. 33
0
    def save(self):
        toSave = []
        for row in range(self.tblParameters.rowCount()):
            algParams = {}
            algOutputs = {}
            col = 0
            alg = self.alg.getCopy()
            for param in alg.parameters:
                if param.hidden:
                    continue
                if isinstance(param, ParameterExtent):
                    col += 1
                    continue
                widget = self.tblParameters.cellWidget(row, col)
                if not self.setParamValue(param, widget, alg):
                    self.parent.lblProgress.setText(
                        self.tr('<b>Missing parameter value: %s (row %d)</b>')
                        % (param.description, row + 1))
                    return
                algParams[param.name] = param.getValueAsCommandLineParameter()
                col += 1
            col = 0
            for param in alg.parameters:
                if param.hidden:
                    continue
                if isinstance(param, ParameterExtent):
                    widget = self.tblParameters.cellWidget(row, col)
                    if not self.setParamValue(param, widget, alg):
                        self.parent.lblProgress.setText(
                            self.
                            tr('<b>Missing parameter value: %s (row %d)</b>') %
                            (param.description, row + 1))
                        return
                    algParams[param.name] = unicode(param.value())
                col += 1
            for out in alg.outputs:
                if out.hidden:
                    continue
                widget = self.tblParameters.cellWidget(row, col)
                text = widget.getValue()
                if text.strip() != '':
                    algOutputs[out.name] = text.strip()
                    col += 1
                else:
                    self.parent.lblProgress.setText(
                        self.
                        tr('<b>Wrong or missing parameter value: %s (row %d)</b>'
                           ) % (out.description, row + 1))
                    return
            toSave.append({
                self.PARAMETERS: algParams,
                self.OUTPUTS: algOutputs
            })

        filename = unicode(
            QFileDialog.getSaveFileName(self, self.tr('Save batch'), None,
                                        self.tr('JSON files (*.json)')))
        if filename:
            if not filename.endswith('.json'):
                filename += '.json'
            with open(filename, 'w') as f:
                json.dump(toSave, f)
Esempio n. 34
0
    def save(self):
        toSave = []
        context = dataobjects.createContext()
        for row in range(self.batchRowCount()):
            algParams = {}
            algOutputs = {}
            col = 0
            alg = self.alg
            for param in alg.parameterDefinitions():
                if param.flags() & QgsProcessingParameterDefinition.FlagHidden:
                    continue
                if param.isDestination():
                    continue
                wrapper = self.wrappers[row][col]

                # For compatibility with 3.x API, we need to check whether the wrapper is
                # the deprecated WidgetWrapper class. If not, it's the newer
                # QgsAbstractProcessingParameterWidgetWrapper class
                # TODO QGIS 4.0 - remove
                if issubclass(wrapper.__class__, WidgetWrapper):
                    widget = wrapper.widget
                else:
                    widget = wrapper.wrappedWidget()

                value = wrapper.parameterValue()

                if not param.checkValueIsAcceptable(value, context):
                    self.parent.messageBar().pushMessage(
                        "",
                        self.tr(
                            'Wrong or missing parameter value: {0} (row {1})').
                        format(param.description(), row + 1),
                        level=Qgis.Warning,
                        duration=5)
                    return
                algParams[param.name()] = param.valueAsPythonString(
                    value, context)
                col += 1
            for out in alg.destinationParameterDefinitions():
                if out.flags() & QgsProcessingParameterDefinition.FlagHidden:
                    continue
                widget = self.tblParameters.cellWidget(row + 1, col)
                text = widget.getValue()
                if text.strip() != '':
                    algOutputs[out.name()] = text.strip()
                    col += 1
                else:
                    self.parent.messageBar().pushMessage(
                        "",
                        self.tr('Wrong or missing output value: {0} (row {1})'
                                ).format(out.description(), row + 1),
                        level=Qgis.Warning,
                        duration=5)
                    return
            toSave.append({
                self.PARAMETERS: algParams,
                self.OUTPUTS: algOutputs
            })

        settings = QgsSettings()
        last_path = settings.value("/Processing/LastBatchPath",
                                   QDir.homePath())
        filename, __ = QFileDialog.getSaveFileName(
            self, self.tr('Save Batch'), last_path,
            self.tr('JSON files (*.json)'))
        if filename:
            if not filename.endswith('.json'):
                filename += '.json'
            last_path = QFileInfo(filename).path()
            settings.setValue('/Processing/LastBatchPath', last_path)
            with open(filename, 'w') as f:
                json.dump(toSave, f)
Esempio n. 35
0
 def select_output_file(self):
     filename = QFileDialog.getSaveFileName(
         self.dlg, "Select output file ", "", '*.tif'
     )
     self.dlg.lineEdit.setText(filename[0])
 def select_output_vector(self):
     filename, _filter = QFileDialog.getSaveFileName(
         self.dlg, "Select   output vector ", "", '*.shp')
     self.dlg.lineEdit.setText(filename)
Esempio n. 37
0
 def browse(self):
     filename, _ = QFileDialog.getSaveFileName(self, "Footprints filename", "", "GPKG Files (*.gpkg)")
     if filename:
         self.txtFilename.setText(filename)
Esempio n. 38
0
    def run(self):
        """Run method that performs all the real work"""
        # project folder
        qgz_path = QgsProject.instance().fileName()

        filename = QFileDialog.getSaveFileName(QFileDialog(), "Save Folder",
                                               qgz_path, 'QGZ files (*.qgz)')
        # temporary folder
        temp_path = tempfile.gettempdir()
        QgsMessageLog.logMessage("Start", 'embedded SVG', 0)
        try:
            # extraction of qgs file
            with ZipFile(qgz_path, "r") as in_qgz:
                for f in in_qgz.infolist():
                    if f.filename.endswith('.qgs'):
                        in_qgz.extract(f.filename, temp_path)
                        datafile = temp_path + "\\" + f.filename

            with open(datafile, 'r') as f:
                tree = ET.parse(datafile)
                root = tree.getroot()

                # search for layers
                for symbol in root.iter("layer-tree-layer"):
                    sym_att = symbol.attrib
                    text = json.dumps(str(sym_att),
                                      ensure_ascii=False).encode('utf-8')
                    try:

                        if b".shp" not in text:
                            continue

                        else:

                            test = text.decode().split("'")
                            matching = [s for s in test if ".shp" in s]
                            layer_paths = [
                                layer.source() for layer in
                                QgsProject.instance().mapLayers().values()
                            ]

                            for layer in layer_paths:
                                test = matching[0].split("/")

                                if test[-1] in layer:
                                    symbol.set("source", layer)

                                for symbol2 in root.iter("datasource"):

                                    if test[-1] in symbol2.text and test[
                                            -1] in layer:
                                        symbol2.text = layer

                    except Exception as e:
                        QgsMessageLog.logMessage(" search fail: " + str(e),
                                                 'embedded SVG', 0)

                # search for svg filenames
                for symbol in root.iter("prop"):
                    sym_att = symbol.attrib
                    text = json.dumps(str(sym_att),
                                      ensure_ascii=False).encode('utf-8')

                    try:
                        if b".svg" not in text:

                            continue
                        else:

                            test = text.decode().split("'")
                            matching = [s for s in test if ".svg" in s]

                            # SVG Ordner des Alkis Plugins
                            svg_folder = QgsSymbolLayerUtils.listSvgFiles()

                            # search for svg name in svg folder
                            for svg_pic in svg_folder:

                                if matching[0] in svg_pic:

                                    image = open(svg_pic, 'r')

                            # encode svg file to base64 and write into qgs
                            image_read = str(image.read())
                            image_64_encode = base64.b64encode(
                                image_read.encode("utf-8"))
                            image_64_encode_str = str(image_64_encode, "utf-8")
                            encoded_svg = "base64:" + image_64_encode_str
                            symbol.set("v", encoded_svg)
                    except Exception as e:
                        QgsMessageLog.logMessage(" search fail: " + str(e),
                                                 'embedded SVG', 0)

            tree.write(datafile)
            file_paths = []
            # new zipfile for new qgs file
            with ZipFile(filename[0][:-4] + ".qgz", 'w') as zip:

                # with ZipFile(qgz_path[:-4] + "_svg_embedded.qgz", 'w') as zip:
                zip.write(datafile, basename(datafile))

            os.remove(datafile)

            QgsMessageLog.logMessage("Finish", 'embedded SVG', 0)
        except Exception as e:
            QgsMessageLog.logMessage(" search fail: " + str(e), 'embedded SVG',
                                     0)
Esempio n. 39
0
    def load_fieldbook(self):
        """ Import an electric fieldbook from file (GSI, JOB/ARE, ...)
        """
        if get_coordlist() is None:
            QMessageBox.warning(
                self.iface.mainWindow(), tr("Warning"),
                tr("No coordinate list is opened, coordinates will be lost from the fieldbook"
                   ))
        fname, __ = QFileDialog.getOpenFileName(
            self.iface.mainWindow(),
            tr('Electric fieldbook'),
            config.homedir,
            filter=tr('Nikon RAW (*.raw);;'
                      'Leica GSI (*.gsi);;'
                      'Leica IDX (*.idx);;'
                      'Geodimeter JOB/ARE (*.job *.are);;'
                      'Sokkia CRD (*.crd);;'
                      'SurvCE RW5 (*.rw5);;'
                      'STONEX DAT (*.dat);;'
                      'Text dump (*.dmp)'))
        if not fname:
            return

        fb_dbf = None
        ofname = None

        # file selected
        # make a copy of dbf template if not are is loaded
        if QRegExp(r'\.are$', Qt.CaseInsensitive).indexIn(fname) == -1:
            # ask for table name
            ofname, __ = QFileDialog.getSaveFileName(
                self.iface.mainWindow(),
                tr('QGIS fieldbook'),
                QFileInfo(fname).absolutePath(),
                filter=tr('Sqlite file (*.sqlite)'))
            if not ofname:
                return
            # remember last input dir
            config.homedir = QFileInfo(fname).absolutePath()
            config.store_config()

            # start with 'fb_'?
            if QRegExp('fb_').indexIn(QFileInfo(ofname).baseName()):
                ofname = QDir.cleanPath(
                    QFileInfo(ofname).absolutePath() + QDir().separator() +
                    'fb_' + QFileInfo(ofname).fileName())

            if QRegExp(r'\.sqlite', Qt.CaseInsensitive).indexIn(ofname) == -1:
                ofname += '.sqlite'
            tempname = QDir.cleanPath(self.plugin_dir + QDir().separator() +
                                      'template' + QDir().separator() +
                                      'fb_template.sqlite')
            if not QFile(tempname).copy(ofname):
                res = QMessageBox.warning(
                    self.iface.mainWindow(), tr('File warning'),
                    tr('Fieldbook file exists. Replace it?'),
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

                if res == QMessageBox.No:
                    return
            fb_dbf = QgsVectorLayer(ofname,
                                    QFileInfo(ofname).baseName(), 'ogr')
            if not fb_dbf or not fb_dbf.isValid():
                QMessageBox.warning(self.iface.mainWindow(),
                                    tr('File warning'),
                                    tr('Fieldbook loading error'),
                                    QMessageBox.Ok)
                return
            QgsProject.instance().addMapLayer(fb_dbf)

        if QRegExp(r'\.gsi$', Qt.CaseInsensitive).indexIn(fname) > -1:
            fb = LeicaGsi(fname)
        elif QRegExp(r'\.job$', Qt.CaseInsensitive).indexIn(fname) > -1 or \
                QRegExp(r'\.are$', Qt.CaseInsensitive).indexIn(fname) > -1:
            fb = JobAre(fname)
        elif QRegExp(r'\.crd$', Qt.CaseInsensitive).indexIn(fname) > -1:
            fb = Sdr(fname)
        elif QRegExp(r'\.rw5$', Qt.CaseInsensitive).indexIn(fname) > -1:
            fb = SurvCE(fname)
        elif QRegExp(r'\.dat$', Qt.CaseInsensitive).indexIn(fname) > -1:
            fb = Stonex(fname)
        elif QRegExp(r'\.dmp$', Qt.CaseInsensitive).indexIn(fname) > -1:
            fb = Dump(fname)
        elif QRegExp(r'\.idx$', Qt.CaseInsensitive).indexIn(fname) > -1:
            fb = Idex(fname)
        elif QRegExp(r'\.raw$', Qt.CaseInsensitive).indexIn(fname) > -1:
            fb = NikonRaw(fname)
        else:
            QMessageBox.warning(self.iface.mainWindow(), tr('File warning'),
                                tr('Unknown fieldbook type'), QMessageBox.Ok)
            return
        i = 10  # ordinal number for fieldbook records
        # fb_dbf.startEditing()
        fb.open()
        n_fb = 0  # fieldbook records stored
        n_co = 0  # points stored in coordinate list
        while True:
            # get next observation/station data from fieldbook
            r = fb.parse_next()
            if r is None:
                break  # end of file
            if 'station' in r:
                # add row to fieldbook table
                record = QgsFeature()
                # add & initialize attributes
                record.setFields(fb_dbf.fields(), True)
                j = fb_dbf.dataProvider().fieldNameIndex('id')
                if j != -1:
                    record.setAttribute(j, i)
                for key in r:
                    j = fb_dbf.dataProvider().fieldNameIndex(key)
                    if j != -1:
                        record.setAttribute(j, r[key])
                (xxx, yyy) = fb_dbf.dataProvider().addFeatures([record])
                if not xxx:
                    QMessageBox.warning(self.iface.mainWindow(),
                                        tr('File warning'),
                                        tr('Fieldbook record creation error'),
                                        tr('OK'))
                    return
                n_fb += 1
            if 'station_e' in r or 'station_z' in r:
                # store station coordinates too
                dimension = 0
                if 'station_z' in r:
                    dimension += 1
                else:
                    r['station_z'] = None
                if 'station_e' in r and 'station_n' in r:
                    dimension += 2
                else:
                    r['station_e'] = None
                    r['station_n'] = None
                if 'pc' not in r:
                    r['pc'] = None
                if 'pt' not in r:
                    r['pt'] = None
                p = Point(r['point_id'], r['station_e'], r['station_n'],
                          r['station_z'], r['pc'], r['pt'])
                qp = ScPoint(p)
                qp.store_coord(dimension)
                n_co += 1
            if 'e' in r or 'z' in r:
                # store coordinates too
                dimension = 0
                if 'z' in r:
                    dimension += 1
                else:
                    r['z'] = None
                if 'e' in r and 'n' in r:
                    dimension += 2
                else:
                    r['e'] = None
                    r['n'] = None
                if 'pc' not in r:
                    r['pc'] = None
                if 'pt' not in r:
                    r['pt'] = None
                p = Point(r['point_id'], r['e'], r['n'], r['z'], r['pc'],
                          r['pt'])
                qp = ScPoint(p)
                qp.store_coord(dimension)
                n_co += 1
            i += 10
        # fb_dbf.commitChanges()
        if QRegExp(r'\.are$', Qt.CaseInsensitive).indexIn(fname) == -1:
            if n_fb == 0:  # no observations
                QgsProject.instance().removeMapLayer(fb_dbf.id())
                # remove empty file
                QFile(ofname).remove()
                if n_co == 0:  # no coordinates
                    QMessageBox.warning(
                        self.iface.mainWindow(), tr("Warning"),
                        tr("Neither coordinates nor observations found"))
                else:
                    QMessageBox.warning(self.iface.mainWindow(), tr("Warning"),
                                        tr("No observations found"))
        self.log.write()
        self.log.write_log(tr("Fieldbook loaded: ") + fname)
        self.log.write("    %d observations, %d coordinates" % (n_fb, n_co))
        fb.close()
 def select_output_gaps(self):
     filename, _filter = QFileDialog.getSaveFileName(
         self.dlg, "Select   output gaps ", "", '*.shp')
     self.dlg.lineEdit_2.setText(filename)
Esempio n. 41
0
 def open_file_browser(self):
     output_file, __ = QFileDialog.getSaveFileName(self.parent,
                                                   tr('Save shapefile'),
                                                   filter='SHP (*.shp)')
     #Fix the filename bug
     self.le_output_filepath.setText(output_file)
Esempio n. 42
0
 def select_output_file(self):
     filename, _filter = QFileDialog.getSaveFileName(
         self.dlg, "Sélectionner le fichier de sortie", "", '*.pdf')
     self.dlg.lineEdit.setText(filename)
 def select_output_file(self):
     filename, _filter = QFileDialog.getSaveFileName(
         self.dlg, "Select output file ", "", '*.csv')
     self.dlg.lineEdit.setText(filename)
Esempio n. 44
0
def selectFileNameToSave(line_edit_widget, title, file_filter, parent,
                         extension):
    filename, matched_filter = QFileDialog.getSaveFileName(
        parent, title, line_edit_widget.text(), file_filter)
    line_edit_widget.setText(filename if filename.endswith(extension) else (
        filename + extension if filename else ''))
Esempio n. 45
0
 def browseOutputFile(self):
     filename = QFileDialog.getSaveFileName(self, "Select output file ", "",
                                            '*.tif')
     self.outputPlace.setText(filename[0])
Esempio n. 46
0
    def export_dock_content(self, output_format: OutputFormats):
        """ Export the current displayed metadata sheet to the given format. """
        layer_name = iface.activeLayer().name()

        file_path = os.path.join(
            self.settings.value("UI/lastFileNameWidgetDir"),
            '{name}.{ext}'.format(name=layer_name, ext=output_format.ext)
        )
        output_file = QFileDialog.getSaveFileName(
            self,
            tr("Save File as {format}").format(format=output_format.label),
            file_path,
            "{label} (*.{ext})".format(
                label=output_format.label,
                ext=output_format.ext,
            )
        )
        if output_file[0] == '':
            return

        self.settings.setValue("UI/lastFileNameWidgetDir", os.path.dirname(output_file[0]))

        output_file_path = output_file[0]
        parent_folder = str(Path(output_file_path).parent)

        if output_format == OutputFormats.PDF:
            printer = QPrinter()
            printer.setOutputFormat(QPrinter.PdfFormat)
            printer.setPageMargins(20, 20, 20, 20, QPrinter.Millimeter)
            printer.setOutputFileName(output_file_path)
            self.viewer.print(printer)
            iface.messageBar().pushSuccess(
                tr("Export PDF"),
                tr(
                    "The metadata has been exported as PDF successfully in "
                    "<a href=\"{}\">{}</a>").format(parent_folder, output_file_path)
            )

        elif output_format in [OutputFormats.HTML, OutputFormats.DCAT]:
            if output_format == OutputFormats.HTML:
                data_str = self.viewer.page().currentFrame().toHtml()
            else:
                sql = self.sql_for_layer(
                    self.current_datasource_uri, output_format=OutputFormats.DCAT)
                data = self.current_connection.executeSql(sql)
                with open(resources_path('xml', 'dcat.xml')) as xml_file:
                    xml_template = xml_file.read()

                locale = QgsSettings().value("locale/userLocale", QLocale().name())
                locale = locale.split('_')[0].lower()

                xml = parseString(xml_template.format(locale=locale, content=data[0][0]))
                data_str = xml.toprettyxml()

            with open(output_file[0], "w") as file_writer:
                file_writer.write(data_str)
            iface.messageBar().pushSuccess(
                tr("Export") + ' ' + output_format.label,
                tr(
                    "The metadata has been exported as {format} successfully in "
                    "<a href=\"{folder}\">{path}</a>").format(
                    format=output_format.label, folder=parent_folder, path=output_file_path)
            )
    def showSelectionDialog(self):
        if isinstance(self.output, QgsProcessingParameterFolderDestination):
            self.selectDirectory()
            return

        filefilter = getFileFilter(self.output)
        settings = QgsSettings()
        if settings.contains('/Processing/LastBatchOutputPath'):
            path = str(settings.value('/Processing/LastBatchOutputPath'))
        else:
            path = ''
        filename, selectedFileFilter = QFileDialog.getSaveFileName(
            self, self.tr('Save File'), path, filefilter)
        if filename:
            if not filename.lower().endswith(
                    tuple(re.findall("\\*(\\.[a-z]{1,10})", filefilter))):
                ext = re.search("\\*(\\.[a-z]{1,10})", selectedFileFilter)
                if ext:
                    filename += ext.group(1)
            settings.setValue('/Processing/LastBatchOutputPath',
                              os.path.dirname(filename))
            dlg = AutofillDialog(self.alg)
            dlg.exec_()
            if dlg.mode is not None:
                try:
                    if dlg.mode == AutofillDialog.DO_NOT_AUTOFILL:
                        self.table.cellWidget(self.row,
                                              self.col).setValue(filename)
                    elif dlg.mode == AutofillDialog.FILL_WITH_NUMBERS:
                        n = self.table.rowCount() - self.row
                        for i in range(n):
                            name = filename[:filename.rfind('.')] \
                                + str(i + 1) + filename[filename.rfind('.'):]
                            self.table.cellWidget(i + self.row,
                                                  self.col).setValue(name)
                    elif dlg.mode == AutofillDialog.FILL_WITH_PARAMETER:
                        n = self.table.rowCount() - self.row
                        for i in range(n):
                            widget = self.table.cellWidget(
                                i + self.row, dlg.param_index)
                            param = self.alg.parameterDefinitions()[
                                dlg.param_index]
                            if isinstance(
                                    param,
                                (QgsProcessingParameterRasterLayer,
                                 QgsProcessingParameterFeatureSource,
                                 QgsProcessingParameterVectorLayer,
                                 QgsProcessingParameterMultipleLayers)):
                                v = widget.value()
                                if isinstance(v, QgsMapLayer):
                                    s = v.name()
                                else:
                                    s = os.path.basename(v)
                                    s = os.path.splitext(s)[0]
                            elif isinstance(param,
                                            QgsProcessingParameterBoolean):
                                s = str(widget.currentIndex() == 0)
                            elif isinstance(param, QgsProcessingParameterEnum):
                                s = str(widget.currentText())
                            elif isinstance(param,
                                            QgsProcessingParameterMatrix):
                                s = str(widget.table)
                            else:
                                s = str(widget.text())
                            name = filename[:filename.rfind('.')] + s \
                                + filename[filename.rfind('.'):]
                            self.table.cellWidget(i + self.row,
                                                  self.col).setValue(name)
                except:
                    pass
 def setNetworkOutput(self):
     file_name, _ = QFileDialog.getSaveFileName(self, "Save output file ",
                                                "catchment_network",
                                                '*.shp')
     if file_name:
         self.networkText.setText(file_name)
Esempio n. 49
0
 def select_m3_shp_output(self):
     self.dlg.m3_lineEdit_output.setText("")
     self.shpPath, self._filter = QFileDialog.getSaveFileName(
         self.dlg, "Select input shp file", "", '*.shp')
     self.dlg.m3_lineEdit_output.setText(self.shpPath)
Esempio n. 50
0
 def select_output_file(self):
     filename, _filter = QFileDialog.getSaveFileName(
         self.dlg, "Select output file ", "", "*.tif")
     self.dlg.OutputFile.setText(filename)
Esempio n. 51
0
 def setIrrepOutputFilePath(self):
     (irrepOutputFilePathNameText,
      fileTypeDetailsText) = QFileDialog.getSaveFileName(
          self, 'Save irreplaceability output file', '*.csv')
     self.outputLineEdit.setText(irrepOutputFilePathNameText)
 def saveDialog(self):
     filename = QFileDialog.getSaveFileName(None, "Save File", self.dirname,
                                            "Text CSV (*.csv)")[0]
     if filename:
         self.dirname = os.path.dirname(filename)
         self.saveFile(filename)
Esempio n. 53
0
    def showSelectionDialog(self):
        if isinstance(self.output, OutputDirectory):
            self.selectDirectory()
            return

        filefilter = self.output.getFileFilter(self.alg)
        settings = QSettings()
        if settings.contains('/Processing/LastBatchOutputPath'):
            path = unicode(settings.value('/Processing/LastBatchOutputPath'))
        else:
            path = ''
        filename, selectedFileFilter = QFileDialog.getSaveFileName(
            self, self.tr('Save file'), path, filefilter)
        # fix_print_with_import
        print(filename, selectedFileFilter)
        if filename:
            if not filename.lower().endswith(
                    tuple(re.findall("\*(\.[a-z]{1,10})", filefilter))):
                ext = re.search("\*(\.[a-z]{1,10})", selectedFileFilter)
                if ext:
                    filename += ext.group(1)
            settings.setValue('/Processing/LastBatchOutputPath',
                              os.path.dirname(filename))
            dlg = AutofillDialog(self.alg)
            dlg.exec_()
            if dlg.mode is not None:
                try:
                    if dlg.mode == AutofillDialog.DO_NOT_AUTOFILL:
                        self.table.cellWidget(self.row,
                                              self.col).setValue(filename)
                    elif dlg.mode == AutofillDialog.FILL_WITH_NUMBERS:
                        n = self.table.rowCount() - self.row
                        for i in range(n):
                            name = filename[:filename.rfind('.')] \
                                + unicode(i + 1) + filename[filename.rfind('.'):]
                            self.table.cellWidget(i + self.row,
                                                  self.col).setValue(name)
                    elif dlg.mode == AutofillDialog.FILL_WITH_PARAMETER:
                        n = self.table.rowCount() - self.row
                        for i in range(n):
                            widget = self.table.cellWidget(
                                i + self.row, dlg.param)
                            param = self.alg.parameters[dlg.param]
                            if isinstance(
                                    param,
                                (ParameterRaster, ParameterVector,
                                 ParameterTable, ParameterMultipleInput)):
                                s = unicode(widget.getText())
                                s = os.path.basename(s)
                                s = os.path.splitext(s)[0]
                            elif isinstance(param, ParameterBoolean):
                                s = unicode(widget.currentIndex() == 0)
                            elif isinstance(param, ParameterSelection):
                                s = unicode(widget.currentText())
                            elif isinstance(param, ParameterFixedTable):
                                s = unicode(widget.table)
                            else:
                                s = unicode(widget.text())
                            name = filename[:filename.rfind('.')] + s \
                                + filename[filename.rfind('.'):]
                            self.table.cellWidget(i + self.row,
                                                  self.col).setValue(name)
                except:
                    pass
Esempio n. 54
0
 def setDistShapeFile(self):
     (distShapefilePathNameText,
      fileTypeDetailsText) = QFileDialog.getSaveFileName(
          self, 'Save new shapefile', '*.shp')
     self.filePathlineEdit.setText(distShapefilePathNameText)
Esempio n. 55
0
def ras2dSaveMeshPtsToGeometry(rgis, geoFileName=None):
    """Saves mesh points from current schema and table 'mesh_pts' to HEC-RAS geometry file"""
    if not geoFileName:
        s = QSettings()
        lastGeoFileDir = s.value('rivergis/lastGeoDir', '')
        geoFileName, __ = QFileDialog.getSaveFileName(
            None,
            'Target HEC-RAS geometry file',
            directory=lastGeoFileDir,
            filter='HEC-RAS geometry (*.g**)')
        if not geoFileName:
            return
        s.setValue('rivergis/lastGeoDir', os.path.dirname(geoFileName))

    rgis.addInfo('<br><b>Saving 2D Flow Area to HEC-RAS geometry file...</b>')

    # get mesh points extent
    qry = '''
    SELECT
        ST_XMin(ST_Collect(geom)) AS xmin,
        ST_XMax(ST_collect(geom)) AS xmax,
        ST_YMin(ST_collect(geom)) AS ymin,
        ST_YMax(ST_collect(geom)) AS ymax
    FROM
        "{0}"."MeshPoints2d";
    '''
    qry = qry.format(rgis.rdb.SCHEMA)
    pExt = rgis.rdb.run_query(qry, True)[0]
    xmin, xmax, ymin, ymax = [
        pExt['xmin'], pExt['xmax'], pExt['ymin'], pExt['ymax']
    ]
    buf = max(0.2 * (xmax - xmin), 0.2 * (ymax - ymin))
    pExtStr = '{:.2f}, {:.2f}, {:.2f}, {:.2f}'.format(xmin - buf, xmax + buf,
                                                      ymax + buf, ymin - buf)

    # get list of mesh areas
    qry = '''
    SELECT
        "AreaID",
        "Name",
        ST_X(ST_Centroid(geom)) AS x,
        ST_Y(ST_Centroid(geom)) AS y,
        ST_NPoints(geom) AS ptsnr
    FROM
        "{0}"."FlowAreas2d";
    '''
    qry = qry.format(rgis.rdb.SCHEMA)
    t = ''

    for area in rgis.rdb.run_query(qry, True):
        qry = '''
        SELECT
            ST_AsText(geom) AS geom
        FROM
            "{0}"."FlowAreas2d"
        WHERE
            "AreaID" = {1};
        '''
        qry = qry.format(rgis.rdb.SCHEMA, area['AreaID'])
        res = rgis.rdb.run_query(qry, True)[0]['geom']
        ptsList = res[9:-2].split(',')
        ptsTxt = ''
        for pt in ptsList:
            x, y = [float(c) for c in pt.split(' ')]
            ptsTxt += '{:>16.4f}{:>16.4f}\n'.format(x, y)
        t += '''

Storage Area={0:<14},{1:14},{2:14}
Storage Area Surface Line= {3:d}
{4}
Storage Area Type= 0
Storage Area Area=
Storage Area Min Elev=
Storage Area Is2D=-1
Storage Area Point Generation Data=,,,
'''.format(area['Name'], area['x'], area['y'], area['ptsnr'], ptsTxt)

        qry = '''
        SELECT
            ST_X(geom) AS x,
            ST_Y(geom) AS y
        FROM
            "{0}"."MeshPoints2d"
        WHERE
            "AreaID" = {1};
        '''
        qry = qry.format(rgis.schema, area['AreaID'])
        pkty = rgis.rdb.run_query(qry, True)

        coords = ''
        for i, pt in enumerate(pkty):
            if i % 2 == 0:
                coords += '{:16.2f}{:16.2f}'.format(float(pt['x']),
                                                    float(pt['y']))
            else:
                coords += '{:16.2f}{:16.2f}\n'.format(float(pt['x']),
                                                      float(pt['y']))

        t += '''Storage Area 2D Points= {0}
{1}
Storage Area 2D PointsPerimeterTime=25Jan2015 01:00:00
Storage Area Mannings=0.06
2D Cell Volume Filter Tolerance=0.003
2D Face Profile Filter Tolerance=0.003
2D Face Area Elevation Profile Filter Tolerance=0.003
2D Face Area Elevation Conveyance Ratio=0.02

'''.format(len(pkty), coords)

    if not os.path.isfile(geoFileName):
        createNewGeometry(geoFileName, pExtStr)

    geoFile = open(geoFileName, 'r')
    geoLines = geoFile.readlines()
    geoFile.close()

    geoFile = open(geoFileName, 'w')
    geo = ""
    for line in geoLines:
        if not line.startswith('Chan Stop Cuts'):
            geo += line
        else:
            geo += t
            geo += line
    geoFile.write(geo)
    geoFile.close()

    rgis.addInfo('Saved to:\n{}'.format(geoFileName))
Esempio n. 56
0
 def exportToCsv(self):
     saveFileName, __ = QFileDialog.getSaveFileName(None)
     if saveFileName:
         with open(saveFileName, 'w') as csvFile:
             csvWriter = csv.writer(csvFile,
                                    delimiter=',',
                                    quoting=csv.QUOTE_MINIMAL)
             headerWriter = ['District', 'Population', 'To Target']
             for d in dataFieldList:
                 headerWriter.append(d.name)
             csvWriter.writerow(headerWriter)
             for p in range(0, self.districts + 1):
                 rowWriter = [str(p)]
                 rowWriter.append(str(distPop[p]))
                 rowWriter.append(str(self.targetpop - distPop[p]))
                 for d in dataFieldList:
                     if d.type == 1:
                         self.attrdockwidget.tblPop.setItem(
                             p, 3 + rowNum,
                             QTableWidgetItem(str(d.field_sum[p])))
                     elif d.type == 2:
                         if distPop[p] > 0:
                             QgsMessageLog.logMessage(
                                 str(d.field_sum[p]) + " " +
                                 str(distPop[p]))
                             rowWriter.append(
                                 str(
                                     round(
                                         float(
                                             float(d.field_sum[p]) /
                                             float(distPop[p])) * 100, 2)) +
                                 '%')
                         else:
                             rowWriter.append('0.00%')
                     elif d.type == 3:
                         if self.totalpop > 0:
                             QgsMessageLog.logMessage(
                                 str(d.field_sum[p]) + " " +
                                 str(self.totalpop))
                             rowWriter.append(
                                 str(
                                     round(
                                         float(
                                             float(d.field_sum[p]) /
                                             float(self.totalpop)) *
                                         100, 2)) + '%')
                         else:
                             rowWriter.append('0.00%')
                     elif d.type == 4:
                         if d.total_sum > 0:
                             QgsMessageLog.logMessage(
                                 str(d.field_sum[p]) + " " +
                                 str(d.total_sum))
                             rowWriter.append(
                                 str(
                                     round(
                                         float(
                                             float(d.field_sum[p]) /
                                             float(d.total_sum)) *
                                         100, 2)) + '%')
                         else:
                             rowWriter.append('0.00%')
                     csvWriter.writerow(rowWriter)
Esempio n. 57
0
    def create_new_db(
        self,
        verno,
        user_select_CRS=True,
        EPSG_code='4326',
        set_locale=False,
    ):  #CreateNewDB(self, verno):
        """Open a new DataBase (create an empty one if file doesn't exists) and set as default DB"""
        if user_select_CRS:
            EPSGID = str(self.ask_for_CRS(set_locale)[0])
        else:
            EPSGID = EPSG_code
        QApplication.setOverrideCursor(Qt.WaitCursor)
        if EPSGID == '0' or not EPSGID:
            utils.pop_up_info("Cancelling...")
        else:  # If a CRS is selectd, go on and create the database
            #path and name of new db
            if self.dbpath == '':
                self.dbpath = QFileDialog.getSaveFileName(
                    None, "Ny tolknings-DB", "midv_tolkndb.sqlite",
                    "Spatialite (*.sqlite)")[0]
            if not self.dbpath:
                QApplication.restoreOverrideCursor()
                return ''
            #create Spatialite database
            else:
                #delete the file if exists
                if os.path.exists(self.dbpath):
                    try:
                        os.remove(self.dbpath)
                    except OSError as e:
                        utils.pop_up_info("Error: %s - %s." %
                                          (e.filename, e.strerror))
                        QApplication.restoreOverrideCursor()
                        return ''
                try:
                    # creating/connecting the test_db
                    self.conn = spatialite_connect(self.dbpath)
                    # creating a Cursor
                    self.cur = self.conn.cursor()
                    self.cur.execute(
                        "PRAGMA foreign_keys = ON"
                    )  #Foreign key constraints are disabled by default (for backwards compatibility), so must be enabled separately for each database connection separately.
                except:
                    utils.pop_up_info(
                        "Impossible to connect to selected DataBase")
                    QApplication.restoreOverrideCursor()
                    return ''
                #First, find spatialite version
                versionstext = self.cur.execute(
                    'select spatialite_version()').fetchall()
                # load sql syntax to initialise spatial metadata, automatically create GEOMETRY_COLUMNS and SPATIAL_REF_SYS
                # then the syntax defines a Midvatten TOLKNINGS-db according to the loaded .sql-file
                if not int(
                        versionstext[0][0][0]
                ) > 3:  # which file to use depends on spatialite version installed
                    utils.pop_up_info(
                        "midv_tolkn plugin needs spatialite4.\nDatabase can not be created"
                    )
                    return ''

                filenamestring = "create_tolkn_db.sql"

                SQLFile = os.path.join(os.sep, os.path.dirname(__file__),
                                       "sql_strings", filenamestring)
                qgisverno = Qgis.QGIS_VERSION  #We want to store info about which qgis-version that created the db
                with open(SQLFile, 'r') as f:
                    f.readline()  # first line is encoding info....
                    try:
                        for line in f:
                            if not line:
                                continue
                            if line.startswith("#"):
                                continue
                            for replace_word, replace_with in [
                                ('CHANGETORELEVANTEPSGID', str(EPSGID)),
                                ('CHANGETOPLUGINVERSION', str(verno)),
                                ('CHANGETOQGISVERSION', str(qgisverno)),
                                ('CHANGETOSPLITEVERSION',
                                 str(versionstext[0][0]))
                            ]:
                                line = line.replace(replace_word, replace_with)
                            #replaced_line = line.replace('CHANGETOQGISVERSION',str(qgisverno)).replace('CHANGETOSPLITEVERSION',str(versionstext[0][0]))
                            self.cur.execute(
                                line
                            )  # use tags to find and replace SRID and versioning info
                    except Exception as e:
                        utils.pop_up_info(
                            'Failed to create DB! sql failed:\n' + line +
                            '\n\nerror msg:\n' + str(e))
                    except:
                        utils.pop_up_info('Failed to create DB!')
                try:  #spatial_ref_sys_aux not implemented until spatialite 4.3
                    self.cur.execute(
                        r"""delete from spatial_ref_sys_aux where srid NOT IN ('%s', '4326')"""
                        % EPSGID)
                except:
                    pass
                self.cur.execute(
                    r"""delete from spatial_ref_sys where srid NOT IN ('%s', '4326')"""
                    % EPSGID)

                self.insert_datadomains()

                self.add_triggers()

                #self.cur.execute('vacuum')

                #FINISHED WORKING WITH THE DATABASE, CLOSE CONNECTIONS
                self.conn.commit()
                self.conn.close()
                #create SpatiaLite Connection in QGIS QSettings
                settings = QSettings()
                settings.beginGroup('/SpatiaLite/connections')
                settings.setValue(
                    '%s/sqlitepath' % os.path.basename(self.dbpath),
                    '%s' % self.dbpath)
                settings.endGroup()

                #Finally add the layer styles info into the data base
                AddLayerStyles(self.dbpath)

        QApplication.restoreOverrideCursor()
Esempio n. 58
0
    def __new_project(self):

        fil, __ = QFileDialog.getSaveFileName(
            None,
            u"New project name (no space, plain ascii)",
            QgsProject.instance().readEntry("albion", "last_dir", "")[0],
            "QGIS poject file (*.qgs)",
        )
        if not fil:
            return
        fil = fil if len(fil) > 4 and fil[-4:] == ".qgs" else fil + ".qgs"
        fil = fil.replace(" ", "_")
        if len(fil) != len(fil.encode()):
            self.__iface.messageBar().pushError(
                "Albion:", "project name may only contain asci character (no accent)"
            )
            return

        srid, ok = QInputDialog.getText(
            self.__iface.mainWindow(),
            "Project SRID",
            "Project SRID EPSG:",
            QLineEdit.Normal,
            "32632",
        )
        if not ok:
            return
        srid = int(srid)

        project_name = str(os.path.split(fil)[1][:-4])

        if Project.exists(project_name):
            if (
                QMessageBox.Yes
                != QMessageBox(
                    QMessageBox.Information,
                    "Delete existing DB",
                    "Database {} exits, do you want to delete it ?".format(
                        project_name
                    ),
                    QMessageBox.Yes | QMessageBox.No,
                ).exec_()
            ):
                self.__iface.messageBar().pushInfo("Albion:", "keeping existing database...")
            else:
                Project.delete(project_name)
                self.__iface.messageBar().pushInfo("Albion:", "creating project...")
                Project.create(project_name, srid)
        else:
            self.__iface.messageBar().pushInfo("Albion:", "creating project...")
            Project.create(project_name, srid)

        if os.path.exists(fil):
            os.remove(fil)

        # load template
        open(fil, "w").write(
            open(resource("template_project.qgs"))
            .read()
            .replace("template_project", project_name)
            .replace("32632", str(srid))
        )
        self.__iface.newProject()
        QgsProject.instance().setFileName(fil)
        QgsProject.instance().read()
        QgsProject.instance().writeEntry("albion", "project_name", project_name)
        QgsProject.instance().writeEntry("albion", "srid", srid)
        QgsProject.instance().write()
        self.__qgis__project__loaded()
 def toolButtonOut(self):
     self.outEpanetName = QFileDialog.getSaveFileName(None, 'Save File',
                                                      os.path.join(os.path.join(os.path.expanduser('~')),
                                                                   'Desktop'), 'Epanet Inp File (*.inp)')
     self.dlg.out.setText(self.outEpanetName[0])
Esempio n. 60
0
    def save_scenario(self, scenario_file_path=None):
        """Save current scenario to a text file.

        You can use the saved scenario with the batch runner.

        :param scenario_file_path: A path to the scenario file.
        :type scenario_file_path: str
        """
        # Validate Input
        warning_title = tr('InaSAFE Save Scenario Warning')
        is_valid, warning_message = self.validate_input()
        if not is_valid:
            # noinspection PyCallByClass,PyTypeChecker,PyArgumentList
            QMessageBox.warning(self, warning_title, warning_message)
            return

        # Make extent to look like:
        # 109.829170982, -8.13333290561, 111.005344795, -7.49226294379

        # Added in 2.2 to support user defined analysis extents
        if self.dock.extent.user_extent is not None \
                and self.dock.extent.crs is not None:
            # In V4.0, user_extent is QgsGeometry.
            user_extent = self.dock.extent.user_extent.boundingBox()
            extent = extent_to_array(user_extent, self.dock.extent.crs)
        else:
            extent = viewport_geo_array(self.iface.mapCanvas())
        extent_string = ', '.join(('%f' % x) for x in extent)

        exposure_path = self.exposure_layer.source()
        hazard_path = self.hazard_layer.source()
        title = self.keyword_io.read_keywords(self.hazard_layer, 'title')
        title = tr(title)
        default_filename = title.replace(' ',
                                         '_').replace('(',
                                                      '').replace(')', '')

        # Popup a dialog to request the filename if scenario_file_path = None
        dialog_title = tr('Save Scenario')
        if scenario_file_path is None:
            # noinspection PyCallByClass,PyTypeChecker
            scenario_file_path, __ = QFileDialog.getSaveFileName(
                self, dialog_title,
                os.path.join(self.output_directory, default_filename + '.txt'),
                "Text files (*.txt)")
        if scenario_file_path is None or scenario_file_path == '':
            return
        self.output_directory = os.path.dirname(scenario_file_path)

        #  Write to file
        parser = ConfigParser()
        parser.add_section(title)
        # Relative path is not recognized by the batch runner, so we use
        # absolute path.
        parser.set(title, 'exposure', exposure_path)
        parser.set(title, 'hazard', hazard_path)

        parser.set(title, 'extent', extent_string)
        if self.dock.extent.crs is None:
            parser.set(title, 'extent_crs', 'EPSG:4326')
        else:
            parser.set(title, 'extent_crs', self.dock.extent.crs.authid())
        if self.aggregation_layer is not None:
            aggregation_path = self.aggregation_layer.source()
            relative_aggregation_path = self.relative_path(
                scenario_file_path, aggregation_path)
            parser.set(title, 'aggregation', relative_aggregation_path)

        # noinspection PyBroadException
        try:
            of = open(scenario_file_path, 'a')
            parser.write(of)
            of.close()
        except Exception as e:
            # noinspection PyTypeChecker,PyCallByClass,PyArgumentList
            QMessageBox.warning(
                self, 'InaSAFE',
                tr('Failed to save scenario to {path}, exception '
                   '{exception}').format(path=scenario_file_path,
                                         exception=str(e)))
        finally:
            of.close()

        # Save State
        self.save_state()