BERATools 0.2.0__py3-none-any.whl → 0.2.1__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.1.dist-info/METADATA +109 -0
  62. beratools-0.2.1.dist-info/RECORD +74 -0
  63. {beratools-0.2.0.dist-info → beratools-0.2.1.dist-info}/WHEEL +1 -1
  64. {beratools-0.2.0.dist-info → beratools-0.2.1.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.1.dist-info}/entry_points.txt +0 -0
@@ -1,103 +0,0 @@
1
-
2
- from random import random
3
- import time
4
- from multiprocessing.pool import Pool
5
- from numpy import mean
6
- from beratools.tools.common import *
7
- import json
8
-
9
-
10
- class OperationCancelledException(Exception):
11
- pass
12
-
13
-
14
- def lapis_all(args, callback=print, processes=None, verbose=None):
15
- lapis_path = '../third_party/Lapis_0_8/Lapis.exe'
16
- lapis_path = Path(__file__).parent.joinpath(lapis_path).resolve()
17
- ini_file = Path(__file__).parents[2].joinpath(r'.\.data\lapis.ini').resolve().as_posix()
18
-
19
- arg_parsed = json.loads(args)
20
- in_dtm = arg_parsed['in_dtm']
21
- in_las = arg_parsed['in_las']
22
- out_dir = arg_parsed['out_dir']
23
-
24
- f = open(ini_file, 'w')
25
- f.write('#Data options\n')
26
- f.write('dem=' + in_dtm + '\n')
27
- f.write('dem-units = unspecified' + '\n')
28
- f.write('dem-algo = raster' + '\n')
29
- f.write('las=' + in_las + '\n')
30
- f.write('las-units=unspecified' + '\n')
31
- f.write('output=' + out_dir + '\n')
32
-
33
- f.write('\n # Computer-specific options\n')
34
- f.write('thread=50' + '\n')
35
- f.write('bench=' + '\n')
36
-
37
- f.write('\n # Processing options\n')
38
- f.write('xres=0.15' + '\n')
39
- f.write('yres=0.15' + '\n')
40
- f.write('xorigin=0' + '\n')
41
- f.write('yorigin=0' + '\n')
42
- f.write('csm-cellsize=0.15' + '\n')
43
- f.write('footprint=0.1' + '\n')
44
- f.write('smooth=1' + '\n')
45
- f.write('minht=-8' + '\n')
46
- f.write('maxht=100' + '\n')
47
- f.write('class=~7, 9, 18' + '\n')
48
- f.write('max-scan-angle=32' + '\n')
49
- f.write('user-units=meters' + '\n')
50
- f.write('canopy=3' + '\n')
51
- f.write('strata=0.5, 1, 2, 4, 8, 16, 32, 48, 64,' + '\n')
52
- f.write('min-tao-dist=1' + '\n')
53
- f.write('id-algo=highpoint' + '\n')
54
- f.write('seg-algo=watershed' + '\n')
55
- f.write('topo-scale=500, 1000, 2000,' + '\n')
56
- f.write('fine-int=' + '\n')
57
-
58
- args = lapis_path.as_posix() + ' --ini-file' + ' ' + ini_file
59
-
60
- callback('Lapis parameters returned.')
61
- return args
62
-
63
-
64
- # task executed in a worker process
65
- def worker(task_data):
66
- # report a message
67
- value = mean(task_data)
68
- print(f'Task {len(task_data)} with {value} executed', flush=True)
69
-
70
- # block for a moment
71
- time.sleep(value * 10)
72
-
73
- # return the generated value
74
- return value
75
-
76
-
77
- # protect the entry point
78
- def execute_multiprocessing():
79
- # create and configure the process pool
80
- data = [[random() for n in range(100)] for i in range(300)]
81
- try:
82
- total_steps = 300
83
- with Pool() as pool:
84
- step = 0
85
- # execute tasks in order, process results out of order
86
- for result in pool.imap_unordered(worker, data):
87
- print(f'Got result: {result}', flush=True)
88
- step += 1
89
- print(step)
90
- print('%{}'.format(step/total_steps*100))
91
-
92
- except OperationCancelledException:
93
- print("Operation cancelled")
94
-
95
-
96
- if __name__ == '__main__':
97
- # in_args, in_verbose = check_arguments()
98
- # start_time = time.time()
99
- # lapis_all(print, **in_args.input, processes=int(in_args.processes), verbose=in_verbose)
100
- #
101
- # print('Elapsed time: {}'.format(time.time() - start_time))
102
-
103
- pass
@@ -1,152 +0,0 @@
1
- import time
2
- from xrspatial import convolution
3
-
4
- from beratools.tools.common import *
5
- from beratools.core.algo_centerline import *
6
-
7
-
8
- def LCP_centerline(callback, in_line, in_chm, line_radius,
9
- proc_segments, out_line, processes, verbose):
10
- if not compare_crs(vector_crs(in_line), raster_crs(in_chm)):
11
- print("Line and CHM have different spatial references, please check.")
12
- return
13
-
14
- # Read input line features
15
- layer_crs = None
16
- schema = None
17
- input_lines = []
18
-
19
- df, found = chk_df_multipart(gpd.GeoDataFrame.from_file(in_line), 'MultiLineString')
20
- if found:
21
- df.to_file(in_line)
22
- else:
23
- del df, found
24
-
25
- with fiona.open(in_line) as open_line_file:
26
- layer_crs = open_line_file.crs
27
- schema = open_line_file.meta['schema']
28
- for line in open_line_file:
29
- if line.geometry:
30
- if line.geometry['type'] != 'MultiLineString':
31
- input_lines.append([line.geometry, line.properties])
32
- else:
33
- print('MultiLineString found.')
34
- geoms = shape(line['geometry']).geoms
35
- for item in geoms:
36
- line_part = fiona.Geometry.from_dict(item)
37
- if line_part:
38
- input_lines.append([line_part, line.properties])
39
- else:
40
- print(f'Line {line.id} has empty geometry.')
41
-
42
- if proc_segments:
43
- # split line segments at vertices
44
- input_lines_temp = []
45
- for line in input_lines:
46
- line_seg = line[0]
47
- line_prop = line[1]
48
- line_segs = segments(line_seg.coordinates)
49
- line_feats = [(line, line_prop) for line in line_segs]
50
- if line_segs:
51
- input_lines_temp.extend(line_feats)
52
-
53
- input_lines = input_lines_temp
54
-
55
- # Process lines
56
- all_lines = []
57
- i = 0
58
- for line in input_lines:
59
- all_lines.append((line, line_radius, in_chm, i))
60
- i += 1
61
-
62
- print('{} lines to be processed.'.format(len(all_lines)))
63
-
64
- feat_geoms = []
65
- feat_props = []
66
- center_line_geoms = []
67
- corridor_poly_list = []
68
- result = execute_multiprocessing(process_single_line, all_lines, 'Centerline',
69
- processes, 1, verbose=verbose)
70
-
71
- for item in result:
72
- geom = item[0]
73
- prop = item[1]
74
- center_line = item[2]
75
- corridor_poly = item[3]
76
-
77
- if geom and prop:
78
- feat_geoms.append(geom)
79
- feat_props.append(prop)
80
- center_line_geoms.append(center_line)
81
- corridor_poly_list.append(corridor_poly)
82
-
83
- out_least_cost_path = Path(out_line)
84
- out_least_cost_path = out_least_cost_path.with_stem(out_least_cost_path.stem + '_least_cost_path')
85
- schema['properties']['status'] = 'int'
86
-
87
- save_features_to_shapefile(out_least_cost_path.as_posix(), layer_crs, feat_geoms, feat_props, schema)
88
-
89
-
90
- def process_single_line(line_args):
91
- line = line_args[0][0]
92
- prop = line_args[0][1]
93
- line_radius = line_args[1]
94
- in_chm_raster = line_args[2]
95
- line_id = line_args[3]
96
- seed_line = shape(line) # LineString
97
- line_radius = float(line_radius)
98
-
99
- chm_clip, out_meta = clip_raster(in_chm_raster, seed_line, line_radius)
100
- in_chm = np.squeeze(chm_clip, axis=0)
101
- cell_x, cell_y = out_meta['transform'][0], -out_meta['transform'][4]
102
- kernel = convolution.circle_kernel(cell_x, cell_y, 2.5)
103
- dyn_canopy_ndarray = dyn_np_cc_map(in_chm, FP_CORRIDOR_THRESHOLD, BT_NODATA)
104
- cc_std, cc_mean = dyn_fs_raster_stdmean(dyn_canopy_ndarray, kernel, BT_NODATA)
105
- cc_smooth = dyn_smooth_cost(dyn_canopy_ndarray, 2.5, [cell_x, cell_y])
106
- avoidance = max(min(float(0.4), 1), 0)
107
- cost_clip = dyn_np_cost_raster(dyn_canopy_ndarray, cc_mean, cc_std,
108
- cc_smooth, 0.4, 1.5)
109
-
110
- # if CL_USE_SKIMAGE_GRAPH:
111
- # skimage shortest path (Cost Array elements with infinite or negative costs will simply be ignored.)
112
- negative_cost_clip = np.where(np.isnan(cost_clip), -9999, cost_clip)
113
- lc_path = LCP_skimage_mcp_connect(negative_cost_clip, out_meta, seed_line)
114
-
115
- if lc_path:
116
- lc_path_coords = lc_path.coords
117
- else:
118
- lc_path_coords = []
119
-
120
- # search for centerline
121
- if len(lc_path_coords) < 2:
122
- print('No least cost path detected, use input line.')
123
- prop['status'] = CenterlineStatus.FAILED.value
124
- return seed_line, prop, seed_line, None
125
-
126
- # get corridor raster
127
- out_transform = out_meta['transform']
128
- transformer = rasterio.transform.AffineTransformer(out_transform)
129
- cell_size = (out_transform[0], -out_transform[4])
130
-
131
- x1, y1 = lc_path_coords[0]
132
- x2, y2 = lc_path_coords[-1]
133
- source = [transformer.rowcol(x1, y1)]
134
- destination = [transformer.rowcol(x2, y2)]
135
- corridor_thresh_cl = corridor_raster(negative_cost_clip, out_meta, source, destination,
136
- cell_size, FP_CORRIDOR_THRESHOLD)
137
-
138
- # find contiguous corridor polygon and extract centerline
139
- df = gpd.GeoDataFrame(geometry=[seed_line], crs=out_meta['crs'])
140
- corridor_poly_gpd = find_corridor_polygon(corridor_thresh_cl, out_transform, df)
141
- center_line, status = find_centerline(corridor_poly_gpd.geometry.iloc[0], lc_path)
142
- prop['status'] = status.value
143
-
144
- print(" Searching centerline: line {} ".format(line_id), flush=True)
145
- return lc_path, prop, center_line, corridor_poly_gpd
146
-
147
-
148
- if __name__ == '__main__':
149
- in_args, in_verbose = check_arguments()
150
- start_time = time.time()
151
- LCP_centerline(print, **in_args.input, processes=int(in_args.processes), verbose=in_verbose)
152
- print('Elapsed time: {}'.format(time.time() - start_time))
@@ -1,63 +0,0 @@
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
-
@@ -1,142 +0,0 @@
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,,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes