Ejemplo n.º 1
0
    def processAlgorithm(self, parameters, context, feedback):
        self.FEEDBACK = feedback
        """Here is where the processing itself takes place."""
        extent = self.parameterAsExtent(parameters, self.EXTENT, context)
        minzoom = self.parameterAsInt(parameters, self.MINZOOM, context)
        maxzoom = self.parameterAsInt(parameters, self.MAXZOOM, context)
        tilewidth = self.parameterAsInt(parameters, self.TILEWIDTH, context)
        maxnumtiles = self.parameterAsInt(parameters, self.MAXNUMTILES,
                                          context)
        #crs = iface.mapCanvas().mapRenderer().destinationCrs().authid()

        outFile = self.parameterAsFileOutput(parameters, self.OUTFILE, context)
        fileInfo = QFileInfo(outFile)
        # outPath = os.path.dirname(outFile)

        feedback.pushInfo(self.tr('extent is <%s>') % (extent))
        feedback.pushInfo(self.tr('minzoom is <%s>') % (minzoom))
        feedback.pushInfo(self.tr('maxzoom is <%s>') % (maxzoom))
        feedback.pushInfo(self.tr('tilewidth is <%s>') % (tilewidth))
        feedback.pushInfo(self.tr('maxnumtiles is <%s>') % (maxnumtiles))

        # others
        tileheigh = tilewidth
        transparency = 255
        quality = 70
        fformat = 'PNG'
        antialiasing = False
        TMSConvention = False
        MBTilesCompression = False
        WriteJson = False
        WriteOverview = False
        RenderOutsideTiles = True
        writeMapurl = False
        writeViewer = False

        feedback.pushInfo(self.tr('---------------'))
        feedback.pushInfo(self.tr('Other settings:'))
        feedback.pushInfo(self.tr('tileheigh is <%s>') % (tileheigh))
        feedback.pushInfo(self.tr('tilewidth is <%s>') % (tilewidth))
        feedback.pushInfo(self.tr('transparency is <%s>') % (transparency))
        feedback.pushInfo(self.tr('quality is <%s>') % (quality))
        feedback.pushInfo(self.tr('fformat is <%s>') % (fformat))
        feedback.pushInfo(self.tr('antialiasing is <%s>') % (antialiasing))
        feedback.pushInfo(self.tr('TMSConvention is <%s>') % (TMSConvention))
        feedback.pushInfo(
            self.tr('MBTilesCompression is <%s>') % (MBTilesCompression))
        feedback.pushInfo(self.tr('WriteJson is <%s>') % (WriteJson))
        feedback.pushInfo(self.tr('WriteOverview is <%s>') % (WriteOverview))
        feedback.pushInfo(
            self.tr('RenderOutsideTiles is <%s>') % (RenderOutsideTiles))
        feedback.pushInfo(self.tr('writeMapurl is <%s>') % (writeMapurl))
        feedback.pushInfo(self.tr('writeViewer is <%s>') % (writeViewer))
        feedback.pushInfo(self.tr('---------------'))

        if minzoom > maxzoom:
            feedback.pushInfo(
                self.
                tr('Maximum zoom value is lower than minimum. Please correct this and try again.'
                   ))
            return {}

        #~ toks = extent.split(',')
        #~ extent = QgsRectangle(float(toks[0]),float(toks[2]),float(toks[1]),float(toks[3]))
        extent = QgsCoordinateTransform(
            QgsProject.instance().crs(),
            QgsCoordinateReferenceSystem('EPSG:4326'),
            QgsProject.instance()).transform(extent)
        arctanSinhPi = math.degrees(math.atan(math.sinh(math.pi)))
        extent = extent.intersect(
            QgsRectangle(-180, -arctanSinhPi, 180, arctanSinhPi))

        layermap = iface.mapCanvas().layers()
        layers = []
        # add only visible layers
        layTreeRoot = QgsProject.instance().layerTreeRoot()
        for layer in layermap:
            if layTreeRoot.findLayer(layer.id()).isVisible():
                feedback.pushInfo(
                    self.tr('Exporting layer %s.') % layer.name())
                layers.append(layer)

        self.workThread = TilingThread(
            layers, extent, minzoom, maxzoom, tilewidth,
            tileheigh, transparency, quality, fformat, fileInfo,
            fileInfo.fileName(), antialiasing, TMSConvention,
            MBTilesCompression, WriteJson, WriteOverview, RenderOutsideTiles,
            writeMapurl, writeViewer, maxnumtiles)
        self.workThread.updateProgress.connect(self.updateProgress)
        self.workThread.updateText.connect(self.updateText)
        #~ #self.workThread.start()
        self.workThread.run()

        return {}
Ejemplo n.º 2
0
    def accept(self):
        self.startTime = time.time()
        self.tileCount = 0
        self.blankCount = 0

        if self.rbOutputZip.isChecked():
            output = self.leZipFileName.text()
        elif self.rbOutputDir.isChecked():
            output = self.leDirectoryName.text()
            if not QFileInfo(output).exists():
                os.mkdir(QFileInfo(output).absoluteFilePath())
        elif self.rbOutputNGM.isChecked():
            output = self.leTilesFroNGM.text()

        if not output:
            QMessageBox.warning(
                self, self.tr('No output'),
                self.
                tr('Output path is not set. Please enter correct path and try again.'
                   ))
            return
        fileInfo = QFileInfo(output)
        if fileInfo.isDir() and not len(
                QDir(output).entryList(QDir.Dirs | QDir.Files
                                       | QDir.NoDotAndDotDot)) == 0:
            res = QMessageBox.warning(
                self, self.tr('Directory not empty'),
                self.tr('Selected directory is not empty. Continue?'),
                QMessageBox.Yes | QMessageBox.No)
            if res == QMessageBox.No:
                return

        if self.spnZoomMin.value() > self.spnZoomMax.value():
            QMessageBox.warning(
                self, self.tr('Wrong zoom'),
                self.
                tr('Maximum zoom value is lower than minimum. Please correct this and try again.'
                   ))
            return
        self.settings.setValue('rootDir', self.leRootDir.text())
        self.settings.setValue('outputToZip', self.rbOutputZip.isChecked())
        self.settings.setValue('outputToDir', self.rbOutputDir.isChecked())
        self.settings.setValue('outputToNGM', self.rbOutputNGM.isChecked())
        self.settings.setValue('extentCanvas', self.rbExtentCanvas.isChecked())
        self.settings.setValue('extentFull', self.rbExtentFull.isChecked())
        self.settings.setValue('extentLayer', self.rbExtentLayer.isChecked())
        self.settings.setValue('minZoom', self.spnZoomMin.value())
        self.settings.setValue('maxZoom', self.spnZoomMax.value())
        self.settings.setValue('keepRatio', self.chkLockRatio.isChecked())
        self.settings.setValue('tileWidth', self.spnTileWidth.value())
        self.settings.setValue('tileHeight', self.spnTileHeight.value())
        self.settings.setValue('format', self.cmbFormat.currentIndex())
        self.settings.setValue('transparency', self.spnTransparency.value())
        self.settings.setValue('quality', self.spnQuality.value())
        self.settings.setValue('macroTile', self.spnMacroTile.value())
        self.settings.setValue('enable_antialiasing',
                               self.chkAntialiasing.isChecked())
        self.settings.setValue('use_tms_filenames',
                               self.chkTMSConvention.isChecked())
        self.settings.setValue('skipBlankTiles',
                               self.chkSkipBlankTiles.isChecked())
        self.settings.setValue('use_mbtiles_compression',
                               self.chkMBTilesCompression.isChecked())
        self.settings.setValue('write_json', self.chkWriteJson.isChecked())
        self.settings.setValue('write_overview',
                               self.chkWriteOverview.isChecked())
        self.settings.setValue('write_mapurl', self.chkWriteMapurl.isChecked())
        self.settings.setValue('write_viewer', self.chkWriteViewer.isChecked())
        self.settings.setValue('chkMsgDialogs', self.chkMsgDialogs.isChecked())
        canvas = self.iface.mapCanvas()
        if self.rbExtentCanvas.isChecked():
            extent = canvas.extent()
        elif self.rbExtentFull.isChecked():
            extent = canvas.fullExtent()
        else:
            layer = utils.getLayerById(
                self.cmbLayers.itemData(self.cmbLayers.currentIndex()))
            extent = canvas.mapSettings().layerExtentToOutputExtent(
                layer, layer.extent())
        extent = QgsCoordinateTransform(
            canvas.mapSettings().destinationCrs(),
            QgsCoordinateReferenceSystem('EPSG:4326'),
            QgsProject.instance()).transform(extent)
        arctanSinhPi = math.degrees(math.atan(math.sinh(math.pi)))
        extent = extent.intersect(
            QgsRectangle(-180, -arctanSinhPi, 180, arctanSinhPi))
        layers = canvas.layers()
        writeMapurl = self.chkWriteMapurl.isEnabled(
        ) and self.chkWriteMapurl.isChecked()
        writeViewer = self.chkWriteViewer.isEnabled(
        ) and self.chkWriteViewer.isChecked()
        self.workThread = TilingThread(
            layers,
            extent,
            self.spnZoomMin.value(),
            self.spnZoomMax.value(),
            self.spnTileWidth.value(),
            self.spnTileHeight.value(),
            self.spnMacroTile.value(),
            self.spnTransparency.value(),
            self.spnQuality.value(),
            self.cmbFormat.currentText(),
            fileInfo,
            self.leRootDir.text(),
            self.chkAntialiasing.isChecked(),
            self.chkTMSConvention.isChecked(),
            self.chkMBTilesCompression.isChecked(),
            self.chkWriteJson.isChecked(),
            self.chkWriteOverview.isChecked(),
            #             self.chkRenderOutsideTiles.isChecked(),
            self.chkSkipBlankTiles.isChecked(),
            writeMapurl,
            writeViewer)

        self.workThread.rangeChanged.connect(self.setProgressRange)
        self.workThread.updateProgress.connect(self.updateProgress)
        self.workThread.processFinished.connect(self.processFinished)
        self.workThread.processInterrupted.connect(self.processInterrupted)
        self.workThread.threshold.connect(self.confirmContinueThreshold)
        self.btnOk.setEnabled(False)
        self.btnClose.setText(self.tr('Cancel'))
        self.buttonBox.rejected.disconnect(self.reject)
        self.btnClose.clicked.connect(self.stopProcessing)
        self.workThread.start()