BERATools 0.2.0__py3-none-any.whl → 0.2.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. beratools/__init__.py +1 -7
  2. beratools/core/algo_centerline.py +491 -351
  3. beratools/core/algo_common.py +497 -0
  4. beratools/core/algo_cost.py +192 -0
  5. beratools/core/{dijkstra_algorithm.py → algo_dijkstra.py} +503 -460
  6. beratools/core/algo_footprint_rel.py +577 -0
  7. beratools/core/algo_line_grouping.py +944 -0
  8. beratools/core/algo_merge_lines.py +214 -0
  9. beratools/core/algo_split_with_lines.py +304 -0
  10. beratools/core/algo_tiler.py +428 -0
  11. beratools/core/algo_vertex_optimization.py +469 -0
  12. beratools/core/constants.py +52 -86
  13. beratools/core/logger.py +76 -85
  14. beratools/core/tool_base.py +196 -133
  15. beratools/gui/__init__.py +11 -15
  16. beratools/gui/{beratools.json → assets/beratools.json} +2185 -2300
  17. beratools/gui/batch_processing_dlg.py +513 -463
  18. beratools/gui/bt_data.py +481 -487
  19. beratools/gui/bt_gui_main.py +710 -691
  20. beratools/gui/main.py +26 -0
  21. beratools/gui/map_window.py +162 -146
  22. beratools/gui/tool_widgets.py +725 -493
  23. beratools/tools/Beratools_r_script.r +1120 -1120
  24. beratools/tools/Ht_metrics.py +116 -116
  25. beratools/tools/__init__.py +7 -7
  26. beratools/tools/batch_processing.py +136 -132
  27. beratools/tools/canopy_threshold_relative.py +672 -670
  28. beratools/tools/canopycostraster.py +222 -222
  29. beratools/tools/centerline.py +136 -176
  30. beratools/tools/common.py +857 -885
  31. beratools/tools/fl_regen_csf.py +428 -428
  32. beratools/tools/forest_line_attributes.py +408 -408
  33. beratools/tools/line_footprint_absolute.py +213 -363
  34. beratools/tools/line_footprint_fixed.py +436 -282
  35. beratools/tools/line_footprint_functions.py +733 -720
  36. beratools/tools/line_footprint_relative.py +73 -64
  37. beratools/tools/line_grouping.py +45 -0
  38. beratools/tools/ln_relative_metrics.py +615 -615
  39. beratools/tools/r_cal_lpi_elai.r +24 -24
  40. beratools/tools/r_generate_pd_focalraster.r +100 -100
  41. beratools/tools/r_interface.py +79 -79
  42. beratools/tools/r_point_density.r +8 -8
  43. beratools/tools/rpy_chm2trees.py +86 -86
  44. beratools/tools/rpy_dsm_chm_by.py +81 -81
  45. beratools/tools/rpy_dtm_by.py +63 -63
  46. beratools/tools/rpy_find_cellsize.py +43 -43
  47. beratools/tools/rpy_gnd_csf.py +74 -74
  48. beratools/tools/rpy_hummock_hollow.py +85 -85
  49. beratools/tools/rpy_hummock_hollow_raster.py +71 -71
  50. beratools/tools/rpy_las_info.py +51 -51
  51. beratools/tools/rpy_laz2las.py +40 -40
  52. beratools/tools/rpy_lpi_elai_lascat.py +466 -466
  53. beratools/tools/rpy_normalized_lidar_by.py +56 -56
  54. beratools/tools/rpy_percent_above_dbh.py +80 -80
  55. beratools/tools/rpy_points2trees.py +88 -88
  56. beratools/tools/rpy_vegcoverage.py +94 -94
  57. beratools/tools/tiler.py +48 -206
  58. beratools/tools/tool_template.py +69 -54
  59. beratools/tools/vertex_optimization.py +61 -620
  60. beratools/tools/zonal_threshold.py +144 -144
  61. beratools-0.2.2.dist-info/METADATA +108 -0
  62. beratools-0.2.2.dist-info/RECORD +74 -0
  63. {beratools-0.2.0.dist-info → beratools-0.2.2.dist-info}/WHEEL +1 -1
  64. {beratools-0.2.0.dist-info → beratools-0.2.2.dist-info}/licenses/LICENSE +22 -22
  65. beratools/gui/cli.py +0 -18
  66. beratools/gui/gui.json +0 -8
  67. beratools/gui_tk/ASCII Banners.txt +0 -248
  68. beratools/gui_tk/__init__.py +0 -20
  69. beratools/gui_tk/beratools_main.py +0 -515
  70. beratools/gui_tk/bt_widgets.py +0 -442
  71. beratools/gui_tk/cli.py +0 -18
  72. beratools/gui_tk/img/BERALogo.png +0 -0
  73. beratools/gui_tk/img/closed.gif +0 -0
  74. beratools/gui_tk/img/closed.png +0 -0
  75. beratools/gui_tk/img/open.gif +0 -0
  76. beratools/gui_tk/img/open.png +0 -0
  77. beratools/gui_tk/img/tool.gif +0 -0
  78. beratools/gui_tk/img/tool.png +0 -0
  79. beratools/gui_tk/main.py +0 -14
  80. beratools/gui_tk/map_window.py +0 -144
  81. beratools/gui_tk/runner.py +0 -1481
  82. beratools/gui_tk/tooltip.py +0 -55
  83. beratools/third_party/pyqtlet2/__init__.py +0 -9
  84. beratools/third_party/pyqtlet2/leaflet/__init__.py +0 -26
  85. beratools/third_party/pyqtlet2/leaflet/control/__init__.py +0 -6
  86. beratools/third_party/pyqtlet2/leaflet/control/control.py +0 -59
  87. beratools/third_party/pyqtlet2/leaflet/control/draw.py +0 -52
  88. beratools/third_party/pyqtlet2/leaflet/control/layers.py +0 -20
  89. beratools/third_party/pyqtlet2/leaflet/core/Parser.py +0 -24
  90. beratools/third_party/pyqtlet2/leaflet/core/__init__.py +0 -2
  91. beratools/third_party/pyqtlet2/leaflet/core/evented.py +0 -180
  92. beratools/third_party/pyqtlet2/leaflet/layer/__init__.py +0 -5
  93. beratools/third_party/pyqtlet2/leaflet/layer/featuregroup.py +0 -34
  94. beratools/third_party/pyqtlet2/leaflet/layer/icon/__init__.py +0 -1
  95. beratools/third_party/pyqtlet2/leaflet/layer/icon/icon.py +0 -30
  96. beratools/third_party/pyqtlet2/leaflet/layer/imageoverlay.py +0 -18
  97. beratools/third_party/pyqtlet2/leaflet/layer/layer.py +0 -105
  98. beratools/third_party/pyqtlet2/leaflet/layer/layergroup.py +0 -45
  99. beratools/third_party/pyqtlet2/leaflet/layer/marker/__init__.py +0 -1
  100. beratools/third_party/pyqtlet2/leaflet/layer/marker/marker.py +0 -91
  101. beratools/third_party/pyqtlet2/leaflet/layer/tile/__init__.py +0 -2
  102. beratools/third_party/pyqtlet2/leaflet/layer/tile/gridlayer.py +0 -4
  103. beratools/third_party/pyqtlet2/leaflet/layer/tile/tilelayer.py +0 -16
  104. beratools/third_party/pyqtlet2/leaflet/layer/vector/__init__.py +0 -5
  105. beratools/third_party/pyqtlet2/leaflet/layer/vector/circle.py +0 -15
  106. beratools/third_party/pyqtlet2/leaflet/layer/vector/circlemarker.py +0 -18
  107. beratools/third_party/pyqtlet2/leaflet/layer/vector/path.py +0 -5
  108. beratools/third_party/pyqtlet2/leaflet/layer/vector/polygon.py +0 -14
  109. beratools/third_party/pyqtlet2/leaflet/layer/vector/polyline.py +0 -18
  110. beratools/third_party/pyqtlet2/leaflet/layer/vector/rectangle.py +0 -14
  111. beratools/third_party/pyqtlet2/leaflet/map/__init__.py +0 -1
  112. beratools/third_party/pyqtlet2/leaflet/map/map.py +0 -220
  113. beratools/third_party/pyqtlet2/mapwidget.py +0 -45
  114. beratools/third_party/pyqtlet2/web/custom.js +0 -43
  115. beratools/third_party/pyqtlet2/web/map.html +0 -23
  116. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers-2x.png +0 -0
  117. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers.png +0 -0
  118. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon-2x.png +0 -0
  119. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon.png +0 -0
  120. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-shadow.png +0 -0
  121. beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.css +0 -656
  122. beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.js +0 -6
  123. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.codeclimate.yml +0 -14
  124. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.editorconfig +0 -4
  125. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.gitattributes +0 -22
  126. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.travis.yml +0 -43
  127. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/LICENSE +0 -20
  128. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers-2x.png +0 -0
  129. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers.png +0 -0
  130. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon-2x.png +0 -0
  131. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon.png +0 -0
  132. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-shadow.png +0 -0
  133. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet-2x.png +0 -0
  134. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.png +0 -0
  135. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.svg +0 -156
  136. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.css +0 -10
  137. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.js +0 -10
  138. beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/LICENSE +0 -22
  139. beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/leaflet.rotatedMarker.js +0 -57
  140. beratools/tools/forest_line_ecosite.py +0 -216
  141. beratools/tools/lapis_all.py +0 -103
  142. beratools/tools/least_cost_path_from_chm.py +0 -152
  143. beratools-0.2.0.dist-info/METADATA +0 -63
  144. beratools-0.2.0.dist-info/RECORD +0 -142
  145. /beratools/gui/{img → assets}/BERALogo.png +0 -0
  146. /beratools/gui/{img → assets}/closed.gif +0 -0
  147. /beratools/gui/{img → assets}/closed.png +0 -0
  148. /beratools/{gui_tk → gui/assets}/gui.json +0 -0
  149. /beratools/gui/{img → assets}/open.gif +0 -0
  150. /beratools/gui/{img → assets}/open.png +0 -0
  151. /beratools/gui/{img → assets}/tool.gif +0 -0
  152. /beratools/gui/{img → assets}/tool.png +0 -0
  153. {beratools-0.2.0.dist-info → beratools-0.2.2.dist-info}/entry_points.txt +0 -0
@@ -1,515 +0,0 @@
1
- #!/usr/bin/env python3
2
- """ This file is intended to be a helper for running BERA tools from a Python script.
3
- """
4
-
5
- # This script is part of the BERA Tools geospatial library.
6
- # Original Authors: Dr. John Lindsay
7
- # Created: 28/11/2017
8
- # Modified: 23/03/2023
9
- # Author: Richard Zeng
10
- # License: MIT
11
-
12
- # from __future__ import print_function
13
- import os
14
- from os import path
15
- import sys
16
- from pathlib import Path
17
- import platform
18
- import re
19
- import json
20
- import multiprocessing
21
- from subprocess import CalledProcessError, Popen, PIPE, STDOUT
22
-
23
- from beratools.tools.lapis_all import *
24
- from beratools.tools.common import *
25
-
26
-
27
- running_windows = platform.system() == 'Windows'
28
- if running_windows:
29
- from subprocess import STARTUPINFO, STARTF_USESHOWWINDOW
30
-
31
-
32
- def default_callback(value):
33
- """
34
- A simple default callback that outputs using the print function. When
35
- tools are called without providing a custom callback, this function
36
- will be used to print to standard output.
37
- """
38
- print(value)
39
-
40
-
41
- class BeraTools(object):
42
- """
43
- An object for interfacing with the BERA Tools executable.
44
- """
45
-
46
- def __init__(self):
47
- if running_windows:
48
- self.ext = '.exe'
49
- else:
50
- self.ext = ''
51
- self.exe_name = "BERA_tools{}".format(self.ext)
52
- self.exe_path = path.dirname(path.abspath(__file__))
53
-
54
- self.work_dir = ""
55
- self.verbose = False
56
- self.show_advanced = BT_SHOW_ADVANCED_OPTIONS
57
- self.__compress_rasters = False
58
- self.__max_procs = -1
59
- self.recent_tool = None
60
- self.ascii_art = None
61
-
62
- # set maximum available cpu core for tools
63
- self.__max_cpu_cores = min(BT_MAXIMUM_CPU_CORES, multiprocessing.cpu_count())
64
-
65
- # load bera tools
66
- self.bera_tools = None
67
- self.tools_list = []
68
- self.sorted_tools = []
69
- self.upper_toolboxes = []
70
- self.lower_toolboxes = []
71
- self.get_bera_tools()
72
- self.get_bera_tool_list()
73
- self.get_bera_toolboxes()
74
- self.toolbox_list = self.get_bera_toolboxes()
75
- self.sort_toolboxes()
76
-
77
- self.setting_file = os.path.join(self.exe_path, '..\..\.data\saved_tool_parameters.json')
78
- if os.path.isfile(self.setting_file):
79
- # read the saved_tool_parameters.json file if it exists
80
- with open(self.setting_file, 'r') as settings_file:
81
- settings = json.load(settings_file)
82
-
83
- # parse file
84
- if 'gui_parameters' in settings.keys():
85
- gui_settings = settings['gui_parameters']
86
- if 'working_directory' in gui_settings.keys():
87
- self.work_dir = str(gui_settings['working_directory'])
88
- if 'verbose_mode' in gui_settings.keys():
89
- self.verbose = str(gui_settings['verbose_mode'])
90
- if 'compress_rasters' in gui_settings.keys():
91
- self.__compress_rasters = gui_settings['compress_rasters']
92
- if 'max_procs' in gui_settings.keys():
93
- self.__max_procs = gui_settings['max_procs']
94
- if 'recent_tool' in gui_settings.keys():
95
- self.recent_tool = gui_settings['recent_tool']
96
- if not self.get_bera_tool_api(self.recent_tool):
97
- self.recent_tool = None
98
- else:
99
- print("Settings.json not exist.")
100
-
101
- self.gui_setting_file = os.path.join(self.exe_path, '..\gui\gui.json')
102
- if os.path.isfile(self.gui_setting_file):
103
- # read the settings.json file if it exists
104
- with open(self.gui_setting_file, 'r') as gui_setting_file:
105
- gui_settings = json.load(gui_setting_file)
106
-
107
- # parse file
108
- if 'ascii_art' in gui_settings.keys():
109
- bera_art = ''
110
- for line_of_art in gui_settings['ascii_art']:
111
- bera_art += line_of_art
112
- self.ascii_art = bera_art
113
- else:
114
- print("Settings.json not exist.")
115
-
116
- self.cancel_op = False
117
- self.default_callback = default_callback
118
- self.start_minimized = False
119
-
120
- def set_bera_dir(self, path_str):
121
- """
122
- Sets the directory to the BERA Tools executable file.
123
- """
124
- self.exe_path = path_str
125
-
126
- def save_setting(self, key, value):
127
- # check setting directory existence
128
- data_path = Path(self.setting_file).resolve().parent
129
- if not data_path.exists():
130
- data_path.mkdir()
131
-
132
- settings = {}
133
- if os.path.isfile(self.setting_file):
134
- # read the settings.json file if it exists
135
- with open(self.setting_file, 'r') as read_settings_file:
136
- settings = json.load(read_settings_file)
137
-
138
- if not settings:
139
- settings = {}
140
- else:
141
- print("Settings file not exist, creating one.")
142
-
143
- if value is not None:
144
- if 'gui_parameters' not in settings.keys():
145
- settings['gui_parameters'] = {}
146
-
147
- settings['gui_parameters'][key] = value
148
-
149
- with open(self.setting_file, 'w') as write_settings_file:
150
- json.dump(settings, write_settings_file, indent=4)
151
-
152
- def set_working_dir(self, path_str):
153
- """
154
- Sets the working directory, i.e. the directory in which
155
- the data files are located. By setting the working
156
- directory, tool input parameters that are files need only
157
- specify the file name rather than the complete file path.
158
- """
159
- self.work_dir = path.normpath(path_str)
160
- self.save_setting('working_directory', self.work_dir)
161
-
162
- def get_working_dir(self):
163
- return self.work_dir
164
-
165
- def get_verbose_mode(self):
166
- return self.verbose
167
-
168
- def set_verbose_mode(self, val=True):
169
- """
170
- Sets verbose mode. If verbose mode is False, tools will not
171
- print output messages. Tools will frequently provide substantial
172
- feedback while they are operating, e.g. updating progress for
173
- various sub-routines. When the user has scripted a workflow
174
- that ties many tools in sequence, this level of tool output
175
- can be problematic. By setting verbose mode to False, these
176
- messages are suppressed and tools run as background processes.
177
- """
178
- self.verbose = val
179
- self.save_setting('verbose_mode', val)
180
-
181
-
182
- def set_max_procs(self, val=-1):
183
- """
184
- Sets the flag used by BERA Tools to determine whether to use compression for output rasters.
185
- """
186
- self.__max_procs = val
187
-
188
- self.save_setting('max_procs', val)
189
-
190
- def get_max_procs(self):
191
- return self.__max_procs
192
-
193
- def get_max_cpu_cores(self):
194
- return self.__max_cpu_cores
195
-
196
- def save_recent_tool(self):
197
- gui_settings = {}
198
- if os.path.isfile(self.setting_file):
199
- # read the settings.json file if it exists
200
- with open(self.setting_file, 'r') as settings_file:
201
- gui_settings = json.load(settings_file)
202
- else:
203
- print("Settings.json not exist, creat one.")
204
-
205
- if self.recent_tool and len(self.recent_tool) > 0:
206
- if 'gui_parameters' not in gui_settings.keys():
207
- gui_settings['gui_parameters'] = {}
208
-
209
- gui_settings['gui_parameters']['recent_tool'] = self.recent_tool
210
- with open(self.setting_file, 'w') as settings_file:
211
- json.dump(gui_settings, settings_file, indent=4)
212
-
213
- def run_tool_bt(self, tool_api, args, callback=None, verbose=True):
214
- """
215
- Runs a tool and specifies tool arguments.
216
- Returns 0 if completes without error.
217
- Returns 1 if error encountered (details are sent to callback).
218
- Returns 2 if process is cancelled by user.
219
- """
220
-
221
- try:
222
- if callback is None:
223
- callback = self.default_callback
224
-
225
- work_dir = os.getcwd()
226
- os.chdir(self.exe_path)
227
-
228
- except (OSError, ValueError, CalledProcessError) as err:
229
- callback(str(err))
230
- return 1
231
- finally:
232
- os.chdir(work_dir)
233
-
234
- # Call script using new process to make GUI responsive
235
- try:
236
- proc = None
237
-
238
- # convert to valid json string
239
- args_string = str(args).replace("'", '"')
240
- args_string = args_string.replace('True', 'true')
241
- args_string = args_string.replace('False', 'false')
242
-
243
- tool_name = self.get_bera_tool_name(tool_api)
244
- tool_type = self.get_bera_tool_type(tool_name)
245
- if tool_type == 'python':
246
- args_tool = ['python', os.path.join(r'..\tools', tool_api + '.py'),
247
- '-i', args_string, '-p', str(self.get_max_procs()), '-v', str(self.verbose)]
248
- elif tool_type == 'executable':
249
- print(globals().get(tool_api))
250
- args_tool = globals()[tool_api](args_string)
251
- # change working dir
252
- work_dir = os.getcwd()
253
- lapis_path = Path(work_dir).parent.joinpath('./third_party/Lapis_0_8')
254
- os.chdir(lapis_path.as_posix())
255
-
256
- if running_windows and self.start_minimized:
257
- si = STARTUPINFO()
258
- si.dwFlags = STARTF_USESHOWWINDOW
259
- si.wShowWindow = 7 # Set window minimized and not activated
260
- proc = Popen(args_tool, shell=False, stdout=PIPE,
261
- stderr=STDOUT, bufsize=1, universal_newlines=True,
262
- startupinfo=si)
263
- else:
264
- proc = Popen(args_tool, shell=False, stdout=PIPE,
265
- stderr=STDOUT, bufsize=1, universal_newlines=True)
266
-
267
-
268
- while proc is not None:
269
- line = proc.stdout.readline()
270
- sys.stdout.flush()
271
- if line != '':
272
- if not self.cancel_op:
273
- # remove esc string which origin is unknown
274
- rm_str = '\x1b[0m'
275
- if rm_str in line:
276
- if BT_DEBUGGING:
277
- callback('Problem caught: '+line)
278
- line = line.replace(rm_str, '')
279
-
280
- callback(line.strip())
281
- else:
282
- self.cancel_op = False
283
- proc.terminate()
284
- callback('Tool operation terminated.')
285
- callback('------------------------------------')
286
- return 2
287
-
288
- else:
289
- break
290
-
291
- out_str = '{} tool finished'.format(self.get_bera_tool_name(tool_api))
292
- sep_str = '-' * len(out_str)
293
- callback(sep_str)
294
- callback(out_str)
295
- callback(sep_str)
296
-
297
- return 0
298
- except (OSError, ValueError, CalledProcessError) as err:
299
- callback(str(err))
300
- return 1
301
-
302
- def about(self):
303
- """
304
- Retrieves the help description for BERA Tools.
305
- """
306
- work_dir = None
307
- try:
308
- work_dir = os.getcwd()
309
- os.chdir(self.exe_path)
310
-
311
- about_text = 'BERA Tools provide a series of tools developed by AppliedGRG lab.\n\n'
312
- about_text += self.ascii_art
313
-
314
- return about_text
315
-
316
- except (OSError, ValueError, CalledProcessError) as err:
317
- return err
318
- finally:
319
- os.chdir(work_dir)
320
-
321
- def license(self):
322
- """
323
- Retrieves the license information for BERA Tools.
324
- """
325
-
326
- work_dir = os.getcwd()
327
- os.chdir(self.exe_path)
328
-
329
- try:
330
- with open(os.path.join(self.exe_path, r'..\..\LICENSE.txt'), 'r') as f:
331
- ret = f.read()
332
-
333
- return ret
334
- except (OSError, ValueError, CalledProcessError) as err:
335
- return err
336
- finally:
337
- os.chdir(work_dir)
338
-
339
- def get_saved_tool_parameter(self, tool, variable):
340
- data_path = Path(__file__).resolve().cwd().parent.parent.joinpath(r'.data')
341
- if not data_path.exists():
342
- data_path.mkdir()
343
-
344
- json_file = data_path.joinpath(data_path, 'saved_tool_parameters.json')
345
- if json_file.exists():
346
- with open(json_file) as open_file:
347
- saved_parameters = json.load(open_file)
348
- if tool in list(saved_parameters.keys()):
349
- tool_params = saved_parameters[tool]
350
- if tool_params:
351
- if variable in tool_params.keys():
352
- saved_value = tool_params[variable]
353
- return saved_value
354
-
355
- return None
356
-
357
- def get_bera_tools(self):
358
- tool_json = Path(self.exe_path).parent.joinpath(r'gui/beratools.json')
359
- if tool_json.exists():
360
- json_file = open(tool_json.as_posix())
361
- self.bera_tools = json.load(json_file)
362
- else:
363
- print('Tool configuration file not exists')
364
-
365
- def get_bera_tool_list(self):
366
- self.tools_list = []
367
- self.sorted_tools = []
368
-
369
- for toolbox in self.bera_tools['toolbox']:
370
- category = []
371
- for item in toolbox['tools']:
372
- if item['name']:
373
- category.append(item['name'])
374
- self.tools_list.append(item['name']) # add tool to list
375
-
376
- self.sorted_tools.append(category)
377
-
378
- def sort_toolboxes(self):
379
- for toolbox in self.toolbox_list:
380
- if toolbox.find('/') == (-1): # Does not contain a sub toolbox, i.e. does not contain '/'
381
- self.upper_toolboxes.append(toolbox) # add to both upper toolbox list and lower toolbox list
382
- self.lower_toolboxes.append(toolbox)
383
- else: # Contains a sub toolbox
384
- self.lower_toolboxes.append(toolbox) # add to only the lower toolbox list
385
-
386
- def get_bera_toolboxes(self):
387
- toolboxes = []
388
- for toolbox in self.bera_tools['toolbox']:
389
- tb = toolbox['category']
390
- toolboxes.append(tb)
391
- return toolboxes
392
-
393
- def get_bera_tool_info(self, tool_name):
394
- for toolbox in self.bera_tools['toolbox']:
395
- for tool in toolbox['tools']:
396
- if tool['name'] == tool_name:
397
- return tool['info']
398
-
399
- def get_bera_tool_parameters(self, tool_name):
400
- new_params = {'parameters': []}
401
- tool = {}
402
- batch_tool_list = []
403
- for toolbox in self.bera_tools['toolbox']:
404
- for single_tool in toolbox['tools']:
405
- if single_tool['batch_processing']:
406
- batch_tool_list.append(single_tool['name'])
407
-
408
- if tool_name == single_tool['name']:
409
- tool = single_tool
410
-
411
- for key, value in tool.items():
412
- if key != 'parameters':
413
- new_params[key] = value
414
-
415
- # convert json format for parameters
416
- for param in tool['parameters']:
417
- new_param = {'name': param['parameter']}
418
- if 'variable' in param.keys():
419
- new_param['flag'] = param['variable']
420
- # restore saved parameters
421
- saved_value = self.get_saved_tool_parameter(tool['tool_api'], param['variable'])
422
- if saved_value is not None:
423
- new_param['saved_value'] = saved_value
424
- else:
425
- new_param['flag'] = 'FIXME'
426
-
427
- if not param['output']:
428
- if param['type'] == 'list':
429
- if tool_name == 'Batch Processing':
430
- new_param['parameter_type'] = {'OptionList': batch_tool_list}
431
- new_param['data_type'] = 'String'
432
- else:
433
- new_param['parameter_type'] = {'OptionList': param['data']}
434
- new_param['data_type'] = 'String'
435
- if param['typelab'] == 'text':
436
- new_param['data_type'] = 'String'
437
- elif param['typelab'] == 'int':
438
- new_param['data_type'] = 'Integer'
439
- elif param['typelab'] == 'float':
440
- new_param['data_type'] = 'Float'
441
- elif param['typelab'] == 'bool':
442
- new_param['data_type'] = 'Boolean'
443
- elif param['type'] == 'text':
444
- new_param['parameter_type'] = 'String'
445
- elif param['type'] == 'number':
446
- if param['typelab'] == 'int':
447
- new_param['parameter_type'] = 'Integer'
448
- else:
449
- new_param['parameter_type'] = 'Float'
450
- elif param['type'] == 'file':
451
- new_param['parameter_type'] = {'ExistingFile': [param['typelab']]}
452
- else:
453
- new_param['parameter_type'] = {'ExistingFile': ''}
454
- else:
455
- new_param["parameter_type"] = {'NewFile': [param['typelab']]}
456
-
457
- new_param['description'] = param['description']
458
-
459
- if param['type'] == 'raster':
460
- for i in new_param["parameter_type"].keys():
461
- new_param['parameter_type'][i] = 'Raster'
462
- elif param['type'] == 'lidar':
463
- for i in new_param["parameter_type"].keys():
464
- new_param['parameter_type'][i] = 'Lidar'
465
- elif param['type'] == 'vector':
466
- for i in new_param["parameter_type"].keys():
467
- new_param['parameter_type'][i] = 'Vector'
468
- elif param['type'] == 'Directory':
469
- new_param['parameter_type'] = {'Directory': [param['typelab']]}
470
-
471
- new_param['default_value'] = param['default']
472
- if "optional" in param.keys():
473
- new_param['optional'] = param['optional']
474
- else:
475
- new_param['optional'] = False
476
-
477
- new_params['parameters'].append(new_param)
478
-
479
- return new_params
480
-
481
- def get_bera_tool_parameters_list(self, tool_name):
482
- params = self.get_bera_tool_parameters(tool_name)
483
- param_list = {}
484
- for item in params['parameters']:
485
- param_list[item['flag']] = item['default_value']
486
-
487
- return param_list
488
-
489
- def get_bera_tool_name(self, tool_api):
490
- tool_name = None
491
- for toolbox in self.bera_tools['toolbox']:
492
- for tool in toolbox['tools']:
493
- if tool_api == tool['tool_api']:
494
- tool_name = tool['name']
495
-
496
- return tool_name
497
-
498
- def get_bera_tool_api(self, tool_name):
499
- tool_api = None
500
- for toolbox in self.bera_tools['toolbox']:
501
- for tool in toolbox['tools']:
502
- if tool_name == tool['name']:
503
- tool_api = tool['tool_api']
504
-
505
- return tool_api
506
-
507
- def get_bera_tool_type(self, tool_name):
508
- tool_type = None
509
- for toolbox in self.bera_tools['toolbox']:
510
- for tool in toolbox['tools']:
511
- if tool_name == tool['name']:
512
- tool_type = tool['tool_type']
513
-
514
- return tool_type
515
-