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,64 +1,73 @@
1
- # ---------------------------------------------------------------------------
2
- # Copyright (C) 2021 Applied Geospatial Research Group
3
- #
4
- # This program is free software: you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation, version 3.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License
14
- # along with this program. If not, see <https://gnu.org/licenses/gpl-3.0>.
15
- #
16
- # ---------------------------------------------------------------------------
17
- #
18
- # line_footprint_relative.py
19
- # Script Author: Maverick Fong
20
- # Date: 2023-May
21
- # Use open sources python library for produce dynamic footprint
22
- # from dynamic canopy and cost raster with lines and CHM input.
23
- # Prerequisite: Line feature class must have the attribute Fields: "OLnFID" adn CHM raster
24
- # line_footprint_relative.py
25
- # This script is part of the BERA toolset
26
- # Webpage: https://github.com/
27
- #
28
- # Purpose: Creates dynamic footprint polygons for each input line based on a least
29
- # cost corridor method and individual line thresholds.
30
- #
31
- # ---------------------------------------------------------------------------
32
- from beratools.tools.line_footprint_functions import *
33
- from beratools.tools.canopy_threshold_relative import *
34
-
35
- if __name__ == '__main__':
36
- start_time = time.time()
37
- print('Dynamic CC and Footprint processing started')
38
- print('Current time: {}'.format(time.strftime("%d %b %Y %H:%M:%S", time.localtime())))
39
-
40
- parser = argparse.ArgumentParser()
41
- parser.add_argument('-i', '--input', type=json.loads)
42
- parser.add_argument('-p', '--processes')
43
- parser.add_argument('-v', '--verbose')
44
- args = parser.parse_args()
45
- args.input['full_step'] = True
46
- del args.input['out_footprint']
47
- del args.input['out_centerline']
48
- del args.input['exp_shk_cell']
49
- del args.input['max_ln_width']
50
-
51
- verbose = True if args.verbose == 'True' else False
52
- dy_cl_line = main_canopy_threshold_relative(print, **args.input, processes=int(args.processes), verbose=verbose)
53
- args = parser.parse_args()
54
- args.input['full_step'] = True
55
- args.input["in_line"] = dy_cl_line
56
- del args.input['off_ln_dist']
57
- del args.input['canopy_percentile']
58
- verbose = True if args.verbose == 'True' else False
59
- main_line_footprint_relative(print, **args.input, processes=int(args.processes), verbose=verbose)
60
-
61
- print('%{}'.format(100))
62
- print('Dynamic CC and Footprint processes finished')
63
- print('Current time: {}'.format(time.strftime("%d %b %Y %H:%M:%S", time.localtime())))
64
- print('Total processing time (seconds): {}'.format(round(time.time() - start_time, 3)))
1
+ # ---------------------------------------------------------------------------
2
+ # Copyright (C) 2021 Applied Geospatial Research Group
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, version 3.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with this program. If not, see <https://gnu.org/licenses/gpl-3.0>.
15
+ #
16
+ # ---------------------------------------------------------------------------
17
+ #
18
+ # line_footprint_relative.py
19
+ # Script Author: Maverick Fong
20
+ # Date: 2023-May
21
+ # Use open sources python library for produce dynamic footprint
22
+ # from dynamic canopy and cost raster with lines and CHM input.
23
+ # Prerequisite: Line feature class must have the attribute Fields: "OLnFID" adn CHM raster
24
+ # line_footprint_relative.py
25
+ # This script is part of the BERA toolset
26
+ # Webpage: https://github.com/
27
+ #
28
+ # Purpose: Creates dynamic footprint polygons for each input line based on a least
29
+ # cost corridor method and individual line thresholds.
30
+ #
31
+ # ---------------------------------------------------------------------------
32
+ import sys
33
+ from pathlib import Path
34
+ from inspect import getsourcefile
35
+
36
+ if __name__ == "__main__":
37
+ current_file = Path(getsourcefile(lambda: 0)).resolve()
38
+ btool_dir = current_file.parents[2]
39
+ sys.path.insert(0, btool_dir.as_posix())
40
+
41
+ from beratools.tools.line_footprint_functions import *
42
+ from beratools.tools.canopy_threshold_relative import *
43
+
44
+ if __name__ == '__main__':
45
+ start_time = time.time()
46
+ print('Dynamic CC and Footprint processing started')
47
+ print('Current time: {}'.format(time.strftime("%d %b %Y %H:%M:%S", time.localtime())))
48
+
49
+ parser = argparse.ArgumentParser()
50
+ parser.add_argument('-i', '--input', type=json.loads)
51
+ parser.add_argument('-p', '--processes')
52
+ parser.add_argument('-v', '--verbose')
53
+ args = parser.parse_args()
54
+ args.input['full_step'] = True
55
+ del args.input['out_footprint']
56
+ del args.input['out_centerline']
57
+ del args.input['exp_shk_cell']
58
+ del args.input['max_ln_width']
59
+
60
+ verbose = True if args.verbose == 'True' else False
61
+ dy_cl_line = main_canopy_threshold_relative(print, **args.input, processes=int(args.processes), verbose=verbose)
62
+ args = parser.parse_args()
63
+ args.input['full_step'] = True
64
+ args.input["in_line"] = dy_cl_line
65
+ del args.input['off_ln_dist']
66
+ del args.input['canopy_percentile']
67
+ verbose = True if args.verbose == 'True' else False
68
+ main_line_footprint_relative(print, **args.input, processes=int(args.processes), verbose=verbose)
69
+
70
+ print('%{}'.format(100))
71
+ print('Dynamic CC and Footprint processes finished')
72
+ print('Current time: {}'.format(time.strftime("%d %b %Y %H:%M:%S", time.localtime())))
73
+ print('Total processing time (seconds): {}'.format(round(time.time() - start_time, 3)))
@@ -0,0 +1,45 @@
1
+ """
2
+ Copyright (C) 2025 Applied Geospatial Research Group.
3
+
4
+ This script is licensed under the GNU General Public License v3.0.
5
+ See <https://gnu.org/licenses/gpl-3.0> for full license details.
6
+
7
+ Author: Richard Zeng
8
+
9
+ Description:
10
+ This script is part of the BERA Tools.
11
+ Webpage: https://github.com/appliedgrg/beratools
12
+
13
+ The purpose of this script is to provide main interface for line grouping tool.
14
+ """
15
+ import logging
16
+ import time
17
+
18
+ import geopandas as gpd
19
+
20
+ import beratools.tools.common as bt_common
21
+ from beratools.core.algo_line_grouping import LineGrouping
22
+ from beratools.core.logger import Logger
23
+
24
+
25
+ def line_grouping(
26
+ callback, in_line, out_line, processes, verbose, in_layer=None, out_layer=None
27
+ ):
28
+ print("line_grouping started")
29
+ in_line_gdf = gpd.read_file(in_line, layer=in_layer)
30
+ lg = LineGrouping(in_line_gdf)
31
+ lg.run_grouping()
32
+ lg.lines.to_file(out_line, layer=out_layer)
33
+
34
+ log = Logger("line_grouping", file_level=logging.INFO)
35
+ logger = log.get_logger()
36
+ print = log.print
37
+
38
+ if __name__ == "__main__":
39
+ in_args, in_verbose = bt_common.check_arguments()
40
+ start_time = time.time()
41
+ line_grouping(
42
+ print, **in_args.input, processes=int(in_args.processes), verbose=in_verbose
43
+ )
44
+
45
+ print("Elapsed time: {}".format(time.time() - start_time))