Set up GIS software on multiple computers (Windows & Linux) simultaneosly using SaltStack
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

256 lines
11 KiB

6 years ago
  1. # -*- coding: utf-8 -*-
  2. """
  3. ***************************************************************************
  4. LidarToolsAlgorithmProvider.py
  5. ---------------------
  6. Date : August 2012
  7. Copyright : (C) 2012 by Victor Olaya
  8. Email : volayaf at gmail dot com
  9. ---------------------
  10. Date : April, October 2014 and May 2016
  11. Copyright : (C) 2014 - 2016 by Martin Isenburg
  12. Email : martin near rapidlasso point com
  13. ---------------------
  14. Date : June 2014
  15. Copyright : (C) 2014 by Agresta S. Coop
  16. Email : iescamochero at agresta dot org
  17. ***************************************************************************
  18. * *
  19. * This program is free software; you can redistribute it and/or modify *
  20. * it under the terms of the GNU General Public License as published by *
  21. * the Free Software Foundation; either version 2 of the License, or *
  22. * (at your option) any later version. *
  23. * *
  24. ***************************************************************************
  25. """
  26. __author__ = 'Victor Olaya'
  27. __date__ = 'August 2012'
  28. __copyright__ = '(C) 2012, Victor Olaya'
  29. # This will get replaced with a git SHA1 when you do a git archive
  30. __revision__ = '$Format:%H$'
  31. import os
  32. from qgis.PyQt.QtGui import QIcon
  33. from processing.core.AlgorithmProvider import AlgorithmProvider
  34. from processing.core.ProcessingConfig import ProcessingConfig, Setting
  35. from processing.tools.system import isWindows
  36. from .lastools.LAStoolsUtils import LAStoolsUtils
  37. from .lastools.lasground import lasground
  38. from .lastools.lasheight import lasheight
  39. from .lastools.lasclassify import lasclassify
  40. from .lastools.laszip import laszip
  41. from .lastools.lasindex import lasindex
  42. from .lastools.lasclip import lasclip
  43. from .lastools.lasquery import lasquery
  44. from .lastools.lascolor import lascolor
  45. from .lastools.lasthin import lasthin
  46. from .lastools.lasnoise import lasnoise
  47. from .lastools.lassort import lassort
  48. from .lastools.lastile import lastile
  49. from .lastools.lasgrid import lasgrid
  50. from .lastools.lasview import lasview
  51. from .lastools.lasboundary import lasboundary
  52. from .lastools.lasinfo import lasinfo
  53. from .lastools.las2dem import las2dem
  54. from .lastools.blast2dem import blast2dem
  55. from .lastools.las2iso import las2iso
  56. from .lastools.las2tin import las2tin
  57. from .lastools.las2las_filter import las2las_filter
  58. from .lastools.las2las_project import las2las_project
  59. from .lastools.las2las_transform import las2las_transform
  60. from .lastools.blast2iso import blast2iso
  61. from .lastools.lasprecision import lasprecision
  62. from .lastools.lasvalidate import lasvalidate
  63. from .lastools.lasduplicate import lasduplicate
  64. from .lastools.las2txt import las2txt
  65. from .lastools.txt2las import txt2las
  66. from .lastools.las2shp import las2shp
  67. from .lastools.shp2las import shp2las
  68. from .lastools.lasmerge import lasmerge
  69. from .lastools.lassplit import lassplit
  70. from .lastools.lascanopy import lascanopy
  71. from .lastools.lasoverage import lasoverage
  72. from .lastools.lasoverlap import lasoverlap
  73. from .lastools.laspublish import laspublish
  74. from .lastools.lasground_new import lasground_new
  75. from .lastools.lascontrol import lascontrol
  76. from .lastools.lasdiff import lasdiff
  77. from .lastools.lasheight_classify import lasheight_classify
  78. from .lastools.lastilePro import lastilePro
  79. from .lastools.lasgroundPro import lasgroundPro
  80. from .lastools.las2demPro import las2demPro
  81. from .lastools.lasheightPro import lasheightPro
  82. from .lastools.laszipPro import laszipPro
  83. from .lastools.lasgridPro import lasgridPro
  84. from .lastools.lasduplicatePro import lasduplicatePro
  85. from .lastools.lassortPro import lassortPro
  86. from .lastools.lasclassifyPro import lasclassifyPro
  87. from .lastools.lasthinPro import lasthinPro
  88. from .lastools.lasnoisePro import lasnoisePro
  89. from .lastools.lasindexPro import lasindexPro
  90. from .lastools.lascanopyPro import lascanopyPro
  91. from .lastools.blast2demPro import blast2demPro
  92. from .lastools.lasboundaryPro import lasboundaryPro
  93. from .lastools.lasinfoPro import lasinfoPro
  94. from .lastools.las2lasPro_filter import las2lasPro_filter
  95. from .lastools.las2lasPro_project import las2lasPro_project
  96. from .lastools.las2lasPro_transform import las2lasPro_transform
  97. from .lastools.lasoveragePro import lasoveragePro
  98. from .lastools.txt2lasPro import txt2lasPro
  99. from .lastools.las2txtPro import las2txtPro
  100. from .lastools.blast2isoPro import blast2isoPro
  101. from .lastools.lasvalidatePro import lasvalidatePro
  102. from .lastools.lasmergePro import lasmergePro
  103. from .lastools.lasviewPro import lasviewPro
  104. from .lastools.lasoverlapPro import lasoverlapPro
  105. from .lastools.laspublishPro import laspublishPro
  106. from .lastools.lasgroundPro_new import lasgroundPro_new
  107. from .lastools.lasheightPro_classify import lasheightPro_classify
  108. from .lastools.flightlinesToDTMandDSM import flightlinesToDTMandDSM
  109. from .lastools.flightlinesToCHM import flightlinesToCHM
  110. from .lastools.flightlinesToSingleCHMpitFree import flightlinesToSingleCHMpitFree
  111. from .lastools.hugeFileClassify import hugeFileClassify
  112. from .lastools.hugeFileGroundClassify import hugeFileGroundClassify
  113. from .lastools.hugeFileNormalize import hugeFileNormalize
  114. from .fusion.OpenViewerAction import OpenViewerAction
  115. from .fusion.ASCII2DTM import ASCII2DTM
  116. from .fusion.CanopyMaxima import CanopyMaxima
  117. from .fusion.CanopyModel import CanopyModel
  118. from .fusion.Catalog import Catalog
  119. from .fusion.ClipData import ClipData
  120. from .fusion.CloudMetrics import CloudMetrics
  121. from .fusion.Cover import Cover
  122. from .fusion.DTM2TIF import DTM2TIF
  123. from .fusion.DTM2ASCII import DTM2ASCII
  124. from .fusion.FirstLastReturn import FirstLastReturn
  125. from .fusion.GridMetrics import GridMetrics
  126. from .fusion.GridSurfaceCreate import GridSurfaceCreate
  127. from .fusion.TinSurfaceCreate import TinSurfaceCreate
  128. from .fusion.Csv2Grid import Csv2Grid
  129. from .fusion.GroundFilter import GroundFilter
  130. from .fusion.MergeData import MergeData
  131. from .fusion.FilterData import FilterData
  132. from .fusion.PolyClipData import PolyClipData
  133. from .fusion.ImageCreate import ImageCreate
  134. from .fusion.IntensityImage import IntensityImage
  135. from .fusion.FusionUtils import FusionUtils
  136. class LidarToolsAlgorithmProvider(AlgorithmProvider):
  137. def __init__(self):
  138. AlgorithmProvider.__init__(self)
  139. self.activate = True
  140. def _loadAlgorithms(self):
  141. self.algs = []
  142. # LAStools for processing single files
  143. if (isWindows() or LAStoolsUtils.hasWine()):
  144. lastools = [
  145. lasground(), lasheight(), lasclassify(), lasclip(), lastile(),
  146. lascolor(), lasgrid(), las2dem(), blast2dem(), las2iso(), blast2iso(),
  147. lasview(), lasboundary(), lasinfo(), lasprecision(), las2tin(),
  148. lasvalidate(), lasduplicate(), las2txt(), txt2las(), laszip(),
  149. lasindex(), lasthin(), lassort(), lascanopy(), lasmerge(),
  150. las2shp(), shp2las(), lasnoise(), lassplit(), las2las_filter(),
  151. las2las_project(), las2las_transform(), lasoverage(), lasoverlap(),
  152. lasquery(), laspublish(), lasground_new(), lascontrol(), lasdiff(),
  153. lasheight_classify()
  154. ]
  155. else:
  156. lastools = [
  157. lasinfo(), lasprecision(), lasvalidate(), las2txt(), txt2las(),
  158. laszip(), lasindex(), lasmerge(), las2las_filter(), las2las_project(),
  159. las2las_transform(), lasquery(), lasdiff()
  160. ]
  161. self.algs.extend(lastools)
  162. # LAStools Production for processing folders of files
  163. if (isWindows() or LAStoolsUtils.hasWine()):
  164. lastoolsPro = [
  165. lastilePro(), lasgroundPro(), las2demPro(), lasheightPro(), laszipPro(),
  166. lasduplicatePro(), lasgridPro(), lassortPro(), lasclassifyPro(), lasthinPro(),
  167. lasnoisePro(), lasindexPro(), lascanopyPro(), blast2demPro(), lasboundaryPro(),
  168. lasinfoPro(), las2lasPro_filter(), las2lasPro_project(), las2lasPro_transform(),
  169. lasoveragePro(), txt2lasPro(), las2txtPro(), blast2isoPro(), lasvalidatePro(),
  170. lasmergePro(), lasviewPro(), lasoverlapPro(), laspublishPro(), lasgroundPro_new(),
  171. lasheightPro_classify()
  172. ]
  173. else:
  174. lastoolsPro = [
  175. laszipPro(), lasindexPro(), lasinfoPro(), las2lasPro_filter(), las2lasPro_project(),
  176. las2lasPro_transform(), txt2lasPro(), las2txtPro(), lasvalidatePro(), lasmergePro()
  177. ]
  178. self.algs.extend(lastoolsPro)
  179. # some examples for LAStools Pipelines
  180. if (isWindows() or LAStoolsUtils.hasWine()):
  181. lastoolsPipe = [
  182. flightlinesToDTMandDSM(), flightlinesToCHM(), flightlinesToSingleCHMpitFree(), hugeFileClassify(),
  183. hugeFileGroundClassify(), hugeFileNormalize()
  184. ]
  185. else:
  186. lastoolsPipe = []
  187. self.algs.extend(lastoolsPipe)
  188. # FUSION
  189. if isWindows():
  190. self.actions.append(OpenViewerAction())
  191. fusiontools = [
  192. Catalog(), CloudMetrics(), CanopyMaxima(), CanopyModel(), ClipData(),
  193. Csv2Grid(), Cover(), FilterData(), GridMetrics(), GroundFilter(),
  194. GridSurfaceCreate(), MergeData(), TinSurfaceCreate(), PolyClipData(),
  195. DTM2TIF(), DTM2ASCII(), FirstLastReturn(), ASCII2DTM(), ImageCreate(),
  196. IntensityImage()
  197. ]
  198. for alg in fusiontools:
  199. alg.group, alg.i18n_group = alg.trAlgorithm('Fusion')
  200. self.algs.extend(fusiontools)
  201. def initializeSettings(self):
  202. if isWindows():
  203. LASPath = 'C:\lastools'
  204. else:
  205. LASPath = '/usr/local/bin'
  206. # LAStoolsUtils.LAStoolsPath()
  207. AlgorithmProvider.initializeSettings(self)
  208. ProcessingConfig.addSetting(Setting(
  209. self.getDescription(),
  210. LAStoolsUtils.LASTOOLS_FOLDER,
  211. self.tr('LAStools folder'), LASPath,
  212. valuetype=Setting.FOLDER))
  213. ProcessingConfig.addSetting(Setting(
  214. self.getDescription(),
  215. FusionUtils.FUSION_FOLDER,
  216. self.tr('Fusion folder'), FusionUtils.FusionPath(),
  217. valuetype=Setting.FOLDER))
  218. if not isWindows():
  219. ProcessingConfig.addSetting(Setting(
  220. self.getDescription(),
  221. LAStoolsUtils.WINE_FOLDER,
  222. self.tr('Wine folder'), '', valuetype=Setting.FOLDER))
  223. def getName(self):
  224. return 'lidartools'
  225. def getDescription(self):
  226. return self.tr('Tools for LiDAR data')
  227. def getIcon(self):
  228. return QIcon(os.path.dirname(__file__) + '/../../images/tool.png')
  229. def getSupportedOutputTableExtensions(self):
  230. return ['csv']