|
@@ -20,133 +20,15 @@ __date__ = 'August 2012'
|
|
|
__copyright__ = '(C) 2012, Victor Olaya'
|
|
|
|
|
|
import os
|
|
|
+import importlib
|
|
|
|
|
|
from PyQt5.QtGui import QIcon
|
|
|
-from osgeo import gdal
|
|
|
from processing.core.ProcessingConfig import ProcessingConfig, Setting
|
|
|
from qgis.PyQt.QtCore import QCoreApplication
|
|
|
from qgis.core import (QgsApplication,
|
|
|
QgsProcessingProvider,
|
|
|
QgsRuntimeProfiler)
|
|
|
|
|
|
-from .AssignProjection import AssignProjection
|
|
|
-from .Buffer import Buffer
|
|
|
-from .ClipRasterByExtent import ClipRasterByExtent
|
|
|
-from .ClipRasterByMask import ClipRasterByMask
|
|
|
-from .ClipVectorByExtent import ClipVectorByExtent
|
|
|
-from .ClipVectorByMask import ClipVectorByMask
|
|
|
-from .ColorRelief import ColorRelief
|
|
|
-from .Datasources2Vrt import Datasources2Vrt
|
|
|
-from .Dissolve import Dissolve
|
|
|
-from .ExecuteSql import ExecuteSql
|
|
|
-from .ExportRasterByMask import ExportRasterByMask
|
|
|
-from .ExportVectorByMask import ExportVectorByMask
|
|
|
-from .GdalUtils import GdalUtils
|
|
|
-from .GridAverage import GridAverage
|
|
|
-from .GridDataMetrics import GridDataMetrics
|
|
|
-from .GridInverseDistance import GridInverseDistance
|
|
|
-from .GridInverseDistanceNearestNeighbor import GridInverseDistanceNearestNeighbor
|
|
|
-from .GridLinear import GridLinear
|
|
|
-from .GridNearestNeighbor import GridNearestNeighbor
|
|
|
-from .LicenseMake import LicenseMake
|
|
|
-from .OffsetCurve import OffsetCurve
|
|
|
-from .OgrToPostGis import OgrToPostGis
|
|
|
-from .OneSideBuffer import OneSideBuffer
|
|
|
-# from .spotfileupload import SpotfileUpload
|
|
|
-# from .spotfiledownload import SpotfileDownload
|
|
|
-# from .spotfiledelete import SpotfileDelete
|
|
|
-from .PointsAlongLines import PointsAlongLines
|
|
|
-from .Topology.A00 import A00
|
|
|
-from .Topology.A01 import A01
|
|
|
-from .Topology.A02 import A02
|
|
|
-from .Topology.A03 import A03
|
|
|
-from .Topology.A04 import A04
|
|
|
-from .Topology.A05 import A05
|
|
|
-from .Topology.AA01 import AA01
|
|
|
-from .Topology.AA02 import AA02
|
|
|
-from .Topology.AA03 import AA03
|
|
|
-from .Topology.AA04 import AA04
|
|
|
-from .Topology.AA05 import AA05
|
|
|
-from .Topology.AL01 import AL01
|
|
|
-from .Topology.AP01 import AP01
|
|
|
-from .Topology.AP02 import AP02
|
|
|
-from .Topology.L00 import L00
|
|
|
-from .Topology.L01 import L01
|
|
|
-from .Topology.L02 import L02
|
|
|
-from .Topology.L03 import L03
|
|
|
-from .Topology.L04 import L04
|
|
|
-from .Topology.L05 import L05
|
|
|
-from .Topology.L06 import L06
|
|
|
-from .Topology.L07 import L07
|
|
|
-from .Topology.L08 import L08
|
|
|
-from .Topology.L09 import L09
|
|
|
-from .Topology.L10 import L10
|
|
|
-from .Topology.LA01 import LA01
|
|
|
-from .Topology.LA02 import LA02
|
|
|
-from .Topology.LA03 import LA03
|
|
|
-from .Topology.LL01 import LL01
|
|
|
-from .Topology.LL02 import LL02
|
|
|
-from .Topology.LL03 import LL03
|
|
|
-from .Topology.LL04 import LL04
|
|
|
-from .Topology.LP01 import LP01
|
|
|
-from .Topology.P00 import P00
|
|
|
-from .Topology.P01 import P01
|
|
|
-from .Topology.PA01 import PA01
|
|
|
-from .Topology.PA02 import PA02
|
|
|
-from .Topology.PA03 import PA03
|
|
|
-from .Topology.PL01 import PL01
|
|
|
-from .Topology.PL02 import PL02
|
|
|
-from .Topology.PP01 import PP01
|
|
|
-from .Topology.PP02 import PP02
|
|
|
-from .VectorProject import VectorProject
|
|
|
-from .aspect import aspect
|
|
|
-from .buildvrt import buildvrt
|
|
|
-from .contour import contour, contour_polygon
|
|
|
-from .extractprojection import ExtractProjection
|
|
|
-from .fillnodata import fillnodata
|
|
|
-from .gdal2tiles import gdal2tiles
|
|
|
-from .gdal2xyz import gdal2xyz
|
|
|
-from .gdaladdo import gdaladdo
|
|
|
-from .gdalcalc import gdalcalc
|
|
|
-from .gdalinfo import gdalinfo
|
|
|
-from .gdaltindex import gdaltindex
|
|
|
-from .gdbtopostgislist import GdbToPostGisList
|
|
|
-from .hillshade import hillshade
|
|
|
-from .merge import merge
|
|
|
-from .nearblack import nearblack
|
|
|
-from .ogr2ogr import ogr2ogr
|
|
|
-from .ogr2ogrtopostgislist import Ogr2OgrToPostGisList
|
|
|
-from .ogrinfo import ogrinfo
|
|
|
-from .pansharp import pansharp
|
|
|
-from .pct2rgb import pct2rgb
|
|
|
-from .polygonize import polygonize
|
|
|
-from .postgisrestore import Postgisrestore
|
|
|
-from .postgistogeoserver import Postgistogeoserver
|
|
|
-from .postgisupdate import Postgisupdate
|
|
|
-from .proximity import proximity
|
|
|
-from .rasterize import rasterize
|
|
|
-from .rasterize_over import rasterize_over
|
|
|
-from .rasterize_over_fixed_value import rasterize_over_fixed_value
|
|
|
-from .rastertopostgislist import Ogr2PostGisList
|
|
|
-from .ImportOSGBToPostGIS import ImportOSGBToPostGIS
|
|
|
-from .ImportTableToPostGIS import ImportTableToPostGIS
|
|
|
-from .ImportSingleOSGBToPostGIS import ImportSingleOSGBToPostGIS
|
|
|
-from .DataStorageStatistics import DataStorageStatistics
|
|
|
-
|
|
|
-from .rearrange_bands import rearrange_bands
|
|
|
-from .retile import retile
|
|
|
-from .rgb2pct import rgb2pct
|
|
|
-from .roughness import roughness
|
|
|
-from .sieve import sieve
|
|
|
-from .slope import slope
|
|
|
-from .tpi import tpi
|
|
|
-from .translate import translate
|
|
|
-from .tri import tri
|
|
|
-from .viewshed import viewshed
|
|
|
-from .warp import warp
|
|
|
-
|
|
|
-# from .ogr2ogrtabletopostgislist import Ogr2OgrTableToPostGisList
|
|
|
-
|
|
|
pluginPath = os.path.normpath(os.path.join(
|
|
|
os.path.split(os.path.dirname(__file__))[0], os.pardir))
|
|
|
|
|
@@ -156,6 +38,7 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
|
|
def __init__(self):
|
|
|
super().__init__()
|
|
|
self.algs = []
|
|
|
+ self._algorithm_definitions = None
|
|
|
QgsApplication.processingRegistry().addAlgorithmAlias('qgis:buildvirtualvector', 'gdal:buildvirtualvector')
|
|
|
|
|
|
def load(self):
|
|
@@ -180,7 +63,12 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
|
|
return '数管工具集'
|
|
|
|
|
|
def longName(self):
|
|
|
- version = GdalUtils.readableVersion()
|
|
|
+ # 延迟导入GdalUtils,只在需要时才加载
|
|
|
+ try:
|
|
|
+ from .GdalUtils import GdalUtils
|
|
|
+ version = GdalUtils.readableVersion()
|
|
|
+ except ImportError:
|
|
|
+ version = 'Unknown'
|
|
|
return f'数管工具集 ({version})'
|
|
|
|
|
|
def id(self):
|
|
@@ -191,141 +79,193 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
|
|
|
|
|
def icon(self):
|
|
|
return QIcon(os.path.join(pluginPath, 'images', 'dbms', 'tools.png'))
|
|
|
- # return QgsApplication.getThemeIcon("/providerGdal.svg")
|
|
|
|
|
|
def svgIconPath(self):
|
|
|
return os.path.join(pluginPath, 'images', 'dbms', 'tools.png')
|
|
|
- # return QgsApplication.iconPath("providerGdal.svg")
|
|
|
+
|
|
|
+ def _get_algorithm_definitions(self):
|
|
|
+ """获取算法定义列表,使用延迟加载"""
|
|
|
+ if self._algorithm_definitions is None:
|
|
|
+ self._algorithm_definitions = [
|
|
|
+ # GDAL Raster Tools
|
|
|
+ ('AssignProjection', '.AssignProjection'),
|
|
|
+ ('aspect', '.aspect'),
|
|
|
+ ('buildvrt', '.buildvrt'),
|
|
|
+ ('ClipRasterByExtent', '.ClipRasterByExtent'),
|
|
|
+ ('ClipRasterByMask', '.ClipRasterByMask'),
|
|
|
+ ('ColorRelief', '.ColorRelief'),
|
|
|
+ ('contour', '.contour'),
|
|
|
+ ('contour_polygon', '.contour'),
|
|
|
+ ('Datasources2Vrt', '.Datasources2Vrt'),
|
|
|
+ ('fillnodata', '.fillnodata'),
|
|
|
+ ('gdalinfo', '.gdalinfo'),
|
|
|
+ ('gdal2tiles', '.gdal2tiles'),
|
|
|
+ ('gdal2xyz', '.gdal2xyz'),
|
|
|
+ ('gdaladdo', '.gdaladdo'),
|
|
|
+ ('gdalcalc', '.gdalcalc'),
|
|
|
+ ('gdaltindex', '.gdaltindex'),
|
|
|
+ ('GridAverage', '.GridAverage'),
|
|
|
+ ('GridDataMetrics', '.GridDataMetrics'),
|
|
|
+ ('GridInverseDistance', '.GridInverseDistance'),
|
|
|
+ ('GridInverseDistanceNearestNeighbor', '.GridInverseDistanceNearestNeighbor'),
|
|
|
+ ('GridLinear', '.GridLinear'),
|
|
|
+ ('GridNearestNeighbor', '.GridNearestNeighbor'),
|
|
|
+ ('hillshade', '.hillshade'),
|
|
|
+ ('merge', '.merge'),
|
|
|
+ ('nearblack', '.nearblack'),
|
|
|
+ ('pct2rgb', '.pct2rgb'),
|
|
|
+ ('polygonize', '.polygonize'),
|
|
|
+ ('proximity', '.proximity'),
|
|
|
+ ('rasterize', '.rasterize'),
|
|
|
+ ('rearrange_bands', '.rearrange_bands'),
|
|
|
+ ('retile', '.retile'),
|
|
|
+ ('rgb2pct', '.rgb2pct'),
|
|
|
+ ('roughness', '.roughness'),
|
|
|
+ ('sieve', '.sieve'),
|
|
|
+ ('slope', '.slope'),
|
|
|
+ ('translate', '.translate'),
|
|
|
+ ('tpi', '.tpi'),
|
|
|
+ ('tri', '.tri'),
|
|
|
+ ('warp', '.warp'),
|
|
|
+ ('pansharp', '.pansharp'),
|
|
|
+ ('ExtractProjection', '.extractprojection'),
|
|
|
+ ('rasterize_over', '.rasterize_over'),
|
|
|
+ ('rasterize_over_fixed_value', '.rasterize_over_fixed_value'),
|
|
|
+
|
|
|
+ # OGR Vector Tools
|
|
|
+ ('Buffer', '.Buffer'),
|
|
|
+ ('ClipVectorByExtent', '.ClipVectorByExtent'),
|
|
|
+ ('ClipVectorByMask', '.ClipVectorByMask'),
|
|
|
+ ('Dissolve', '.Dissolve'),
|
|
|
+ ('ExecuteSql', '.ExecuteSql'),
|
|
|
+ ('OffsetCurve', '.OffsetCurve'),
|
|
|
+ ('ogr2ogr', '.ogr2ogr'),
|
|
|
+ ('ogrinfo', '.ogrinfo'),
|
|
|
+ ('OneSideBuffer', '.OneSideBuffer'),
|
|
|
+ ('PointsAlongLines', '.PointsAlongLines'),
|
|
|
+ ('VectorProject', '.VectorProject'),
|
|
|
+
|
|
|
+ # PostGIS Tools
|
|
|
+ ('OgrToPostGis', '.OgrToPostGis'),
|
|
|
+ ('Ogr2OgrToPostGisList', '.ogr2ogrtopostgislist'),
|
|
|
+ ('Ogr2PostGisList', '.rastertopostgislist'),
|
|
|
+ ('Postgisupdate', '.postgisupdate'),
|
|
|
+ ('Postgisrestore', '.postgisrestore'),
|
|
|
+ ('Postgistogeoserver', '.postgistogeoserver'),
|
|
|
+ ('ImportOSGBToPostGIS', '.ImportOSGBToPostGIS'),
|
|
|
+ ('ImportTableToPostGIS', '.ImportTableToPostGIS'),
|
|
|
+ ('ImportSingleOSGBToPostGIS', '.ImportSingleOSGBToPostGIS'),
|
|
|
+ ('DataStorageStatistics', '.DataStorageStatistics'),
|
|
|
+ ('GdbToPostGisList', '.gdbtopostgislist'),
|
|
|
+
|
|
|
+ # Export Tools
|
|
|
+ ('ExportVectorByMask', '.ExportVectorByMask'),
|
|
|
+ ('ExportRasterByMask', '.ExportRasterByMask'),
|
|
|
+
|
|
|
+ # Other Tools
|
|
|
+ ('LicenseMake', '.LicenseMake'),
|
|
|
+
|
|
|
+ # Topology Tools
|
|
|
+ ('A00', '.Topology.A00'),
|
|
|
+ ('A01', '.Topology.A01'),
|
|
|
+ ('A02', '.Topology.A02'),
|
|
|
+ ('A03', '.Topology.A03'),
|
|
|
+ ('A04', '.Topology.A04'),
|
|
|
+ ('A05', '.Topology.A05'),
|
|
|
+ ('P00', '.Topology.P00'),
|
|
|
+ ('P01', '.Topology.P01'),
|
|
|
+ ('L00', '.Topology.L00'),
|
|
|
+ ('L01', '.Topology.L01'),
|
|
|
+ ('L02', '.Topology.L02'),
|
|
|
+ ('L03', '.Topology.L03'),
|
|
|
+ ('L04', '.Topology.L04'),
|
|
|
+ ('L05', '.Topology.L05'),
|
|
|
+ ('L06', '.Topology.L06'),
|
|
|
+ ('L07', '.Topology.L07'),
|
|
|
+ ('L08', '.Topology.L08'),
|
|
|
+ ('L09', '.Topology.L09'),
|
|
|
+ ('L10', '.Topology.L10'),
|
|
|
+ ('PP01', '.Topology.PP01'),
|
|
|
+ ('PP02', '.Topology.PP02'),
|
|
|
+ ('PL01', '.Topology.PL01'),
|
|
|
+ ('PL02', '.Topology.PL02'),
|
|
|
+ ('PA01', '.Topology.PA01'),
|
|
|
+ ('PA02', '.Topology.PA02'),
|
|
|
+ ('PA03', '.Topology.PA03'),
|
|
|
+ ('LP01', '.Topology.LP01'),
|
|
|
+ ('LL01', '.Topology.LL01'),
|
|
|
+ ('LL02', '.Topology.LL02'),
|
|
|
+ ('LL03', '.Topology.LL03'),
|
|
|
+ ('LL04', '.Topology.LL04'),
|
|
|
+ ('LA01', '.Topology.LA01'),
|
|
|
+ ('LA02', '.Topology.LA02'),
|
|
|
+ ('LA03', '.Topology.LA03'),
|
|
|
+ ('AP01', '.Topology.AP01'),
|
|
|
+ ('AP02', '.Topology.AP02'),
|
|
|
+ ('AL01', '.Topology.AL01'),
|
|
|
+ ('AA01', '.Topology.AA01'),
|
|
|
+ ('AA02', '.Topology.AA02'),
|
|
|
+ ('AA03', '.Topology.AA03'),
|
|
|
+ ('AA04', '.Topology.AA04'),
|
|
|
+ ('AA05', '.Topology.AA05'),
|
|
|
+ ]
|
|
|
+
|
|
|
+ return self._algorithm_definitions
|
|
|
+
|
|
|
+ def _load_algorithm_class(self, class_name, module_path):
|
|
|
+ """延迟加载算法类"""
|
|
|
+ try:
|
|
|
+ module = importlib.import_module(module_path, package=__package__)
|
|
|
+ return getattr(module, class_name)
|
|
|
+ except (ImportError, AttributeError) as e:
|
|
|
+ print(f"Warning: Could not load algorithm {class_name} from {module_path}: {e}")
|
|
|
+ return None
|
|
|
+
|
|
|
+ def _load_viewshed_if_supported(self):
|
|
|
+ """检查GDAL版本并加载viewshed算法"""
|
|
|
+ try:
|
|
|
+ from osgeo import gdal
|
|
|
+ if int(gdal.VersionInfo()) > 3010000:
|
|
|
+ viewshed_class = self._load_algorithm_class('viewshed', '.viewshed')
|
|
|
+ if viewshed_class:
|
|
|
+ return viewshed_class()
|
|
|
+ except Exception as e:
|
|
|
+ print(f"Warning: Could not check GDAL version or load viewshed: {e}")
|
|
|
+ return None
|
|
|
|
|
|
def loadAlgorithms(self):
|
|
|
- self.algs = [
|
|
|
- AssignProjection(),
|
|
|
- aspect(),
|
|
|
- buildvrt(),
|
|
|
- ClipRasterByExtent(),
|
|
|
- ClipRasterByMask(),
|
|
|
- ColorRelief(),
|
|
|
- contour(),
|
|
|
- contour_polygon(),
|
|
|
- Datasources2Vrt(),
|
|
|
- fillnodata(),
|
|
|
- gdalinfo(),
|
|
|
- gdal2tiles(),
|
|
|
- gdal2xyz(),
|
|
|
- gdaladdo(),
|
|
|
- gdalcalc(),
|
|
|
- gdaltindex(),
|
|
|
- GridAverage(),
|
|
|
- GridDataMetrics(),
|
|
|
- GridInverseDistance(),
|
|
|
- GridInverseDistanceNearestNeighbor(),
|
|
|
- GridLinear(),
|
|
|
- GridNearestNeighbor(),
|
|
|
- hillshade(),
|
|
|
- ImportOSGBToPostGIS(),
|
|
|
- ImportTableToPostGIS(),
|
|
|
- ImportSingleOSGBToPostGIS(),
|
|
|
- DataStorageStatistics(),
|
|
|
- merge(),
|
|
|
- nearblack(),
|
|
|
- pct2rgb(),
|
|
|
- polygonize(),
|
|
|
- proximity(),
|
|
|
- rasterize(),
|
|
|
- rearrange_bands(),
|
|
|
- retile(),
|
|
|
- rgb2pct(),
|
|
|
- roughness(),
|
|
|
- sieve(),
|
|
|
- slope(),
|
|
|
- translate(),
|
|
|
- tpi(),
|
|
|
- tri(),
|
|
|
- warp(),
|
|
|
- pansharp(),
|
|
|
- # rasterize(),
|
|
|
- ExtractProjection(),
|
|
|
- rasterize_over(),
|
|
|
- rasterize_over_fixed_value(),
|
|
|
- # ----- OGR tools -----
|
|
|
- Buffer(),
|
|
|
- ClipVectorByExtent(),
|
|
|
- ClipVectorByMask(),
|
|
|
- Dissolve(),
|
|
|
- ExecuteSql(),
|
|
|
- OffsetCurve(),
|
|
|
- ogr2ogr(),
|
|
|
- ogrinfo(),
|
|
|
- OgrToPostGis(),
|
|
|
- Ogr2OgrToPostGisList(),
|
|
|
- Ogr2PostGisList(),
|
|
|
- OneSideBuffer(),
|
|
|
- PointsAlongLines(),
|
|
|
- Postgisupdate(),
|
|
|
- Postgisrestore(),
|
|
|
- Postgistogeoserver(),
|
|
|
- # SpotfileUpload(),
|
|
|
- # SpotfileDownload(),
|
|
|
- # SpotfileDelete(),
|
|
|
- ExportVectorByMask(),
|
|
|
- GdbToPostGisList(),
|
|
|
- ExportRasterByMask(),
|
|
|
- VectorProject(),
|
|
|
- LicenseMake(),
|
|
|
- # TopologyCheck(),
|
|
|
- A00(),
|
|
|
- A01(),
|
|
|
- A02(),
|
|
|
- A03(),
|
|
|
- A04(),
|
|
|
- A05(),
|
|
|
- P00(),
|
|
|
- P01(),
|
|
|
- L00(),
|
|
|
- L01(),
|
|
|
- L02(),
|
|
|
- L03(),
|
|
|
- L04(),
|
|
|
- L05(),
|
|
|
- L06(),
|
|
|
- L07(),
|
|
|
- L08(),
|
|
|
- L09(),
|
|
|
- L10(),
|
|
|
- PP01(),
|
|
|
- PP02(),
|
|
|
- PL01(),
|
|
|
- PL02(),
|
|
|
- PA01(),
|
|
|
- PA02(),
|
|
|
- PA03(),
|
|
|
- LP01(),
|
|
|
- LL01(),
|
|
|
- LL02(),
|
|
|
- LL03(),
|
|
|
- LL04(),
|
|
|
- LA01(),
|
|
|
- LA02(),
|
|
|
- LA03(),
|
|
|
- AP01(),
|
|
|
- AP02(),
|
|
|
- AL01(),
|
|
|
- AA01(),
|
|
|
- AA02(),
|
|
|
- AA03(),
|
|
|
- AA04(),
|
|
|
- AA05()
|
|
|
- # Ogr2OgrTableToPostGisList(),
|
|
|
- ]
|
|
|
-
|
|
|
- if int(gdal.VersionInfo()) > 3010000:
|
|
|
- self.algs.append(viewshed())
|
|
|
-
|
|
|
- for a in self.algs:
|
|
|
- self.addAlgorithm(a)
|
|
|
+ """使用延迟加载方式加载算法"""
|
|
|
+ self.algs = []
|
|
|
+
|
|
|
+ # 获取算法定义
|
|
|
+ algorithm_definitions = self._get_algorithm_definitions()
|
|
|
+
|
|
|
+ # 延迟加载每个算法
|
|
|
+ for class_name, module_path in algorithm_definitions:
|
|
|
+ algorithm_class = self._load_algorithm_class(class_name, module_path)
|
|
|
+ if algorithm_class:
|
|
|
+ try:
|
|
|
+ algorithm_instance = algorithm_class()
|
|
|
+ self.algs.append(algorithm_instance)
|
|
|
+ except Exception as e:
|
|
|
+ print(f"Warning: Could not instantiate algorithm {class_name}: {e}")
|
|
|
+
|
|
|
+ # 检查并加载viewshed算法(需要GDAL版本检查)
|
|
|
+ viewshed_instance = self._load_viewshed_if_supported()
|
|
|
+ if viewshed_instance:
|
|
|
+ self.algs.append(viewshed_instance)
|
|
|
+
|
|
|
+ # 将所有算法添加到提供者
|
|
|
+ for algorithm in self.algs:
|
|
|
+ self.addAlgorithm(algorithm)
|
|
|
|
|
|
def supportedOutputRasterLayerExtensions(self):
|
|
|
- return GdalUtils.getSupportedOutputRasterExtensions()
|
|
|
+ """延迟加载GdalUtils"""
|
|
|
+ try:
|
|
|
+ from .GdalUtils import GdalUtils
|
|
|
+ return GdalUtils.getSupportedOutputRasterExtensions()
|
|
|
+ except ImportError:
|
|
|
+ return []
|
|
|
|
|
|
def supportsNonFileBasedOutput(self):
|
|
|
"""
|
|
@@ -336,4 +276,4 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
|
|
def tr(self, string, context=''):
|
|
|
if context == '':
|
|
|
context = 'GdalAlgorithmProvider'
|
|
|
- return QCoreApplication.translate(context, string)
|
|
|
+ return QCoreApplication.translate(context, string)
|