GdalAlgorithmProvider.py 11 KB

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