Pawel Netzel - software
Repositories
Help
Report an Issue
plTools
Code
Commits
Branches
Tags
Search
Tree:
4406deb
Branches
Tags
master
plTools
plTools_plugin
algo_pldarksky.py
Initial commit
netzel
commited
4406deb
at 2024-02-21 23:00:39
algo_pldarksky.py
Blame
History
Raw
# -*- coding: utf-8 -*- """ /*************************************************************************** plTools A QGIS plugin The plugin adds a set of algorithms from plTools Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/ ------------------- begin : 2024-01-10 copyright : (C) 2024 by Pawel Netzel email : pawel@netzel.pl ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ """ __author__ = 'Pawel Netzel' __date__ = '2024-01-10' __copyright__ = '(C) 2024 by Pawel Netzel' # This will get replaced with a git SHA1 when you do a git archive __revision__ = '$Format:%H$' from qgis.PyQt.QtCore import QCoreApplication from qgis.core import (QgsProcessing, QgsProcessingAlgorithm, QgsProcessingException, QgsProcessingParameterNumber, QgsProcessingParameterRasterDestination, QgsProcessingParameterRasterLayer) from .algo_base import plToolsBaseAlgorithm class darksky_Algorithm(plToolsBaseAlgorithm): COMMAND = 'pldarksky' OUTPUT = 'OUTPUT' INPUTGHSL = 'INPUTGHSL' INPUTDEM = 'INPUTDEM' PARA = 'PARA' PARU = 'PARU' PARV = 'PARV' PARH = 'PARH' PARK = 'PARK' RESX = 'RESX' RESY = 'RESY' RESH = 'RESH' RADIUS = 'RADIUS' THREADS = 'THREADS' def initAlgorithm(self, config): super().initAlgorithm(config) self.addParameter(QgsProcessingParameterRasterLayer(self.INPUTGHSL,self.tr('GHSL raster layer'))) self.addParameter(QgsProcessingParameterRasterLayer(self.INPUTDEM,self.tr('DEM raster layer'),optional=True)) self.addParameter(QgsProcessingParameterNumber(self.PARA,self.tr('Model parameter [a]'),defaultValue=2.37583,type=QgsProcessingParameterNumber.Double,optional=True)) self.addParameter(QgsProcessingParameterNumber(self.PARU,self.tr('Model parameter [U]'),defaultValue=5.96033,type=QgsProcessingParameterNumber.Double,optional=True)) self.addParameter(QgsProcessingParameterNumber(self.PARV,self.tr('Model parameter [V]'),defaultValue=0.02625,type=QgsProcessingParameterNumber.Double,optional=True)) self.addParameter(QgsProcessingParameterNumber(self.PARH,self.tr('Model parameter [h]'),defaultValue=1.13661,type=QgsProcessingParameterNumber.Double,optional=True)) self.addParameter(QgsProcessingParameterNumber(self.PARK,self.tr('Model parameter [k]'),defaultValue=0.03875,type=QgsProcessingParameterNumber.Double,optional=True)) self.addParameter(QgsProcessingParameterNumber(self.RADIUS,self.tr('Radius in cells'),defaultValue=300,optional=False)) self.addParameter(QgsProcessingParameterNumber(self.RESX,self.tr('Scale factor X [km]'),defaultValue=0.1,type=QgsProcessingParameterNumber.Double,optional=True)) self.addParameter(QgsProcessingParameterNumber(self.RESY,self.tr('Scale factor Y [km]'),defaultValue=0.1,type=QgsProcessingParameterNumber.Double,optional=True)) self.addParameter(QgsProcessingParameterNumber(self.RESH,self.tr('Scale factor h [km]'),defaultValue=0.001,type=QgsProcessingParameterNumber.Double,optional=True)) self.addParameter(QgsProcessingParameterNumber(self.THREADS,self.tr('Number of threads'),defaultValue=1,optional=True)) self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT,self.tr('Night sky brightness [mag] output raster layer'))) def processAlgorithm(self, parameters, context, feedback): arguments = [self.COMMAND] inpghsl = self.parameterAsRasterLayer(parameters, self.INPUTGHSL, context) if inpghsl: arguments.append('-g') arguments.append(inpghsl.source()) inpdem = self.parameterAsRasterLayer(parameters, self.INPUTDEM, context) if inpdem: arguments.append('-d') arguments.append(inpdem.source()) para = self.parameterAsDouble(parameters, self.PARA, context) if para: arguments.append('-a') arguments.append(str(para)) paru = self.parameterAsDouble(parameters, self.PARU, context) if paru: arguments.append('-U') arguments.append(str(paru)) parv = self.parameterAsDouble(parameters, self.PARV, context) if parv: arguments.append('-V') arguments.append(str(parv)) parh = self.parameterAsDouble(parameters, self.PARH, context) if parh: arguments.append('-h') arguments.append(str(parh)) park = self.parameterAsDouble(parameters, self.PARK, context) if park: arguments.append('-k') arguments.append(str(park)) rad = self.parameterAsInt(parameters, self.RADIUS, context) if rad: arguments.append('-N') arguments.append(str(rad)) resx = self.parameterAsDouble(parameters, self.RESX, context) if resx: arguments.append('--res_x='+str(resx)) resy = self.parameterAsDouble(parameters, self.RESY, context) if resy: arguments.append('--res_y='+str(resy)) resh = self.parameterAsDouble(parameters, self.RESH, context) if resh: arguments.append('--res_h='+str(resh)) thr = self.parameterAsInt(parameters, self.THREADS, context) if thr: arguments.append('-t') arguments.append(str(thr)) output = self.parameterAsOutputLayer(parameters,self.OUTPUT,context) arguments.append('-o') arguments.append(output) self.runplTools(arguments, feedback) return {self.OUTPUT: output} def name(self): return 'darksky - night sky brightness model' def groupId(self): return '' def createInstance(self): return darksky_Algorithm() def shortHelpString(self): return ''' Darksky is a program to calculate night sky light pollution. It is based on Berry's model [<i>Berry R. L., 1976: Light Pollution in Southern Ontario, Journal of the Royal Astronomical Society of Canada, 70, 97</i>]. The program was desribed in the papers [<a href="https://doi.org/10.1016/j.jqsrt.2016.03.014">1</a>, <a href="https://doi.org/10.1016/j.jqsrt.2018.05.038">2</a>]. The program uses GHSL (Global Human Settelment Layer) data to calculate night sky brightness. The program can use data other then GHSL but it needs recalibration. Improved version of darksky can calculate sky brightness taking into account DEM and shadowing effect. '''