GdalAlgorithmProvider.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  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 processing.core.ProcessingConfig import ProcessingConfig, Setting
  24. from qgis.PyQt.QtCore import QCoreApplication
  25. from qgis.core import (QgsApplication,
  26. QgsProcessingProvider,
  27. QgsRuntimeProfiler)
  28. from .AssignProjection import AssignProjection
  29. from .Buffer import Buffer
  30. from .ClipRasterByExtent import ClipRasterByExtent
  31. from .ClipRasterByMask import ClipRasterByMask
  32. from .ClipVectorByExtent import ClipVectorByExtent
  33. from .ClipVectorByMask import ClipVectorByMask
  34. from .ColorRelief import ColorRelief
  35. from .Datasources2Vrt import Datasources2Vrt
  36. from .Dissolve import Dissolve
  37. from .ExecuteSql import ExecuteSql
  38. from .ExportRasterByMask import ExportRasterByMask
  39. from .ExportVectorByMask import ExportVectorByMask
  40. from .GdalUtils import GdalUtils
  41. from .GridAverage import GridAverage
  42. from .GridDataMetrics import GridDataMetrics
  43. from .GridInverseDistance import GridInverseDistance
  44. from .GridInverseDistanceNearestNeighbor import GridInverseDistanceNearestNeighbor
  45. from .GridLinear import GridLinear
  46. from .GridNearestNeighbor import GridNearestNeighbor
  47. from .LicenseMake import LicenseMake
  48. from .OffsetCurve import OffsetCurve
  49. from .OgrToPostGis import OgrToPostGis
  50. from .OneSideBuffer import OneSideBuffer
  51. # from .spotfileupload import SpotfileUpload
  52. # from .spotfiledownload import SpotfileDownload
  53. # from .spotfiledelete import SpotfileDelete
  54. from .PointsAlongLines import PointsAlongLines
  55. from .Topology.A00 import A00
  56. from .Topology.A01 import A01
  57. from .Topology.A02 import A02
  58. from .Topology.A03 import A03
  59. from .Topology.A04 import A04
  60. from .Topology.A05 import A05
  61. from .Topology.AA01 import AA01
  62. from .Topology.AA02 import AA02
  63. from .Topology.AA03 import AA03
  64. from .Topology.AA04 import AA04
  65. from .Topology.AA05 import AA05
  66. from .Topology.AL01 import AL01
  67. from .Topology.AP01 import AP01
  68. from .Topology.AP02 import AP02
  69. from .Topology.L00 import L00
  70. from .Topology.L01 import L01
  71. from .Topology.L02 import L02
  72. from .Topology.L03 import L03
  73. from .Topology.L04 import L04
  74. from .Topology.L05 import L05
  75. from .Topology.L06 import L06
  76. from .Topology.L07 import L07
  77. from .Topology.L08 import L08
  78. from .Topology.L09 import L09
  79. from .Topology.L10 import L10
  80. from .Topology.LA01 import LA01
  81. from .Topology.LA02 import LA02
  82. from .Topology.LA03 import LA03
  83. from .Topology.LL01 import LL01
  84. from .Topology.LL02 import LL02
  85. from .Topology.LL03 import LL03
  86. from .Topology.LL04 import LL04
  87. from .Topology.LP01 import LP01
  88. from .Topology.P00 import P00
  89. from .Topology.P01 import P01
  90. from .Topology.PA01 import PA01
  91. from .Topology.PA02 import PA02
  92. from .Topology.PA03 import PA03
  93. from .Topology.PL01 import PL01
  94. from .Topology.PL02 import PL02
  95. from .Topology.PP01 import PP01
  96. from .Topology.PP02 import PP02
  97. from .VectorProject import VectorProject
  98. from .aspect import aspect
  99. from .buildvrt import buildvrt
  100. from .contour import contour, contour_polygon
  101. from .extractprojection import ExtractProjection
  102. from .fillnodata import fillnodata
  103. from .gdal2tiles import gdal2tiles
  104. from .gdal2xyz import gdal2xyz
  105. from .gdaladdo import gdaladdo
  106. from .gdalcalc import gdalcalc
  107. from .gdalinfo import gdalinfo
  108. from .gdaltindex import gdaltindex
  109. from .gdbtopostgislist import GdbToPostGisList
  110. from .hillshade import hillshade
  111. from .merge import merge
  112. from .nearblack import nearblack
  113. from .ogr2ogr import ogr2ogr
  114. from .ogr2ogrtopostgislist import Ogr2OgrToPostGisList
  115. from .ogrinfo import ogrinfo
  116. from .pansharp import pansharp
  117. from .pct2rgb import pct2rgb
  118. from .polygonize import polygonize
  119. from .postgisrestore import Postgisrestore
  120. from .postgistogeoserver import Postgistogeoserver
  121. from .postgisupdate import Postgisupdate
  122. from .proximity import proximity
  123. from .rasterize import rasterize
  124. from .rasterize_over import rasterize_over
  125. from .rasterize_over_fixed_value import rasterize_over_fixed_value
  126. from .rastertopostgislist import Ogr2PostGisList
  127. from .rearrange_bands import rearrange_bands
  128. from .retile import retile
  129. from .rgb2pct import rgb2pct
  130. from .roughness import roughness
  131. from .sieve import sieve
  132. from .slope import slope
  133. from .tpi import tpi
  134. from .translate import translate
  135. from .tri import tri
  136. from .viewshed import viewshed
  137. from .warp import warp
  138. # from .ogr2ogrtabletopostgislist import Ogr2OgrTableToPostGisList
  139. pluginPath = os.path.normpath(os.path.join(
  140. os.path.split(os.path.dirname(__file__))[0], os.pardir))
  141. class GdalAlgorithmProvider(QgsProcessingProvider):
  142. def __init__(self):
  143. super().__init__()
  144. self.algs = []
  145. QgsApplication.processingRegistry().addAlgorithmAlias('qgis:buildvirtualvector', 'gdal:buildvirtualvector')
  146. def load(self):
  147. with QgsRuntimeProfiler.profile('GDAL Provider'):
  148. ProcessingConfig.settingIcons[self.name()] = self.icon()
  149. ProcessingConfig.addSetting(Setting(self.name(), 'ACTIVATE_GDAL',
  150. self.tr('Activate'), True))
  151. ProcessingConfig.readSettings()
  152. self.refreshAlgorithms()
  153. return True
  154. def unload(self):
  155. ProcessingConfig.removeSetting('ACTIVATE_GDAL')
  156. def isActive(self):
  157. return ProcessingConfig.getSetting('ACTIVATE_GDAL')
  158. def setActive(self, active):
  159. ProcessingConfig.setSettingValue('ACTIVATE_GDAL', active)
  160. def name(self):
  161. return '数管工具集'
  162. def longName(self):
  163. version = GdalUtils.readableVersion()
  164. return f'数管工具集 ({version})'
  165. def id(self):
  166. return 'gdal'
  167. def helpId(self):
  168. return 'gdal'
  169. def icon(self):
  170. return QIcon(os.path.join(pluginPath, 'images', 'dbms', 'tools.png'))
  171. # return QgsApplication.getThemeIcon("/providerGdal.svg")
  172. def svgIconPath(self):
  173. return os.path.join(pluginPath, 'images', 'dbms', 'tools.png')
  174. # return QgsApplication.iconPath("providerGdal.svg")
  175. def loadAlgorithms(self):
  176. self.algs = [
  177. AssignProjection(),
  178. aspect(),
  179. buildvrt(),
  180. ClipRasterByExtent(),
  181. ClipRasterByMask(),
  182. ColorRelief(),
  183. contour(),
  184. contour_polygon(),
  185. Datasources2Vrt(),
  186. fillnodata(),
  187. gdalinfo(),
  188. gdal2tiles(),
  189. gdal2xyz(),
  190. gdaladdo(),
  191. gdalcalc(),
  192. gdaltindex(),
  193. GridAverage(),
  194. GridDataMetrics(),
  195. GridInverseDistance(),
  196. GridInverseDistanceNearestNeighbor(),
  197. GridLinear(),
  198. GridNearestNeighbor(),
  199. hillshade(),
  200. merge(),
  201. nearblack(),
  202. pct2rgb(),
  203. polygonize(),
  204. proximity(),
  205. rasterize(),
  206. rearrange_bands(),
  207. retile(),
  208. rgb2pct(),
  209. roughness(),
  210. sieve(),
  211. slope(),
  212. translate(),
  213. tpi(),
  214. tri(),
  215. warp(),
  216. pansharp(),
  217. # rasterize(),
  218. ExtractProjection(),
  219. rasterize_over(),
  220. rasterize_over_fixed_value(),
  221. # ----- OGR tools -----
  222. Buffer(),
  223. ClipVectorByExtent(),
  224. ClipVectorByMask(),
  225. Dissolve(),
  226. ExecuteSql(),
  227. OffsetCurve(),
  228. ogr2ogr(),
  229. ogrinfo(),
  230. OgrToPostGis(),
  231. Ogr2OgrToPostGisList(),
  232. Ogr2PostGisList(),
  233. Postgistogeoserver(),
  234. OneSideBuffer(),
  235. PointsAlongLines(),
  236. Postgisupdate(),
  237. Postgisrestore(),
  238. # SpotfileUpload(),
  239. # SpotfileDownload(),
  240. # SpotfileDelete(),
  241. ExportVectorByMask(),
  242. GdbToPostGisList(),
  243. ExportRasterByMask(),
  244. VectorProject(),
  245. LicenseMake(),
  246. # TopologyCheck(),
  247. A00(),
  248. A01(),
  249. A02(),
  250. A03(),
  251. A04(),
  252. A05(),
  253. P00(),
  254. P01(),
  255. L00(),
  256. L01(),
  257. L02(),
  258. L03(),
  259. L04(),
  260. L05(),
  261. L06(),
  262. L07(),
  263. L08(),
  264. L09(),
  265. L10(),
  266. PP01(),
  267. PP02(),
  268. PL01(),
  269. PL02(),
  270. PA01(),
  271. PA02(),
  272. PA03(),
  273. LP01(),
  274. LL01(),
  275. LL02(),
  276. LL03(),
  277. LL04(),
  278. LA01(),
  279. LA02(),
  280. LA03(),
  281. AP01(),
  282. AP02(),
  283. AL01(),
  284. AA01(),
  285. AA02(),
  286. AA03(),
  287. AA04(),
  288. AA05()
  289. # Ogr2OgrTableToPostGisList(),
  290. ]
  291. if int(gdal.VersionInfo()) > 3010000:
  292. self.algs.append(viewshed())
  293. for a in self.algs:
  294. self.addAlgorithm(a)
  295. def supportedOutputRasterLayerExtensions(self):
  296. return GdalUtils.getSupportedOutputRasterExtensions()
  297. def supportsNonFileBasedOutput(self):
  298. """
  299. GDAL Provider doesn't support non file based outputs
  300. """
  301. return False
  302. def tr(self, string, context=''):
  303. if context == '':
  304. context = 'GdalAlgorithmProvider'
  305. return QCoreApplication.translate(context, string)