GdalAlgorithmProvider.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. """
  2. ***************************************************************************
  3. GdalAlgorithmProvider.py
  4. ---------------------
  5. Date : August 2012
  6. Copyright : (C) 2012 by Victor Olaya
  7. Email : volayaf at gmail dot com
  8. ***************************************************************************
  9. * *
  10. * This program is free software; you can redistribute it and/or modify *
  11. * it under the terms of the GNU General Public License as published by *
  12. * the Free Software Foundation; either version 2 of the License, or *
  13. * (at your option) any later version. *
  14. * *
  15. ***************************************************************************
  16. """
  17. __author__ = 'Victor Olaya'
  18. __date__ = 'August 2012'
  19. __copyright__ = '(C) 2012, Victor Olaya'
  20. import os
  21. from PyQt5.QtGui import QIcon
  22. from osgeo import gdal
  23. from qgis.PyQt.QtCore import QCoreApplication
  24. from qgis.core import (QgsApplication,
  25. QgsProcessingProvider,
  26. QgsRuntimeProfiler)
  27. from processing.core.ProcessingConfig import ProcessingConfig, Setting
  28. from .GdalUtils import GdalUtils
  29. from .AssignProjection import AssignProjection
  30. from .aspect import aspect
  31. from .buildvrt import buildvrt
  32. from .ClipRasterByExtent import ClipRasterByExtent
  33. from .ClipRasterByMask import ClipRasterByMask
  34. from .ColorRelief import ColorRelief
  35. from .contour import contour, contour_polygon
  36. from .Datasources2Vrt import Datasources2Vrt
  37. from .fillnodata import fillnodata
  38. from .gdalinfo import gdalinfo
  39. from .gdal2tiles import gdal2tiles
  40. from .gdal2xyz import gdal2xyz
  41. from .gdaladdo import gdaladdo
  42. from .gdalcalc import gdalcalc
  43. from .gdaltindex import gdaltindex
  44. from .GridAverage import GridAverage
  45. from .GridDataMetrics import GridDataMetrics
  46. from .GridInverseDistance import GridInverseDistance
  47. from .GridInverseDistanceNearestNeighbor import GridInverseDistanceNearestNeighbor
  48. from .GridLinear import GridLinear
  49. from .GridNearestNeighbor import GridNearestNeighbor
  50. from .hillshade import hillshade
  51. from .merge import merge
  52. from .nearblack import nearblack
  53. from .pct2rgb import pct2rgb
  54. from .polygonize import polygonize
  55. from .proximity import proximity
  56. from .rasterize import rasterize
  57. from .rearrange_bands import rearrange_bands
  58. from .retile import retile
  59. from .rgb2pct import rgb2pct
  60. from .roughness import roughness
  61. from .sieve import sieve
  62. from .slope import slope
  63. from .translate import translate
  64. from .tpi import tpi
  65. from .tri import tri
  66. from .warp import warp
  67. from .pansharp import pansharp
  68. from .rasterize_over_fixed_value import rasterize_over_fixed_value
  69. from .viewshed import viewshed
  70. from .extractprojection import ExtractProjection
  71. from .rasterize_over import rasterize_over
  72. from .Buffer import Buffer
  73. from .ClipVectorByExtent import ClipVectorByExtent
  74. from .ClipVectorByMask import ClipVectorByMask
  75. from .Dissolve import Dissolve
  76. from .ExecuteSql import ExecuteSql
  77. from .OffsetCurve import OffsetCurve
  78. from .ogr2ogr import ogr2ogr
  79. from .ogrinfo import ogrinfo
  80. from .OgrToPostGis import OgrToPostGis
  81. from .ogr2ogrtopostgislist import Ogr2OgrToPostGisList
  82. from .rastertopostgislist import Ogr2PostGisList
  83. from .postgistogeoserver import Postgistogeoserver
  84. from .postgisupdate import Postgisupdate
  85. from .postgisrestore import Postgisrestore
  86. from .OneSideBuffer import OneSideBuffer
  87. from .spotfileupload import SpotfileUpload
  88. from .spotfiledownload import SpotfileDownload
  89. from .spotfiledelete import SpotfileDelete
  90. from .PointsAlongLines import PointsAlongLines
  91. from .ExportVectorByMask import ExportVectorByMask
  92. from .ExportRasterByMask import ExportRasterByMask
  93. from .VectorProject import VectorProject
  94. from .LicenseMake import LicenseMake
  95. # from .ogr2ogrtabletopostgislist import Ogr2OgrTableToPostGisList
  96. pluginPath = os.path.normpath(os.path.join(
  97. os.path.split(os.path.dirname(__file__))[0], os.pardir))
  98. class GdalAlgorithmProvider(QgsProcessingProvider):
  99. def __init__(self):
  100. super().__init__()
  101. self.algs = []
  102. QgsApplication.processingRegistry().addAlgorithmAlias('qgis:buildvirtualvector', 'gdal:buildvirtualvector')
  103. def load(self):
  104. with QgsRuntimeProfiler.profile('GDAL Provider'):
  105. ProcessingConfig.settingIcons[self.name()] = self.icon()
  106. ProcessingConfig.addSetting(Setting(self.name(), 'ACTIVATE_GDAL',
  107. self.tr('Activate'), True))
  108. ProcessingConfig.readSettings()
  109. self.refreshAlgorithms()
  110. return True
  111. def unload(self):
  112. ProcessingConfig.removeSetting('ACTIVATE_GDAL')
  113. def isActive(self):
  114. return ProcessingConfig.getSetting('ACTIVATE_GDAL')
  115. def setActive(self, active):
  116. ProcessingConfig.setSettingValue('ACTIVATE_GDAL', active)
  117. def name(self):
  118. return '数管工具集'
  119. def longName(self):
  120. version = GdalUtils.readableVersion()
  121. return f'数管工具集 ({version})'
  122. def id(self):
  123. return 'gdal'
  124. def helpId(self):
  125. return 'gdal'
  126. def icon(self):
  127. return QIcon(os.path.join(pluginPath, 'images', 'dbms', 'tools.png'))
  128. # return QgsApplication.getThemeIcon("/providerGdal.svg")
  129. def svgIconPath(self):
  130. return os.path.join(pluginPath, 'images', 'dbms', 'tools.png')
  131. # return QgsApplication.iconPath("providerGdal.svg")
  132. def loadAlgorithms(self):
  133. self.algs = [
  134. AssignProjection(),
  135. aspect(),
  136. buildvrt(),
  137. ClipRasterByExtent(),
  138. ClipRasterByMask(),
  139. ColorRelief(),
  140. contour(),
  141. contour_polygon(),
  142. Datasources2Vrt(),
  143. fillnodata(),
  144. gdalinfo(),
  145. gdal2tiles(),
  146. gdal2xyz(),
  147. gdaladdo(),
  148. gdalcalc(),
  149. gdaltindex(),
  150. GridAverage(),
  151. GridDataMetrics(),
  152. GridInverseDistance(),
  153. GridInverseDistanceNearestNeighbor(),
  154. GridLinear(),
  155. GridNearestNeighbor(),
  156. hillshade(),
  157. merge(),
  158. nearblack(),
  159. pct2rgb(),
  160. polygonize(),
  161. proximity(),
  162. rasterize(),
  163. rearrange_bands(),
  164. retile(),
  165. rgb2pct(),
  166. roughness(),
  167. sieve(),
  168. slope(),
  169. translate(),
  170. tpi(),
  171. tri(),
  172. warp(),
  173. pansharp(),
  174. # rasterize(),
  175. ExtractProjection(),
  176. rasterize_over(),
  177. rasterize_over_fixed_value(),
  178. # ----- OGR tools -----
  179. Buffer(),
  180. ClipVectorByExtent(),
  181. ClipVectorByMask(),
  182. Dissolve(),
  183. ExecuteSql(),
  184. OffsetCurve(),
  185. ogr2ogr(),
  186. ogrinfo(),
  187. OgrToPostGis(),
  188. Ogr2OgrToPostGisList(),
  189. Ogr2PostGisList(),
  190. Postgistogeoserver(),
  191. OneSideBuffer(),
  192. PointsAlongLines(),
  193. Postgisupdate(),
  194. Postgisrestore(),
  195. SpotfileUpload(),
  196. SpotfileDownload(),
  197. SpotfileDelete(),
  198. ExportVectorByMask(),
  199. ExportRasterByMask(),
  200. VectorProject(),
  201. LicenseMake()
  202. # Ogr2OgrTableToPostGisList(),
  203. ]
  204. if int(gdal.VersionInfo()) > 3010000:
  205. self.algs.append(viewshed())
  206. for a in self.algs:
  207. self.addAlgorithm(a)
  208. def supportedOutputRasterLayerExtensions(self):
  209. return GdalUtils.getSupportedOutputRasterExtensions()
  210. def supportsNonFileBasedOutput(self):
  211. """
  212. GDAL Provider doesn't support non file based outputs
  213. """
  214. return False
  215. def tr(self, string, context=''):
  216. if context == '':
  217. context = 'GdalAlgorithmProvider'
  218. return QCoreApplication.translate(context, string)