예제 #1
0
    def saveImage(self):
        """ Provides a dialog window to allow the user to save the image file.
        """
        imageFile, _ = QFileDialog.getSaveFileName(
            self, "Choose a filename to save the image", "", "Images (*.png)")

        info = QFileInfo(imageFile)

        if info.baseName() != "":
            newImageFile = QFileInfo(info.absoluteDir(),
                                     info.baseName() +
                                     ".png").absoluteFilePath()

            if not self.finalWidget.pixmap().save(newImageFile, "PNG"):
                QMessageBox.warning(
                    self,
                    "Cannot save file",
                    "The file could not be saved.",
                    QMessageBox.Cancel,
                    QMessageBox.NoButton,
                    QMessageBox.NoButton,
                )
        else:
            QMessageBox.warning(
                self,
                "Cannot save file",
                "Please enter a valid filename.",
                QMessageBox.Cancel,
                QMessageBox.NoButton,
                QMessageBox.NoButton,
            )
    def getfiles(self):
        """   Load files from directory     """
        fname = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\',
                                            "Text Files (*.txt)")
        fi = QFileInfo(fname[0])

        global trackers_paths
        trackers_paths.append(fname[0])
        self.trackers_res.append(fi.baseName())
        # update List Options
        self.listwidget.insertItem(len(self.trackers_res),
                                   "%s" % fi.baseName())
        #       print(self.trackers_res)
        self.listwidget.repaint()
        self.update()
예제 #3
0
    def on_btnAdd_clicked(self):
        ##      curPath=os.getcwd()     #获取系统当前目录
        ##      curPath=QDir.homePath()
        curPath = QDir.currentPath()
        dlgTitle = "选择音频文件"
        filt = "音频文件(*.mp3 *.wav *.wma);;所有文件(*.*)"
        fileList, flt = QFileDialog.getOpenFileNames(self, dlgTitle, curPath,
                                                     filt)
        count = len(fileList)
        if count < 1:
            return

        filename = fileList[0]
        fileInfo = QFileInfo(filename)  #文件信息
        QDir.setCurrent(fileInfo.absolutePath())  #重设当前路径

        for i in range(count):
            filename = fileList[i]
            fileInfo.setFile(filename)
            song = QMediaContent(QUrl.fromLocalFile(filename))
            self.playlist.addMedia(song)  #添加播放媒体
            ##         basename=os.path.basename(filename)    #文件名和后缀
            basename = fileInfo.baseName()
            self.ui.listWidget.addItem(basename)  #添加到界面文件列表

        if (self.player.state() != QMediaPlayer.PlayingState):
            self.playlist.setCurrentIndex(0)
            self.player.play()
 def loadMap(self, fullpath):
     print(fullpath)
     info = QFileInfo(fullpath)
     basename = info.baseName()
     suffix = info.suffix()
     print(basename)
     print(suffix)
     if suffix == 'shp':
         print('vector')
         # 打开矢量图层
         self.layer = QgsVectorLayer(fullpath, basename, "ogr")
         if not self.layer:
             print("failed")
     else:
         print('raster')
         #打开栅格图层
         self.layer = QgsRasterLayer(fullpath, basename, "gdal")
         if not self.layer:
             print("failed")
     # 注册图层
     QgsProject.instance().addMapLayer(self.layer)
     self.mapCanvas.setLayers([self.layer])
     #设置图层范围
     self.mapCanvas.setExtent(self.layer.extent())
     self.mapCanvas.refresh()
예제 #5
0
 def fopen(self, filename):
     fname = QFileInfo(filename)
     self.filePath = str(fname.absolutePath())
     fn = str(fname.baseName())
     main = NewEditorMainWindow(fn, self.filePath, self.library)
     self.library.mainWins.append(main)
     main.show()
    def replaceImage(self, filepath, title):
        self.title = title
        self.filepath = filepath

        # set custom properties
        self.setCustomProperty("title", title)
        self.setCustomProperty("filepath", self.filepath)
        self.setName(title)

        fileInfo = QFileInfo(filepath)
        ext = fileInfo.suffix()
        if ext == "pdf":
            s = QSettings()
            oldValidation = s.value("/Projections/defaultBehavior")
            s.setValue(
                "/Projections/defaultBehavior", "useGlobal"
            )  # for not asking about crs
            path = fileInfo.filePath()
            baseName = fileInfo.baseName()
            layer = QgsRasterLayer(path, baseName)
            self.image = layer.previewAsImage(QSize(layer.width(), layer.height()))
            s.setValue("/Projections/defaultBehavior", oldValidation)
        else:
            reader = QImageReader(filepath)
            self.image = reader.read()
        self.repaint()
예제 #7
0
    def generate_pj_info(self):
        """
        triggered by button add
        1. create new project info dict every time
        2. extract project name and address from LineEdit; check if exist and if it is cas and msh file
        3. when second step done, get journal path from get_journal function
        :return: signal_add_pj(dict)
        """
        self.pj_dict = {
            "project_name": '',
            "project_address": '',
            "journal": ''
        }
        if self.checkbox_journal.isChecked():
            case_path = QFileInfo(self.edit_journal_address.text())
        else:
            case_path = QFileInfo(self.edit_project_address.text()
                                  )  # QFileInfo can deeply analyze path info
        accepted_file_type = ['cas', 'msh', 'h5', 'jou']

        if (case_path.exists()) and (case_path.suffix() in accepted_file_type):
            self.pj_dict["project_name"] = case_path.baseName()
            self.pj_dict["project_address"] = case_path.absolutePath()
            self.pj_dict['journal'] = self.get_journal(case_path,
                                                       case_path.fileName())
            self.signal_add_pj.emit(self.pj_dict)
            self.close()
            print('generate new project:', self.pj_dict)
        else:
            QMessageBox.warning(self, self.make_trans('warning'),
                                self.make_trans('no_case_mesh'),
                                QMessageBox.Yes, QMessageBox.Yes)
            print('file not exists')
예제 #8
0
    def pBtn_RunClicked(self):
        fi = QFileInfo(self.lnEdit_Prog.text())
        #runName=fi.baseName()
        ns3path = os.path.dirname(fi.dir().path())
        ns3path = os.path.dirname(ns3path)
        self.exepath = os.path.dirname(ns3path)
        routingName = self.cmBox_RoutingName.currentText()
        simSpan = self.cmBox_SimulationSpan.currentText()
        pool = Pool(processes=self.spinBox_processes.value())
        cmds = {}
        for traffic in range(string.atoi(self.lnEdit_loadStart.text()),
                             string.atoi(self.lnEdit_loadEnd.text()),
                             string.atoi(self.lnEdit_loadStep.text())):
            if fi.suffix() == "cpp":
                cmds[
                    traffic] = "./waf --run='{1} --routingName={3} --simulationSpan={2} --InterestsPerSec={0}'".format(
                        traffic, fi.baseName(), simSpan, routingName)
            else:
                cmds[
                    traffic] = "./waf --pyrun='{1} --routingName={3} --simulationSpan={2} --InterestsPerSec={0}'".format(
                        traffic, 'src/ndnSIM/examples/' + fi.fileName(),
                        simSpan, routingName)
            res = pool.apply_async(runJob,
                                   args=(cmds[traffic], self.exepath),
                                   callback=self.invokeRefresh)
            self.listWidget_activeProg.addItem(cmds[traffic])
            #res.wait()
            #print(res.get())
        pool.close()  #关闭线程池,不再接收新任务

        #proc=Process(target=ajob.runJob, args=("./waf --run='ndn-zhangyu-multipath --simulationSpan=50 --InterestsPerSec=50'", os.environ['HOME']+"/ndnSIM20170130/ns-3/"))
        #proc.start()
        #proc.join()
        self.refreshGUI("")
def read_qgsrasterlayer_from_file(spatial_data_file_abs):
    """
    Reads the full pathname of spatial data file and returns a QGSRasterLayer object.

    Args:
        spatial_data_file_abs (str): the full pathname to a spatial data file

    Raises:
        IOError if the file is invalid.

    Returns:
        A QGSRasterLayer object containing the data from the input spatial data file.
    """

    # Get the filename and basename of the input raster file.
    fileInfo = QFileInfo(spatial_data_file_abs)
    path = fileInfo.filePath()
    baseName = fileInfo.baseName()

    # Create the QgsRasterLayer object.
    qgs_raster_layer_obj = QgsRasterLayer(path, baseName)

    # Return the QgsRasterLayer if it is valid.
    if qgs_raster_layer_obj.isValid():
        return qgs_raster_layer_obj

    # If the created QGSRasterLayer object is invalid, print an error message and return None.
    else:
        message = 'The QGSRasterLayer for file "{}" is invalid.'.format(
            spatial_data_file_abs)
        logger = logging.getLogger(__name__)
        logger.warning(message)
        raise IOError(message)
예제 #10
0
    def configure(self, machineType, machineConfig, machinePort, machineStart):
        it = QDirIterator(self.dataConfigDir, ['*.cfg.json'])
        while it.hasNext():
            fileInfo = QFileInfo(it.next())
            basename = fileInfo.baseName()
            self.machineConfigCB.addItem(basename)

        self.reloadSettings()
 def onQuit(self):
     for d in self.__decompfiles:
         fileInfo = QFileInfo(d)
         baseName = fileInfo.baseName()
         layer = qgis.utils.iface.addRasterLayer(d, baseName)
     self.controlenable(True)
     QtWidgets.QMessageBox.about(self, "FG GML Importer", "終了しました")
     self.__running__ = False
예제 #12
0
    def save_layer(self):
        layer = self.view.currentLayer()
        # if it is a vector layer and has a valid geometry
        if layer.type() == 0 and layer.geometryType() not in [3, 4]:
            layer_name, selected_filter = QFileDialog.getSaveFileName(
                None, 'Save Layer', "",
                'Shapefile (*.shp);;KML (*.kml);;GPX (*.gpx)')
            if layer_name != '':

                if selected_filter == "Shapefile (*.shp)":

                    if not layer_name.endswith('.shp'):
                        layer_name = layer_name + '.shp'
                    ret = QgsVectorFileWriter.writeAsVectorFormat(
                        layer, layer_name, "utf-8",
                        QgsCoordinateReferenceSystem(
                            4326, QgsCoordinateReferenceSystem.EpsgCrsId),
                        "ESRI Shapefile")
                    if ret == QgsVectorFileWriter.NoError:
                        logger.info(layer.name() + " saved to " + layer_name)
                    # After saving always delete layer and reload from saved file
                    renderer = layer.renderer()
                    file_info = QFileInfo(layer_name)
                    base_name = file_info.baseName()
                    vlayer = QgsVectorLayer(layer_name, base_name, "ogr")
                    if not vlayer.isValid():
                        logger.warning("Layer failed to load!")
                    vlayer.setRenderer(renderer.clone())
                    self.remove_layer()
                    self.proj.addMapLayer(vlayer)

                elif selected_filter == "KML (*.kml)":

                    if not layer_name.endswith('.kml'):
                        layer_name = layer_name + '.kml'
                    file_info = QFileInfo(layer_name)

                    QgsVectorFileWriter.writeAsVectorFormat(
                        layer, layer_name, "utf-8",
                        QgsCoordinateReferenceSystem(
                            4326, QgsCoordinateReferenceSystem.EpsgCrsId),
                        "KML")
                elif selected_filter == "GPX (*.gpx)":

                    if not layer_name.endswith('.gpx'):
                        layer_name = layer_name + '.gpx'
                    ds_options = list()
                    ds_options.append("GPX_USE_EXTENSIONS=TRUE"
                                      )  # Option needed to write gpx correctly
                    QgsVectorFileWriter.writeAsVectorFormat(
                        layer,
                        layer_name,
                        "utf-8",
                        QgsCoordinateReferenceSystem(
                            4326, QgsCoordinateReferenceSystem.EpsgCrsId),
                        "GPX",
                        datasourceOptions=ds_options)
예제 #13
0
 def vector_load_file(self):
     """ Open dialog to load vector layer."""
     self.vector_filename, __ = QFileDialog.getOpenFileName(self, 'Vector Layer from File', QDir.homePath(),
                                                            "Vector Layer(*.shp *.kml *.osm *.gpx) ;; All files (*.*)")
     if self.vector_filename:
         file_info = QFileInfo(self.vector_filename)
         self.vector_base_name = file_info.baseName()
         self.vector_file_extension = file_info.suffix()
         self.vector_file_lineEdit.setText(str(self.vector_filename))
         self.vector_name_lineEdit.setText(str(self.vector_base_name))
예제 #14
0
    def addAnnotationButtonClicked(self):
        self.resetSelectionBand()
        labelIndex = self.labelComboBox.currentIndex()
        if labelIndex < 0:
            messageBox = QMessageBox()
            messageBox.setIcon(QMessageBox.Information)
            messageBox.setText("Label is not selected.")
            messageBox.exec_()
            return

        currentMapTool = iface.mapCanvas().mapTool()
        if not isinstance(currentMapTool, SelectMapTool):
            messageBox = QMessageBox()
            messageBox.setIcon(QMessageBox.Information)
            messageBox.setText("Object is not selected.")
            messageBox.exec_()
            return

        if not currentMapTool.isValid():
            messageBox = QMessageBox()
            messageBox.setIcon(QMessageBox.Information)
            messageBox.setText("Selection is not valid.")
            messageBox.exec_()
            return

        information = currentMapTool.getInformation()
        if information is None:
            messageBox = QMessageBox()
            messageBox.setIcon(QMessageBox.Information)
            messageBox.setText("Information cannot be retrieved.")
            messageBox.exec_()
            return

        crs = information.getCRS()

        aY, aX, bY, bX = information.getAbsoluteSelection()
        c1, c2 = information.getCoordinates()

        file = QFileInfo(information.getDataSource())
        row = [
            self.labelComboBox.currentText(),
            file.baseName(),
            file.filePath(),
            crs.authid(),
            str(aY),
            str(aX),
            str(bY),
            str(bX),
            str(c1.x()),
            str(c1.y()),
            str(c2.x()),
            str(c2.y())
        ]
        self.model.appendRow([QStandardItem(item) for item in row])
        currentMapTool.reset()
예제 #15
0
    def raster_load_file(self):
        """ Open dialog to load raster layer."""

        self.raster_filename, __ = QFileDialog.getOpenFileName(self, 'Vector Layer from File', QDir.homePath(),
                                                               "Raster Layer(*.tif) ;; All files (*.*)")
        if self.raster_filename:
            file_info = QFileInfo(self.raster_filename)
            self.raster_base_name = file_info.baseName()

            self.raster_file_lineEdit.setText(str(self.raster_filename))
            self.raster_name_lineEdit.setText(str(self.raster_base_name))
예제 #16
0
    def get_nome_progetto(self):
        """
            # Slot for exposing the same-name function to Javascript. #
            Retrieve the project name having the whitespaces replaced with underscores.
        """
        project_file_name = QFileInfo(QgsProject.instance().fileName())
        project_name = project_file_name.baseName()

        # Replacement for the whitespaces with underscore
        project_name = project_name.replace(" ", "_")
        return project_name
예제 #17
0
    def addFilesToExplorer(self,
                           fileName,
                           fileType,
                           scaler,
                           extensionTag,
                           isVideo=True):
        if fileName:
            info = QFileInfo(fileName)
            if info.baseName() == self.importedVideo and isVideo:
                QMessageBox.critical(self,
                                     "Error",
                                     "Video already exist",
                                     buttons=QMessageBox.Ok)
            elif info.baseName() == self.importedCSV and not isVideo:
                QMessageBox.critical(self,
                                     "Error",
                                     "CSV file already exist",
                                     buttons=QMessageBox.Ok)
            else:
                if (isVideo):
                    self.removeItemFromTable("video")
                    self.importedVideoPath = QUrl.fromLocalFile(fileName)
                    self.importedVideo = info.baseName()
                    cap = cv2.VideoCapture(r'{}'.format(
                        self.importedVideoPath.toString()))
                    fps = cap.get(cv2.CAP_PROP_FPS
                                  )  # OpenCV2 version 2 used "CV_CAP_PROP_FPS"
                    frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT)
                    self.durationChanged(int(frame_count / fps))
                    self.statusBar().showMessage('Status: Video/Image added')
                else:
                    self.removeItemFromTable("csv")
                    self.importedCSVPath = info.absoluteFilePath()
                    self.readCSV(info.absoluteFilePath(), info.baseName())
                    self.statusBar().showMessage('Status: CSV File added')

                size = str(info.size() / scaler) + extensionTag
                last_modified = info.lastModified().toString()[4:10]
                self.addItemToTable(
                    self.explorerView,
                    [info.baseName(), size, fileType, last_modified])
예제 #18
0
 def saveFile(self):
     if self.filename == 'untitled':
         self.saveFileAs()
     else:
         filename = self.filename
         if filename != '':
             fname = QFileInfo(filename)
             self.filename = str(fname.baseName())
             self.filePath = str(fname.absolutePath())
             self.setWindowTitle(self.filename)
             self.scene.saveDgm(self.getFullFileName())
             self.modified = False
예제 #19
0
	def Output(filename, output_dir, mod, suffix, rewrite=True, index=-1):
		"""
Take input filename, output dir path, and make a new filename using mod and suffix.
Rewrite a file by default. Can be used with Blister.Threading().
"""
		METHOD_NAME = f"Blister.Output"
		thread_id = Blister.ThreadID(index)
		if mod != "": mod = "_" + mod
		if (suffix != ""): suffix = "." + suffix
		fileinfo_old = QFileInfo(filename)
		fileinfo = QFileInfo(QDir(output_dir), fileinfo_old.baseName() + mod + suffix)
		if (fileinfo.exists() and (not fileinfo.isFile())):
			print(f"{thread_id}{METHOD_NAME}: This path is a dir:\n{thread_id}\t{fileinfo.absoluteFilePath()}", end='\n')
			return False
		if ((fileinfo.exists() and (not fileinfo.isWritable())) or ((not fileinfo.exists()) and (not QFileInfo(fileinfo.absolutePath()).permission(QFile.WriteUser)))):
			print(f"{thread_id}{METHOD_NAME}: Writing this file is not permitted:\n{thread_id}\t{fileinfo.absoluteFilePath()}", end='\n')
			return False
		if (fileinfo.exists() and (rewrite == False)):
			fileinfo = QFileInfo(QDir(output_dir), fileinfo_old.baseName()+ "_" + str(int(time.time()) % 100000) + suffix)
			print(f"{thread_id}{METHOD_NAME}: File to write already exists [rewriting is forbidden]. It will be renamed:\n{thread_id}\t{fileinfo_old.absoluteFilePath()} --> {fileinfo.absoluteFilePath()}", end='\n')
		return fileinfo.absoluteFilePath()
예제 #20
0
    def saveImage(self):
        """ Provides a dialog window to allow the user to save the image file.
        """
        imageFile, _ = QFileDialog.getSaveFileName(self,
                "Choose a filename to save the image", "", "Images (*.png)")

        info = QFileInfo(imageFile)

        if info.baseName() != '':
            newImageFile = QFileInfo(info.absoluteDir(),
                    info.baseName() + '.png').absoluteFilePath()

            if not self.finalWidget.pixmap().save(newImageFile, 'PNG'):
                QMessageBox.warning(self, "Cannot save file",
                        "The file could not be saved.",
                        QMessageBox.Cancel, QMessageBox.NoButton,
                        QMessageBox.NoButton)
        else:
            QMessageBox.warning(self, "Cannot save file",
                    "Please enter a valid filename.", QMessageBox.Cancel,
                    QMessageBox.NoButton, QMessageBox.NoButton)
예제 #21
0
    def saveAsDocument(self, document):
        """
        prompts the user for a new filename or path and saves the document as that
        :param document: Reference to the document
        :return: Returns if the save as succeeded or not
        """
        new_path = \
            QFileDialog.getSaveFileName(self.app, 'Save File', self.app.left_menu.model.rootPath())[
                0]

        # if the new path is an empty string do nothing
        if new_path == '':
            logging.warning("No New File Path Given")
            return False

        # check if the document is formatted
        if self.app.btn_mode_switch.isChecked():
            f_info = QFileInfo(new_path)
            if f_info.suffix() != "lef":
                new_path = os.path.join(f_info.path(), f_info.baseName()) + '.lef'
            data = document.toHtml()
        else:
            f_info = QFileInfo(new_path)
            if f_info.suffix() == "lef":
                new_path = os.path.join(f_info.path(), f_info.baseName()) + '.txt'
            data = document.toPlainText()

        # now write to the new_path
        self.writeFileData(new_path, data)

        # add the document to the dict of documents
        self.open_documents[new_path] = QFileInfo(new_path)
        self.current_document = self.open_documents[new_path]
        self.file_opened_time = os.path.getatime(self.current_document.absoluteFilePath())

        # open the document with its new text
        self.openDocument(document, new_path)

        logging.info("Saved File As - %s", new_path)
        return True
예제 #22
0
def layerSubsetSave(rasterLayer: QgsRasterLayer, domainLayer: QgsVectorLayer,
                    rootGroup: QgsLayerTreeGroup, name: str) -> None:
    """Description: Processes a raster image into a vector polygon ocean/land mask.
		Make sure to save the shapefile, as it will be deleted otherwise! 
		Input:  QgsRasterLayer rasterLayer - layer that contains the raster image to process
				QgsVectorLayer domainLayer - layer that contains a polygon specifying the bounds of the raster image to process
				QgsLayerTreeGroup rootGroup - layer that contains the root name of the glacier
		Output: QgsRasterLayer, QgsVectorLayer - objects referencing the new mask layers
	"""

    # Get basic file name information on geotiff, raster image, masked raster subset image, and masked vector subset shp file
    fileSource = rasterLayer.source()
    fileInfo = QFileInfo(fileSource)
    filePath = fileInfo.absolutePath()
    fileName = fileInfo.baseName()
    subsetName = fileName + '_' + domainLayer.name()
    subsetPath = getSavePaths(fileSource, domainLayer,
                              'tif') + '/' + subsetName + '.tif'

    # Load geotiff and get domain layer/bounding box of area to mask
    geotiff = gdal.Open(fileSource)
    feature = domainLayer.getFeature(0)
    domain = feature.geometry().boundingBox()
    prj = geotiff.GetProjection()
    srs = osr.SpatialReference(wkt=prj)
    rasterCRS = srs.GetAttrValue(
        "PROJCS|AUTHORITY", 0) + ":" + srs.GetAttrValue("PROJCS|AUTHORITY", 1)
    if (rasterCRS is None):
        rasterCRS = srs.GetAttrValue("AUTHORITY", 0) + ":" + srs.GetAttrValue(
            "AUTHORITY", 1)

    crs = rasterLayer.crs()
    crs.createFromId(int(srs.GetAttrValue("AUTHORITY", 1)))
    rasterLayer.setCrs(crs)
    rasterLayer.triggerRepaint()

    #rasterCRS = rasterLayer.crs().authid()
    domainCRS = domainLayer.crs().authid()
    bounds = geotiffWorldToPixelCoords(geotiff, domain, rasterCRS, domainCRS)

    img = geotiff.GetRasterBand(1)
    img = img.ReadAsArray(0, 0, geotiff.RasterXSize,
                          geotiff.RasterYSize).astype(np.uint16)
    img = img[int(round(bounds.yMinimum())):int(round(bounds.yMaximum())),
              int(round(bounds.xMinimum())):int(round(bounds.xMaximum()))]

    print('Save subset:', subsetPath)
    arrayToRaster(img, geotiff, bounds, subsetPath)
    imsave(resolve('landsat_raw/' + domainLayer.name() + '/' + name + '.png'),
           img)

    return img.shape
예제 #23
0
    def currentRowChanged(self, selected, deselected):
        indexes = self.annotationView.selectedIndexes()
        if len(indexes) == 0:
            return

        rowIndex = indexes[0].row()
        targetLayer = None

        for node in QgsProject.instance().layerTreeRoot().findLayers():
            layer = node.layer()
            if isinstance(layer, QgsRasterLayer) and layer.dataProvider(
            ).dataSourceUri() == self.model.item(rowIndex, 2).text():
                targetLayer = layer
                break

        root = QgsProject.instance().layerTreeRoot()
        if targetLayer is None:
            file = QFileInfo(self.model.item(rowIndex, 2).text())
            path = file.filePath()
            base = file.baseName()
            targetLayer = QgsRasterLayer(path, base)
            QgsProject.instance().addMapLayer(targetLayer, False)
            root.insertLayer(0, targetLayer)
        else:
            clonedLayer = targetLayer.clone()
            QgsProject.instance().removeMapLayer(targetLayer.id())
            QgsProject.instance().addMapLayer(clonedLayer)
            targetLayer = clonedLayer

        iface.setActiveLayer(targetLayer)
        crs = QgsCoordinateReferenceSystem(self.model.item(rowIndex, 3).text())
        QgsProject.instance().setCrs(crs)
        iface.mapCanvas().setExtent(targetLayer.extent())

        point1 = QgsPointXY(float(self.model.item(rowIndex, 8).text()),
                            float(self.model.item(rowIndex, 9).text()))
        point2 = QgsPointXY(float(self.model.item(rowIndex, 8).text()),
                            float(self.model.item(rowIndex, 11).text()))
        point3 = QgsPointXY(float(self.model.item(rowIndex, 10).text()),
                            float(self.model.item(rowIndex, 11).text()))
        point4 = QgsPointXY(float(self.model.item(rowIndex, 10).text()),
                            float(self.model.item(rowIndex, 9).text()))

        self.resetSelectionBand()
        self.selectionBand.addPoint(point1, False)
        self.selectionBand.addPoint(point2, False)
        self.selectionBand.addPoint(point3, False)
        self.selectionBand.addPoint(point4, True)

        self.selectionBand.setOpacity(0.5)
        self.selectionBand.show()
예제 #24
0
def read_data(filename,band_no=1):
    fileInfo = QFileInfo(filename)
    baseName = fileInfo.baseName()
    layer = QgsRasterLayer(filename, baseName)
    if not layer.isValid():
        print(filename+" layer failed to load!")
    ds = gdal.Open(filename)
    proj = ds.GetProjection()
    geotransform = ds.GetGeoTransform()
    band = ds.GetRasterBand(band_no)
    no_dat= band.GetNoDataValue()
    array = np.array(band.ReadAsArray(),dtype=np.float32)
    XSize,YSize=(band.XSize,band.YSize)
    return array,no_dat,proj,geotransform,XSize,YSize 
예제 #25
0
 def on_btnFile_copy_clicked(self):
    self.__showBtnInfo(self.sender())
    sous=self.ui.editFile.text().strip()   #源文件
    if sous=="":
       self.ui.textEdit.appendPlainText("请先选择一个文件")
       return
    
    fileInfo=QFileInfo(sous)
    newFile=fileInfo.path()+"/"+fileInfo.baseName()+"--副本."+fileInfo.suffix()
    if QFile.copy(sous,newFile):  
       self.ui.textEdit.appendPlainText("源文件:"+sous)
       self.ui.textEdit.appendPlainText("复制为文件:"+newFile+"\n")
    else:
       self.ui.textEdit.appendPlainText("复制文件失败")
예제 #26
0
 def saveFileAs(self):
     filename = QFileDialog.getSaveFileName(self,
                                            'Save',
                                            self.workingFolder + '/' +
                                            self.filename,
                                            filter='*.dgm')
     filename = filename[0]
     if filename != '':
         fname = QFileInfo(filename)
         self.filename = str(fname.baseName())
         self.filePath = str(fname.absolutePath())
         self.setWindowTitle(self.filename)
         self.scene.saveDgm(self.getFullFileName())
         self.modified = False
예제 #27
0
    def export_cfd_parameter(self):
        self.data_dict()
        print(self.input_d)
        # output = output_web(r'C:/Users/BZMBN4/Desktop/123.html', self.input_d)
        path = QFileDialog.getSaveFileName(self, filter='html, *.html')
        try:
            save_path = QFileInfo(path[0])
            html_save_path = save_path.filePath()
            csv_save_path = save_path.absolutePath() + '\\' + save_path.baseName() + '.csv'
            output_html = output_web(html_save_path, self.input_d)
            output_csv = OutputCsv(csv_save_path, self.input_d)

        except Exception as e:
            print(e)
예제 #28
0
   def on_btnFile_rename_clicked(self):
      self.__showBtnInfo(self.sender())
      sous=self.ui.editFile.text().strip()   #源文件
      if sous=="":
         self.ui.textEdit.appendPlainText("请先选择一个文件")
         return

      fileInfo=QFileInfo(sous)
      newFile=fileInfo.path()+"/"+fileInfo.baseName()+".XZY"  #更改文件后缀为".XYZ"
      if QFile.rename(sous,newFile):   
         self.ui.textEdit.appendPlainText("源文件:"+sous)
         self.ui.textEdit.appendPlainText("重命名为:"+newFile+"\n")
      else:
         self.ui.textEdit.appendPlainText("重命名文件失败\n")
예제 #29
0
    def loadRaster(self, raster):
        # Check if string is provided
        fileInfo = QFileInfo(raster)
        path = fileInfo.filePath()
        baseName = fileInfo.baseName()

        layer = QgsRasterLayer(path, baseName)
        QgsProject.instance().addMapLayer(layer)

        if layer.isValid() is True:
            self.dataDisplayDlg.appendLogs("Layer was loaded successfully!")
        else:
            self.dataDisplayDlg.appendLogs(
                "Unable to read basename and file path - Your array is probably invalid"
            )
예제 #30
0
    def loadImages(self, fileNames):
        for fileName in fileNames:
            row = self.imagesTable.rowCount()
            self.imagesTable.setRowCount(row + 1)
            fileInfo = QFileInfo(fileName)
            imageName = fileInfo.baseName()
            fileImage2x = fileInfo.absolutePath(
            ) + '/' + imageName + "@2x." + fileInfo.suffix()
            fileInfo2x = QFileInfo(fileImage2x)
            image = QImage(fileName)
            toolTip = "Directory: {}\nFile: {}\nFile@2x: {}\nSize: {}x{}".format(
                QDir.toNativeSeparators(fileInfo.absolutePath()),
                fileInfo.fileName(),
                fileInfo2x.fileName() if fileInfo2x.exists else "<None>",
                image.width(), image.height())
            fileItem = QTableWidgetItem(imageName)
            fileItem.setData(Qt.UserRole, fileName)
            fileItem.setIcon(QIcon(QPixmap.fromImage(image)))
            fileItem.setFlags((fileItem.flags() | Qt.ItemIsUserCheckable)
                              & ~Qt.ItemIsEditable)
            fileItem.setToolTip(toolTip)
            self.imagesTable.setItem(row, 0, fileItem)

            mode = QIcon.Normal
            state = QIcon.Off

            if self.guessModeStateAct.isChecked():
                if "_act" in imageName:
                    mode = QIcon.Active
                elif "_dis" in imageName:
                    mode = QIcon.Disabled
                elif "_sel" in imageName:
                    mode = QIcon.Selected

                if "_on" in imageName:
                    mode = QIcon.On

            modeItem = QTableWidgetItem(IconPreviewArea.iconModeNames()[
                IconPreviewArea.iconModes().index(mode)])
            modeItem.setToolTip(toolTip)
            self.imagesTable.setItem(row, 1, modeItem)
            stateItem = QTableWidgetItem(IconPreviewArea.iconStateNames()[
                IconPreviewArea.iconStates().index(state)])
            stateItem.setToolTip(toolTip)
            self.imagesTable.setItem(row, 2, stateItem)
            self.imagesTable.openPersistentEditor(modeItem)
            self.imagesTable.openPersistentEditor(stateItem)
            fileItem.setCheckState(Qt.Checked)
예제 #31
0
def qgis3_add_raster_to_project(iface, raster_path: Path) -> bool:
    """
    Adds the Raster(raster_path) at the current open qgis project

    :type iface: qgis.gui.QgisInterface
    :type raster_path: Path
    """

    # TODO: Refactor: NV: Feels like incorrect usage of the APIs
    q_file_info = QFileInfo(raster_path.as_posix())
    q_base_name = q_file_info.baseName()
    q_raster_layer = QgsRasterLayer(q_file_info.filePath(), q_base_name)
    if q_raster_layer.isValid():
        iface.addRasterLayer(raster_path.as_posix(), raster_path.name)

    return True
예제 #32
0
 def browsePath(self):
     """用户点击了浏览路径的按钮。如果成功设置了路径,就返回True,如果用户取消了操作或者出错,就返回False
     返回的用途参见showEvent()"""
     filename, selectedFilter = QFileDialog.getOpenFileName(self, self.windowTitle())
     if not filename:
         return False
     fi = QFileInfo(filename)
     if fi.isSymLink():
         filename = fi.symLinkTarget()
         if not os.path.exists(filename):
             QMessageBox.information(self, self.windowTitle(), self.tr("快捷方式所指向的程序不正确。"))
             return False
     fi = QFileInfo(filename)
     self.txtName.setText(fi.baseName())
     self.txtPath.setText(fi.absoluteFilePath())
     self.setFileIcon(fi.absoluteFilePath())
     self.txtDir.setText(fi.dir().absolutePath())
     return True
    def replaceImage(self, filepath, title):
        self.title = title
        self.filepath = filepath

         # set custom properties
        self.setCustomProperty("title", title)
        self.setCustomProperty("filepath", self.filepath)
        self.setName(title)

        fileInfo = QFileInfo(filepath)
        ext = fileInfo.suffix()
        if ext == "pdf":
            s = QSettings()
            oldValidation = s.value("/Projections/defaultBehavior")
            s.setValue("/Projections/defaultBehavior", "useGlobal")  # for not asking about crs
            path = fileInfo.filePath()
            baseName = fileInfo.baseName()
            layer = QgsRasterLayer(path, baseName)
            self.image = layer.previewAsImage(QSize(layer.width(), layer.height()))
            s.setValue("/Projections/defaultBehavior", oldValidation)
        else:
            reader = QImageReader(filepath)
            self.image = reader.read()
        self.repaint()
    def initializeLayer(self, screenExtent=None):
        if self.error or self.initialized or self.initializing:
            return

        if self.filepath is not None:
            # not safe...
            self.initializing = True
            filepath = self.getAbsoluteFilepath()

            if not os.path.exists(filepath):
                # TODO integrate with BadLayerHandler ?
                loadErrorDialog = LoadErrorDialog(filepath)
                result = loadErrorDialog.exec_()
                if result == 1:
                    # absolute
                    filepath = loadErrorDialog.lineEditImagePath.text()
                    # to relative if needed
                    self.filepath = utils.toRelativeToQGS(filepath)
                    self.setCustomProperty("filepath", self.filepath)
                    QgsProject.instance().setDirty(True)
                else:
                    self.error = True

                del loadErrorDialog

            fileInfo = QFileInfo(filepath)
            ext = fileInfo.suffix()
            if ext == "pdf":
                s = QSettings()
                oldValidation = s.value("/Projections/defaultBehavior")
                s.setValue("/Projections/defaultBehavior", "useGlobal") # for not asking about crs
                path = fileInfo.filePath()
                baseName = fileInfo.baseName()
                layer = QgsRasterLayer(path, baseName)
                self.image = layer.previewAsImage(QSize(layer.width(),layer.height()))
                s.setValue("/Projections/defaultBehavior", oldValidation)
            else:
                reader = QImageReader(filepath)
                self.image = reader.read()

            self.initialized = True
            self.initializing = False

            self.setupCrs()

            if screenExtent:
                # constructor called from AddLayer action
                # if not, layer loaded from QGS project file

                # check if image already has georef info
                # use GDAL
                dataset = gdal.Open(filepath, gdal.GA_ReadOnly)
                georef = None
                if dataset:
                    georef = dataset.GetGeoTransform()

                if georef and not self.is_default_geotransform(georef):
                    self.initializeExistingGeoreferencing(dataset, georef)
                else:
                    # init to default params
                    self.setCenter(screenExtent.center())
                    self.setRotation(0.0)

                    sw = screenExtent.width()
                    sh = screenExtent.height()

                    self.resetScale(sw, sh)

                    self.commitTransformParameters()