BERATools 0.2.0__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 (142) hide show
  1. beratools/__init__.py +9 -0
  2. beratools/core/__init__.py +0 -0
  3. beratools/core/algo_centerline.py +351 -0
  4. beratools/core/constants.py +86 -0
  5. beratools/core/dijkstra_algorithm.py +460 -0
  6. beratools/core/logger.py +85 -0
  7. beratools/core/tool_base.py +133 -0
  8. beratools/gui/__init__.py +15 -0
  9. beratools/gui/batch_processing_dlg.py +463 -0
  10. beratools/gui/beratools.json +2300 -0
  11. beratools/gui/bt_data.py +487 -0
  12. beratools/gui/bt_gui_main.py +691 -0
  13. beratools/gui/cli.py +18 -0
  14. beratools/gui/gui.json +8 -0
  15. beratools/gui/img/BERALogo.png +0 -0
  16. beratools/gui/img/closed.gif +0 -0
  17. beratools/gui/img/closed.png +0 -0
  18. beratools/gui/img/open.gif +0 -0
  19. beratools/gui/img/open.png +0 -0
  20. beratools/gui/img/tool.gif +0 -0
  21. beratools/gui/img/tool.png +0 -0
  22. beratools/gui/map_window.py +146 -0
  23. beratools/gui/tool_widgets.py +493 -0
  24. beratools/gui_tk/ASCII Banners.txt +248 -0
  25. beratools/gui_tk/__init__.py +20 -0
  26. beratools/gui_tk/beratools_main.py +515 -0
  27. beratools/gui_tk/bt_widgets.py +442 -0
  28. beratools/gui_tk/cli.py +18 -0
  29. beratools/gui_tk/gui.json +8 -0
  30. beratools/gui_tk/img/BERALogo.png +0 -0
  31. beratools/gui_tk/img/closed.gif +0 -0
  32. beratools/gui_tk/img/closed.png +0 -0
  33. beratools/gui_tk/img/open.gif +0 -0
  34. beratools/gui_tk/img/open.png +0 -0
  35. beratools/gui_tk/img/tool.gif +0 -0
  36. beratools/gui_tk/img/tool.png +0 -0
  37. beratools/gui_tk/main.py +14 -0
  38. beratools/gui_tk/map_window.py +144 -0
  39. beratools/gui_tk/runner.py +1481 -0
  40. beratools/gui_tk/tooltip.py +55 -0
  41. beratools/third_party/pyqtlet2/__init__.py +9 -0
  42. beratools/third_party/pyqtlet2/leaflet/__init__.py +26 -0
  43. beratools/third_party/pyqtlet2/leaflet/control/__init__.py +6 -0
  44. beratools/third_party/pyqtlet2/leaflet/control/control.py +59 -0
  45. beratools/third_party/pyqtlet2/leaflet/control/draw.py +52 -0
  46. beratools/third_party/pyqtlet2/leaflet/control/layers.py +20 -0
  47. beratools/third_party/pyqtlet2/leaflet/core/Parser.py +24 -0
  48. beratools/third_party/pyqtlet2/leaflet/core/__init__.py +2 -0
  49. beratools/third_party/pyqtlet2/leaflet/core/evented.py +180 -0
  50. beratools/third_party/pyqtlet2/leaflet/layer/__init__.py +5 -0
  51. beratools/third_party/pyqtlet2/leaflet/layer/featuregroup.py +34 -0
  52. beratools/third_party/pyqtlet2/leaflet/layer/icon/__init__.py +1 -0
  53. beratools/third_party/pyqtlet2/leaflet/layer/icon/icon.py +30 -0
  54. beratools/third_party/pyqtlet2/leaflet/layer/imageoverlay.py +18 -0
  55. beratools/third_party/pyqtlet2/leaflet/layer/layer.py +105 -0
  56. beratools/third_party/pyqtlet2/leaflet/layer/layergroup.py +45 -0
  57. beratools/third_party/pyqtlet2/leaflet/layer/marker/__init__.py +1 -0
  58. beratools/third_party/pyqtlet2/leaflet/layer/marker/marker.py +91 -0
  59. beratools/third_party/pyqtlet2/leaflet/layer/tile/__init__.py +2 -0
  60. beratools/third_party/pyqtlet2/leaflet/layer/tile/gridlayer.py +4 -0
  61. beratools/third_party/pyqtlet2/leaflet/layer/tile/tilelayer.py +16 -0
  62. beratools/third_party/pyqtlet2/leaflet/layer/vector/__init__.py +5 -0
  63. beratools/third_party/pyqtlet2/leaflet/layer/vector/circle.py +15 -0
  64. beratools/third_party/pyqtlet2/leaflet/layer/vector/circlemarker.py +18 -0
  65. beratools/third_party/pyqtlet2/leaflet/layer/vector/path.py +5 -0
  66. beratools/third_party/pyqtlet2/leaflet/layer/vector/polygon.py +14 -0
  67. beratools/third_party/pyqtlet2/leaflet/layer/vector/polyline.py +18 -0
  68. beratools/third_party/pyqtlet2/leaflet/layer/vector/rectangle.py +14 -0
  69. beratools/third_party/pyqtlet2/leaflet/map/__init__.py +1 -0
  70. beratools/third_party/pyqtlet2/leaflet/map/map.py +220 -0
  71. beratools/third_party/pyqtlet2/mapwidget.py +45 -0
  72. beratools/third_party/pyqtlet2/web/custom.js +43 -0
  73. beratools/third_party/pyqtlet2/web/map.html +23 -0
  74. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers-2x.png +0 -0
  75. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers.png +0 -0
  76. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon-2x.png +0 -0
  77. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon.png +0 -0
  78. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-shadow.png +0 -0
  79. beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.css +656 -0
  80. beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.js +6 -0
  81. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.codeclimate.yml +14 -0
  82. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.editorconfig +4 -0
  83. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.gitattributes +22 -0
  84. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.travis.yml +43 -0
  85. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/LICENSE +20 -0
  86. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers-2x.png +0 -0
  87. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers.png +0 -0
  88. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon-2x.png +0 -0
  89. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon.png +0 -0
  90. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-shadow.png +0 -0
  91. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet-2x.png +0 -0
  92. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.png +0 -0
  93. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.svg +156 -0
  94. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.css +10 -0
  95. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.js +10 -0
  96. beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/LICENSE +22 -0
  97. beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/leaflet.rotatedMarker.js +57 -0
  98. beratools/tools/Beratools_r_script.r +1120 -0
  99. beratools/tools/Ht_metrics.py +116 -0
  100. beratools/tools/__init__.py +7 -0
  101. beratools/tools/batch_processing.py +132 -0
  102. beratools/tools/canopy_threshold_relative.py +670 -0
  103. beratools/tools/canopycostraster.py +222 -0
  104. beratools/tools/centerline.py +176 -0
  105. beratools/tools/common.py +885 -0
  106. beratools/tools/fl_regen_csf.py +428 -0
  107. beratools/tools/forest_line_attributes.py +408 -0
  108. beratools/tools/forest_line_ecosite.py +216 -0
  109. beratools/tools/lapis_all.py +103 -0
  110. beratools/tools/least_cost_path_from_chm.py +152 -0
  111. beratools/tools/line_footprint_absolute.py +363 -0
  112. beratools/tools/line_footprint_fixed.py +282 -0
  113. beratools/tools/line_footprint_functions.py +720 -0
  114. beratools/tools/line_footprint_relative.py +64 -0
  115. beratools/tools/ln_relative_metrics.py +615 -0
  116. beratools/tools/r_cal_lpi_elai.r +25 -0
  117. beratools/tools/r_generate_pd_focalraster.r +101 -0
  118. beratools/tools/r_interface.py +80 -0
  119. beratools/tools/r_point_density.r +9 -0
  120. beratools/tools/rpy_chm2trees.py +86 -0
  121. beratools/tools/rpy_dsm_chm_by.py +81 -0
  122. beratools/tools/rpy_dtm_by.py +63 -0
  123. beratools/tools/rpy_find_cellsize.py +43 -0
  124. beratools/tools/rpy_gnd_csf.py +74 -0
  125. beratools/tools/rpy_hummock_hollow.py +85 -0
  126. beratools/tools/rpy_hummock_hollow_raster.py +71 -0
  127. beratools/tools/rpy_las_info.py +51 -0
  128. beratools/tools/rpy_laz2las.py +40 -0
  129. beratools/tools/rpy_lpi_elai_lascat.py +466 -0
  130. beratools/tools/rpy_normalized_lidar_by.py +56 -0
  131. beratools/tools/rpy_percent_above_dbh.py +80 -0
  132. beratools/tools/rpy_points2trees.py +88 -0
  133. beratools/tools/rpy_vegcoverage.py +94 -0
  134. beratools/tools/tiler.py +206 -0
  135. beratools/tools/tool_template.py +54 -0
  136. beratools/tools/vertex_optimization.py +620 -0
  137. beratools/tools/zonal_threshold.py +144 -0
  138. beratools-0.2.0.dist-info/METADATA +63 -0
  139. beratools-0.2.0.dist-info/RECORD +142 -0
  140. beratools-0.2.0.dist-info/WHEEL +4 -0
  141. beratools-0.2.0.dist-info/entry_points.txt +2 -0
  142. beratools-0.2.0.dist-info/licenses/LICENSE +22 -0
@@ -0,0 +1,144 @@
1
+ from multiprocessing.pool import Pool
2
+ import geopandas
3
+ import json
4
+ import argparse
5
+ import time
6
+ import pandas
7
+ import numpy
8
+ import shapely
9
+
10
+ from beratools.tools.common import *
11
+
12
+ corridor_th_field = 'CorridorTh'
13
+
14
+
15
+ class OperationCancelledException(Exception):
16
+ pass
17
+
18
+
19
+ def zonal_threshold(callback, in_line, in_canopy_raster, canopy_search_r, min_canopy_th, max_canopy_th,
20
+ out_line, processes, verbose):
21
+ line_seg = geopandas.GeoDataFrame.from_file(in_line)
22
+ # check coordinate systems between line and raster features
23
+ with rasterio.open(in_canopy_raster) as in_canopy:
24
+ if line_seg.crs.to_epsg() != in_canopy.crs.to_epsg():
25
+ print("Line and raster spatial references are not same, please check.")
26
+ exit()
27
+
28
+ del in_canopy
29
+
30
+ if not corridor_th_field in line_seg.columns.array:
31
+ print("Cannot find {} column in input data.\n '{}' column will be create".format(corridor_th_field,
32
+ corridor_th_field))
33
+ line_seg[corridor_th_field] = numpy.nan
34
+
35
+ # copy original line input to another Geodataframe
36
+ line_buffer = geopandas.GeoDataFrame.copy((line_seg))
37
+ # buffer the input lines
38
+ buffer = shapely.buffer(line_buffer['geometry'], float(canopy_search_r), cap_style=1, quad_segs=16)
39
+ # replace line geometry by polygon geometry
40
+ line_buffer['geometry'] = buffer
41
+ # create a New column for Zonal Mean
42
+ line_buffer['ZonMean'] = numpy.nan
43
+ print('%{}'.format(10))
44
+ print("Line preparing... ")
45
+ #
46
+ line_arg = []
47
+
48
+ for row in line_buffer.index:
49
+ list_items = [row] # 0
50
+ list_items.append(line_buffer.iloc[[row]]) # 1
51
+ # list_items.append(line_buffer) #1
52
+ list_items.append(in_canopy_raster) # 2
53
+ list_items.append(canopy_search_r) # 3
54
+ list_items.append(min_canopy_th) # 4
55
+ list_items.append(max_canopy_th) # 5
56
+ list_items.append(corridor_th_field) # 6
57
+
58
+ line_arg.append(list_items)
59
+ print('%{}'.format(60))
60
+ print("Calculating zonal statistic ...")
61
+ features = []
62
+ # for row in range(0,len(line_arg)):
63
+ # features.append(zonal_prepare(line_arg[row]))
64
+ features = execute_multiprocessing(line_arg)
65
+ print("Merging results ...")
66
+ results = geopandas.GeoDataFrame(pandas.concat(features))
67
+ results['geometry'] = line_seg['geometry']
68
+
69
+ print("Saving output ...")
70
+ print('%{}'.format(100))
71
+ # Debug save
72
+ geopandas.GeoDataFrame.to_file(results, out_line)
73
+ callback('Zonal Threshold tool done.')
74
+
75
+
76
+ # task executed in a worker process
77
+ def zonal_prepare(task_data):
78
+ # report a message
79
+ row_index = task_data[0]
80
+ df = task_data[1]
81
+ in_canopy_raster = task_data[2]
82
+ corridor_th_field = task_data[6]
83
+ MinValue = float(task_data[4])
84
+ MaxValue = float(task_data[5])
85
+
86
+ line_buffer = df['geometry']
87
+
88
+ with rasterio.open(in_canopy_raster) as in_canopy:
89
+ # clipped the chm base on polygon of line buffer or footprint
90
+ clipped_canopy, out_transform = rasterio.mask.mask(in_canopy, line_buffer, crop=True,
91
+ nodata=BT_NODATA, filled=True)
92
+ clipped_canopy = numpy.squeeze(clipped_canopy, axis=0)
93
+
94
+ # mask out all -9999 value cells
95
+ zonal_canopy = numpy.ma.masked_where(clipped_canopy == BT_NODATA, clipped_canopy)
96
+
97
+ # Calculate the zonal mean and threshold
98
+ zonal_mean = numpy.ma.mean(zonal_canopy)
99
+ threshold = MinValue + (zonal_mean * zonal_mean) * (MaxValue - MinValue)
100
+ # return the generated value
101
+ df.loc[df.index == row_index, 'ZonMean'] = zonal_mean
102
+ df.loc[df.index == row_index, corridor_th_field] = threshold
103
+
104
+ return df
105
+
106
+
107
+ # protect the entry point
108
+ def execute_multiprocessing(line_args):
109
+ # create and configure the process pool
110
+ # data = [[random() for n in range(100)] for i in range(300)]
111
+ try:
112
+ total_steps = len(line_args)
113
+ features = []
114
+ with Pool(processes=int(args.processes)) as pool:
115
+ step = 0
116
+ # execute tasks in order, process results out of order
117
+ for result in pool.imap_unordered(zonal_prepare, line_args):
118
+ if BT_DEBUGGING:
119
+ print('Got result: {}'.format(result), flush=True)
120
+ features.append(result)
121
+ step += 1
122
+ print('%{}'.format(step / total_steps * 100))
123
+ return features
124
+ except OperationCancelledException:
125
+ print("Operation cancelled")
126
+
127
+
128
+ if __name__ == '__main__':
129
+ start_time = time.time()
130
+ print('Starting zonal threshold calculation processing @ {}'.format(
131
+ time.strftime("%d %b %Y %H:%M:%S", time.localtime())))
132
+
133
+ parser = argparse.ArgumentParser()
134
+ parser.add_argument('-i', '--input', type=json.loads)
135
+ parser.add_argument('-p', '--processes')
136
+ parser.add_argument('-v', '--verbose')
137
+ args = parser.parse_args()
138
+
139
+ verbose = True if args.verbose == 'True' else False
140
+ zonal_threshold(print, **args.input, processes=int(args.processes), verbose=verbose)
141
+
142
+ print('%{}'.format(100))
143
+ print('Finishing zonal threshold calculation processing @ {} (or in {} second)'.format(
144
+ time.strftime("%d %b %Y %H:%M:%S", time.localtime()), round(time.time() - start_time, 5)))
@@ -0,0 +1,63 @@
1
+ Metadata-Version: 2.3
2
+ Name: BERATools
3
+ Version: 0.2.0
4
+ Summary: An advanced forest line feature analysis platform
5
+ Project-URL: Homepage, https://github.com/RichardQZeng/BTools
6
+ Author-email: AppliedGRG <appliedgrg@gmail.com>, Richard Zeng <richardqzeng@gmail.com>
7
+ License: MIT License
8
+
9
+ Copyright (c) 2023, AppliedGRG
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+
29
+ License-File: LICENSE
30
+ Keywords: BERA,Line
31
+ Classifier: Development Status :: 2 - Pre-Alpha
32
+ Classifier: Intended Audience :: Developers
33
+ Classifier: License :: OSI Approved :: MIT License
34
+ Classifier: Natural Language :: English
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3.9
37
+ Classifier: Programming Language :: Python :: 3.10
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Requires-Python: >=3.9
41
+ Requires-Dist: dask
42
+ Requires-Dist: distributed
43
+ Requires-Dist: geopandas
44
+ Requires-Dist: label-centerlines
45
+ Requires-Dist: pip
46
+ Requires-Dist: psutil
47
+ Requires-Dist: pyogrio>=0.9.0
48
+ Requires-Dist: pyqt5
49
+ Requires-Dist: rioxarray
50
+ Requires-Dist: rpy2
51
+ Requires-Dist: scikit-image>=0.24.0
52
+ Requires-Dist: xarray-spatial
53
+ Description-Content-Type: text/markdown
54
+
55
+ - HTML documentation is generated from .rst files with Sphinx
56
+
57
+ $ sphinx-build -b html ./sphinx/rst OutDir/sphinx/html
58
+ Or use the target doc in the cmake build system
59
+ $ make doc
60
+
61
+ Sphinx setup:
62
+ Please follow the http://sphinx-doc.org/latest/install.html guide.
63
+
@@ -0,0 +1,142 @@
1
+ beratools/__init__.py,sha256=Eai5NoQD_Llw8jD85r1qdEt2dxM6pFIOfwp9qoCynOA,254
2
+ beratools/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ beratools/core/algo_centerline.py,sha256=jOZRuQp8db1Nc6_WJ18VupFg1QiA0cZ7ndrm1sgmzYk,12452
4
+ beratools/core/constants.py,sha256=0lVdKcKFyBE2Ym-8EhgP6vjM9fvKKs4HNk9jOAvROeY,1877
5
+ beratools/core/dijkstra_algorithm.py,sha256=krIQTu9pjMJGpJR5ZyOsrfnZFQ8F1sU959cLF7rVTp8,15540
6
+ beratools/core/logger.py,sha256=FB4VqwyGRj07o7jMD27KELgFRl3cPt20ytKmak5lLJc,2811
7
+ beratools/core/tool_base.py,sha256=XL8feNupBXIG8WBNZsOMrXab5yVlusOepuJLIfegqNo,4407
8
+ beratools/gui/__init__.py,sha256=4OpdKTrS7OPMTmiJ3mvgvXaxxyHAWuni1Al1GwPgySw,235
9
+ beratools/gui/batch_processing_dlg.py,sha256=JbW7TMXWkXXgRUK_01IzcqzIXpc3k25Lu-fX7TDIXX0,18818
10
+ beratools/gui/beratools.json,sha256=sL2UB0X9qSZYxNadVWIcnpHeO0hjK3bXWlLoNOLoKBM,128858
11
+ beratools/gui/bt_data.py,sha256=y35W5ApjcGi_FSG24JihzSj7IxiMf1EZ1Lg09cHL5g4,17671
12
+ beratools/gui/bt_gui_main.py,sha256=pn3g4JF32IorbQwUIPJ7-BaQ8Ssb6z4xvdEGCtFEBVc,24524
13
+ beratools/gui/cli.py,sha256=0ILxYciDt9gH8cOKpeZb_2Bpwpr-YEWMIwyslndLhFU,440
14
+ beratools/gui/gui.json,sha256=y5WVe_dHSK5AJa3fzCbVY_FXlWuAharVeC3XtWglGRg,336
15
+ beratools/gui/map_window.py,sha256=5UIESx46dHDRs4TDyMdxhMuDU7ZRcpoKrCYw4s7iBNA,5515
16
+ beratools/gui/tool_widgets.py,sha256=OPeURzYQeVXUdVv8bsbAldHouxoOf9NfpqEb0E8lXBI,17656
17
+ beratools/gui/img/BERALogo.png,sha256=hnGLSL7Jv2ljDn6Z8ad5ekzH9k1PEuq7xe7Hh8bXZkE,6660
18
+ beratools/gui/img/closed.gif,sha256=T9BBGl286-FdSRYbWVt68HwPRF0geWoowtBzeYsk_bI,592
19
+ beratools/gui/img/closed.png,sha256=FRSAh3wzASowFUEt88zHhk1BQmwRbjoCs50Ff8KpJNQ,311
20
+ beratools/gui/img/open.gif,sha256=o8LL1OaDNkQ0Gcc9dO-1f1UZFAQ3ALc4svtqiUuWJPY,1062
21
+ beratools/gui/img/open.png,sha256=v0OOwfTNGMmtdFbffCbxdYLaNZeRC9Cy5whAwi71oVw,524
22
+ beratools/gui/img/tool.gif,sha256=2KGcUI_b-qFdrJJhgbx9pMZ8pExX7zH8nYvweRiQs6U,555
23
+ beratools/gui/img/tool.png,sha256=35Txwum2l_aKeazF_I97ZaZAKHsrKQCGG-LZxEIFyZw,714
24
+ beratools/gui_tk/ASCII Banners.txt,sha256=WjJFkz61AiZArYzwfgoHcZrkw1e5YuRqjhPtMtFRwa0,20601
25
+ beratools/gui_tk/__init__.py,sha256=Lo0Hyv-bggKsqRXmqg4b7u-UwnTcA81HmhL5ks3Ybe4,307
26
+ beratools/gui_tk/beratools_main.py,sha256=SyjWgFMqq4hMeniRyPXndufUw9hcjZjWsWm-eJ6Uecs,19206
27
+ beratools/gui_tk/bt_widgets.py,sha256=z_eKfojJhbRbK6XzkOu0AmBAkNapo7uFMpUkeSMUIf0,16120
28
+ beratools/gui_tk/cli.py,sha256=QUFBWoeAXJkXpRWlS1pegpj58LXS390a0qtwIKzAFzc,422
29
+ beratools/gui_tk/gui.json,sha256=kRD3Ozim9IotcY8P3fapgs4qqj5vebQHLxmss_SOJdY,329
30
+ beratools/gui_tk/main.py,sha256=z1szJ1CnQYVFSsVdKoUrH8XXemgxOWmNuV1X7Z0rk-U,339
31
+ beratools/gui_tk/map_window.py,sha256=SmPlCIif9uDoYZscelrQoT0e-lPShskzYBwcgbeMEB8,5366
32
+ beratools/gui_tk/runner.py,sha256=lPmn48D3rwsuTutgyjnTFV7ctsGAPgFUPV8bFaZPMWw,59938
33
+ beratools/gui_tk/tooltip.py,sha256=JK4cz28XTKZ2VoEw8ml1XkIOxpiNoTlzZjFs_imlnII,1848
34
+ beratools/gui_tk/img/BERALogo.png,sha256=hnGLSL7Jv2ljDn6Z8ad5ekzH9k1PEuq7xe7Hh8bXZkE,6660
35
+ beratools/gui_tk/img/closed.gif,sha256=T9BBGl286-FdSRYbWVt68HwPRF0geWoowtBzeYsk_bI,592
36
+ beratools/gui_tk/img/closed.png,sha256=FRSAh3wzASowFUEt88zHhk1BQmwRbjoCs50Ff8KpJNQ,311
37
+ beratools/gui_tk/img/open.gif,sha256=o8LL1OaDNkQ0Gcc9dO-1f1UZFAQ3ALc4svtqiUuWJPY,1062
38
+ beratools/gui_tk/img/open.png,sha256=v0OOwfTNGMmtdFbffCbxdYLaNZeRC9Cy5whAwi71oVw,524
39
+ beratools/gui_tk/img/tool.gif,sha256=2KGcUI_b-qFdrJJhgbx9pMZ8pExX7zH8nYvweRiQs6U,555
40
+ beratools/gui_tk/img/tool.png,sha256=35Txwum2l_aKeazF_I97ZaZAKHsrKQCGG-LZxEIFyZw,714
41
+ beratools/third_party/pyqtlet2/__init__.py,sha256=mR2LtPcjGdqw0KY7oEWl1PlRS4vqVvSZ9nohxEt-2wc,182
42
+ beratools/third_party/pyqtlet2/mapwidget.py,sha256=hvAZ9W8OsHDLgRIUnKi8oE9luYXrbNa9I_Iur9UcNzQ,1491
43
+ beratools/third_party/pyqtlet2/leaflet/__init__.py,sha256=GaYh-S2WOJFqDlTHh5RMO1TUjNx9j74RBsJUZVi-Yt0,718
44
+ beratools/third_party/pyqtlet2/leaflet/control/__init__.py,sha256=Yr10AF1hcztY7w7Y0FLKy1m_bpAiQMrwM7iyeMPJBVc,108
45
+ beratools/third_party/pyqtlet2/leaflet/control/control.py,sha256=8Q0ZBSktwvEHUoQ4JGr3qTh1O0baTHI6uDNpv2TOyjY,1399
46
+ beratools/third_party/pyqtlet2/leaflet/control/draw.py,sha256=LPtjenudPxtoZ1_1-thfR2w5bJT-KRS4JWGrzDu2djg,2134
47
+ beratools/third_party/pyqtlet2/leaflet/control/layers.py,sha256=NkzIXyboi3mCXkAZlXKdkPaSS5ZpvTr7uJp91vdWeJM,719
48
+ beratools/third_party/pyqtlet2/leaflet/core/Parser.py,sha256=1gQhzmK59Ybqloav59ejDFdQYXs-waxyrRmAOgNKFfo,812
49
+ beratools/third_party/pyqtlet2/leaflet/core/__init__.py,sha256=eKSQVBQLCdALnCskMw7nHySUfeJyBR-yXJjTSgvLdWc,32
50
+ beratools/third_party/pyqtlet2/leaflet/core/evented.py,sha256=x5dl1U2iQi2k1IM1HhENjUvSmgCzWKnynpcof_RnqK0,7849
51
+ beratools/third_party/pyqtlet2/leaflet/layer/__init__.py,sha256=iYW7QlvEditZNq23OzsmFO0zphwHRy48_aImus7qLVk,144
52
+ beratools/third_party/pyqtlet2/leaflet/layer/featuregroup.py,sha256=i3zwD3IL_8HRqVTX92UYQPK6YPscNI_zfkKdQYwGAU0,1574
53
+ beratools/third_party/pyqtlet2/leaflet/layer/imageoverlay.py,sha256=l9ojVPZZRzzQLfL7x1BHfsnrNO6CJeg8vnFqWGcwrrk,646
54
+ beratools/third_party/pyqtlet2/leaflet/layer/layer.py,sha256=2VV1d_-aFys-i_mDGRh8imRhWzHNMk3GIlHXCG6XSaA,3096
55
+ beratools/third_party/pyqtlet2/leaflet/layer/layergroup.py,sha256=YtKC1O7i5ahOXHD1TJnZYz07Gek6g7oa_r7CXURVELY,1516
56
+ beratools/third_party/pyqtlet2/leaflet/layer/icon/__init__.py,sha256=03LMcvUW7iid7k6hOEPXv-gNGLToG_jfPUao0lPkxeI,24
57
+ beratools/third_party/pyqtlet2/leaflet/layer/icon/icon.py,sha256=cgHveP7oviPRyZv2XwfK2EQF3yLyzIupb5wrEsjiPqE,1112
58
+ beratools/third_party/pyqtlet2/leaflet/layer/marker/__init__.py,sha256=zTuAEWkPqKkqUeuPiT288tnkniBfBjKJxy0TesAkVYk,28
59
+ beratools/third_party/pyqtlet2/leaflet/layer/marker/marker.py,sha256=8ij9p0oguTW2AGR0njSLr4bCNsfirYcOoX7s4YBYL6I,3603
60
+ beratools/third_party/pyqtlet2/leaflet/layer/tile/__init__.py,sha256=v5tHQOCNYd3i5YO_kxWYjAYvSCPher1VRw-8pdPqqEs,68
61
+ beratools/third_party/pyqtlet2/leaflet/layer/tile/gridlayer.py,sha256=sApbbdvr0TaWsGzPHqrg2p4jYBrpLQ4Et5vunTWDEEo,59
62
+ beratools/third_party/pyqtlet2/leaflet/layer/tile/tilelayer.py,sha256=zf1_dWtSsVyVQObyHZywIpsXzVPuId2IspMxcNnmIvM,591
63
+ beratools/third_party/pyqtlet2/leaflet/layer/vector/__init__.py,sha256=QNV7dn3uA9ESystGi82QeWMpzuyZr4Ih6Hk5ROZ4fV0,164
64
+ beratools/third_party/pyqtlet2/leaflet/layer/vector/circle.py,sha256=pwitI8CxuviM5U07zXYMpT6bl6mZp_3KJMI6ZlvZEbg,553
65
+ beratools/third_party/pyqtlet2/leaflet/layer/vector/circlemarker.py,sha256=xSJ61n4YsDe5-dUPRs4uYtFW0AI2lRYtxF7iRS9tMZg,557
66
+ beratools/third_party/pyqtlet2/leaflet/layer/vector/path.py,sha256=1NQhilews59597RueOk1sIa9TRJZAny8nCIPGAPTJEc,61
67
+ beratools/third_party/pyqtlet2/leaflet/layer/vector/polygon.py,sha256=V1ZFhJ7fsStJWM3qld1NnR_dhvxdghXSrhAfd4vQmfA,466
68
+ beratools/third_party/pyqtlet2/leaflet/layer/vector/polyline.py,sha256=9pMhYD-kRiEUXxy67BtjQMjhvgK1UivY9I7newyIn9U,555
69
+ beratools/third_party/pyqtlet2/leaflet/layer/vector/rectangle.py,sha256=Owmvh87CXHLiHlBN6SCgDskQAC1aEQCy2bk6dMha--s,467
70
+ beratools/third_party/pyqtlet2/leaflet/map/__init__.py,sha256=jIbj-ae5jBYBq9vpyTVDOkXxkZvmOSEQQX3FGpHmGl4,22
71
+ beratools/third_party/pyqtlet2/leaflet/map/map.py,sha256=OtxbT9U3WMtdeUJK8kPA_Wl-5sVK56pbrPY2Q_DOsE0,7230
72
+ beratools/third_party/pyqtlet2/web/custom.js,sha256=vBwzclmI2x8XxyVWlBXoIhaSIyjw5kSTUt9uQKN0NbE,1457
73
+ beratools/third_party/pyqtlet2/web/map.html,sha256=nPHkM6wfziCLPR7xcmAUK6Xw_djWAWHXRFOIWNDqRZE,929
74
+ beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.css,sha256=kLaT2GOSpHechhsozzB-flnD-zUyjE2LlfWPgU04xyI,14657
75
+ beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.js,sha256=3kGmSkWR0G-_9osA8KbBi4Bi1Y4ihdgE7m4r1hBkpwI,146720
76
+ beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers-2x.png,sha256=Bm2sqFDY_77wB68AsG6sABVyje4nnFHzy2xxbffELt8,1259
77
+ beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers.png,sha256=Hbvp0CjikvNvy6j4s6KNXokydU_CIVuaxp5M3s9RB8Y,696
78
+ beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon-2x.png,sha256=ABecTB7oMNOhCEEq4NKU9Vd2z-sIXGASmjmqb8SuJSg,2464
79
+ beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon.png,sha256=V0w6XMqF9BFAhbaEFZbWLwDXyJLHsD8oy_owHesdxDc,1466
80
+ beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-shadow.png,sha256=Jk9cZAM58ELdcpBiz8BMF_jqDymIK1OOOEjtjxDttNo,618
81
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.codeclimate.yml,sha256=RLo1MRpx_xRa_qAdakq_GSUlgqZqksMr5YW8WSH_a2o,193
82
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.editorconfig,sha256=GnD8aKGdgevmGUcqysH30yyFzS6h7DVkOQFaHop_Cpc,71
83
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.gitattributes,sha256=EsqBtDVEqtEZmZiiJuAyqf_SeoJ0N_uz6e218vciO8w,505
84
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.travis.yml,sha256=_25qE0x7ZUeb1iDLGu4a1b4DPnvIJx6aTHLFNOmrXOQ,610
85
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/LICENSE,sha256=OqYNSsNUnU4ng7y2ymgo6As60DThMoproemTE-Ck8RA,1087
86
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.css,sha256=RHpHxm5Pfl9EEY1k8sbjmH8jz3Fo2_OA2yn_VUVct68,5276
87
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.js,sha256=3vOnsazrCJNRAuvJn2RLMkCu4YDWOQmm7oqLCddOlWE,67551
88
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers-2x.png,sha256=Bm2sqFDY_77wB68AsG6sABVyje4nnFHzy2xxbffELt8,1259
89
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers.png,sha256=Hbvp0CjikvNvy6j4s6KNXokydU_CIVuaxp5M3s9RB8Y,696
90
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon-2x.png,sha256=LXei5MLwi7rEGAgyTvlGuaL-YbYVBIDQEbcrN5w7I40,2586
91
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon.png,sha256=V0w6XMqF9BFAhbaEFZbWLwDXyJLHsD8oy_owHesdxDc,1466
92
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-shadow.png,sha256=Jk9cZAM58ELdcpBiz8BMF_jqDymIK1OOOEjtjxDttNo,618
93
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet-2x.png,sha256=-iyV4GEPN4fIeWReQrhq0BDDBfgxLhFoQXMNANSrcrc,3581
94
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.png,sha256=qJeKHT0h2O5vFszjQv9n_EfEJB9SFh8FuviPFeEFgZk,1906
95
+ beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.svg,sha256=syHuBl86Q0UK6EultBTqfvpXPT-tU220nTP6fNW-9ro,5707
96
+ beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/LICENSE,sha256=2lrm0tOM87tDunjtxsCQsNdqB13mY8GMiNJte3Fbk3k,1106
97
+ beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/leaflet.rotatedMarker.js,sha256=rB8Qd1EdZGUIrGfuoY_SaCnf-hWpTjkaWHunKPRg9kU,2088
98
+ beratools/tools/Beratools_r_script.r,sha256=5GXWwrezSNwPMDkf720yHjn3fQoWS9OZRv8xtCGtLXw,43622
99
+ beratools/tools/Ht_metrics.py,sha256=t_qWEEeNbO9S59eAloJQ4-Qv_sMhNLcWAYsNp_bHHkY,4185
100
+ beratools/tools/__init__.py,sha256=ia265AucXSQS5yFy5jz4q3wQYPUCLrdsAvTOhgn0QyU,130
101
+ beratools/tools/batch_processing.py,sha256=tYQrQ0NBXGOXaZZGYJU6PVbBcYIXQzmDhBeza7wR3a8,5009
102
+ beratools/tools/canopy_threshold_relative.py,sha256=cD_MuimoTLlvpoRLy3XaLNFwMUMoiqfdXgmiLQtCXOk,29715
103
+ beratools/tools/canopycostraster.py,sha256=wKCNc-a_1ND6vbFMdMAWRWBv4a3kyGZ9yrDntG852Ds,8301
104
+ beratools/tools/centerline.py,sha256=MAnT4GEU7CUi48bEbQPU-2UMOXsb2b1A2nlrN1FhONc,6391
105
+ beratools/tools/common.py,sha256=nDwybFMTxmGiTN-CXZrGceuWLQDYWGBX551jUQnmDC4,29799
106
+ beratools/tools/fl_regen_csf.py,sha256=Hi7I8EjzxDRYlDeVW-1MrHJtKd2evo8g64r7zWOdCLk,16490
107
+ beratools/tools/forest_line_attributes.py,sha256=FlJ2n8qUE4KpBq37Po7w53YvcMNZaMinZbMs20ZBBpA,14966
108
+ beratools/tools/forest_line_ecosite.py,sha256=kshmeTbfn6sIJIze1SFD2TgKR7Da-m16zdymFDztW4k,7439
109
+ beratools/tools/lapis_all.py,sha256=B7QG7Dw7ylbLKUCRGH1LI3VVZxPv8tpkCGedWHpgRBQ,3220
110
+ beratools/tools/least_cost_path_from_chm.py,sha256=nIPMp7Mf4g4WvT8x17xPcdrBDIBIVPJjCrf9wOFcZkc,5892
111
+ beratools/tools/line_footprint_absolute.py,sha256=RtA_t2G8eErzpPVRCVjItUGzegOJG0TbFk6qbB21Twg,13830
112
+ beratools/tools/line_footprint_fixed.py,sha256=9AsHvYIjpaAz0iq6gWhQQC6X9vf79qp0G7wHBsSt0Ag,9584
113
+ beratools/tools/line_footprint_functions.py,sha256=MJ3yMtA6hHhpLaYBz9Q-Y3stGeDahrYJHr-nPjSRuQk,30905
114
+ beratools/tools/line_footprint_relative.py,sha256=7tqXKP5gWSpqScuPnFHBl36_1-0UbMr58Obcyq0AL1A,2998
115
+ beratools/tools/ln_relative_metrics.py,sha256=eJOBJp37KH2IOhm291-s_yPFP5PKTlWYAw_azKdKvK8,25489
116
+ beratools/tools/r_cal_lpi_elai.r,sha256=7Htnuqcz88nEIH9xBaMjvEAjZCSoebLk9t05iqs28fs,700
117
+ beratools/tools/r_generate_pd_focalraster.r,sha256=LSRnc5gUUcjZnURYt3MnXScUtjMwO8D7FFNaRJ04wbc,3691
118
+ beratools/tools/r_interface.py,sha256=4XNmkPa49F-4QIk_aoOhkXDRwsMpSg_IV6dcOiNIDlk,2552
119
+ beratools/tools/r_point_density.r,sha256=QmeBb6kS1AU7-GvlmSgeFWoNsRTWipxzHPMXQ_hDdQU,214
120
+ beratools/tools/rpy_chm2trees.py,sha256=g8D2EDqpFojiByUI4lUFy3Y9skNoWLCu9zmOWbPJdIc,3150
121
+ beratools/tools/rpy_dsm_chm_by.py,sha256=PvtLqEGUXqVcY-5ZXE3b9UEyWW-7pYJvARmteIglvBk,2900
122
+ beratools/tools/rpy_dtm_by.py,sha256=zw-SKUOu3rpaL8-7Q8p4tNNYz-xPjI7JefUzTGUNSqA,2355
123
+ beratools/tools/rpy_find_cellsize.py,sha256=M15a25c3UmRqwe65FLGBt22yw9Ov82rVjapw_KyQJvk,1577
124
+ beratools/tools/rpy_gnd_csf.py,sha256=Nwhp-_7_scAJLz4__IfSL4KsER8rSHk_OM_BMmRJDNw,2905
125
+ beratools/tools/rpy_hummock_hollow.py,sha256=jqP_bN4KkIUmRBGR5VTXMopeLn_CPGQWxHjFOccXIXY,3111
126
+ beratools/tools/rpy_hummock_hollow_raster.py,sha256=OI-6_aZpF-VOuAWP9at51HD8Zlq1gu9mKhGtB-Rf4Jk,2718
127
+ beratools/tools/rpy_las_info.py,sha256=Yi-y0AubrXls782csr9wTq_fHoy0q2JFZ722AaLQ6Rc,1782
128
+ beratools/tools/rpy_laz2las.py,sha256=ZEC6l9dkxC2YJATmSlXDR-UvAuemCtzFPufKfbG3syA,1432
129
+ beratools/tools/rpy_lpi_elai_lascat.py,sha256=6129Wj6juGxsSGBWMiZwxCcioOKujBpZD0GPiC-J0cQ,19671
130
+ beratools/tools/rpy_normalized_lidar_by.py,sha256=8n3NCc6hPKCsNsKhFPBg0Gt2OZ6K80z4l36JKYzZLGM,2136
131
+ beratools/tools/rpy_percent_above_dbh.py,sha256=4qRtTRXJwdpx-KVgKIMfqZC8J10XRQd6DIxtDPP-klM,2934
132
+ beratools/tools/rpy_points2trees.py,sha256=aslQntancn3Gc_T3DdubdgZi64Xm9c3Cxrw5A5rMYGw,3434
133
+ beratools/tools/rpy_vegcoverage.py,sha256=iR2a5J8E0Tdh9GYvetxep2m39JOlZ-vMPCGhkyY_rqI,3402
134
+ beratools/tools/tiler.py,sha256=0mSO8BF7-70mhIN1-jDJOhnC06ueDls-L6VMPI30ws4,7619
135
+ beratools/tools/tool_template.py,sha256=Gh3gfRs8CbqSpvWfUxQqyizLR1WR2qDkuP5mGmS4QcA,1579
136
+ beratools/tools/vertex_optimization.py,sha256=0Ypbq3EzNeCRQ69_TainmkcMxwB0nhQ-rPbe8gIQ9vM,21673
137
+ beratools/tools/zonal_threshold.py,sha256=AYwoBEXAzEs4uN5R9t1RhibFoyZz17o2bretqNrrN94,5505
138
+ beratools-0.2.0.dist-info/METADATA,sha256=HwGFxCxK11Q8rz9Op8qcC1kEKL2SF065bUrG0vQoONQ,2615
139
+ beratools-0.2.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
140
+ beratools-0.2.0.dist-info/entry_points.txt,sha256=ph47-gzMqhlWmHogQd9HTl4l8dWQUV8FhSOL2FaRrIM,53
141
+ beratools-0.2.0.dist-info/licenses/LICENSE,sha256=iWkddJP7OUHpdZhXc5iaHbDrctVGVDWCqhFSmVD3iNY,1091
142
+ beratools-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.25.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ BERATools = beratools.gui:gui_main
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023, AppliedGRG
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+