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 {}
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()