1::
2:: an example batch script for pre-processing mobile LiDAR trajetories
3:: into an adaptive tiling pre-classified based on trajectory data and
4:: using a pre-thinning step for the ground classification
5::
6
7echo off
8
9set PATH=%PATH%;C:\LAStools\bin;
10
11:: here we specify the input folder
12
13set WORK_DIRECTORY=inspectation
14
15:: here we set the base name of the produced tiles
16
17set TILE_BASE_NAME=oosteinde
18
19:: number of cores to run on
20
21set NUM_CORES=4
22
23:: convert trajectory file from GPS-week time to Adjusted Standard GPS time
24
25las2las -i %WORK_DIRECTORY%\Trajectory.txt ^
26        -iparse txyz -week_to_adjusted 1957 ^
27        -o %WORK_DIRECTORY%\trajectory.laz
28
29:: manually set missing file source IDs in original files (last digit specifies scanner channel)
30
31lasinfo -i "%WORK_DIRECTORY%\strips_raw\Boom - Scanner 1 - 170713_073558_Scanner_1 - originalpoints.laz" ^
32        -nc ^
33        -set_file_source_ID 11
34
35lasinfo -i "%WORK_DIRECTORY%\strips_raw\Boom - Scanner 2 - 170713_073558_Scanner_2 - originalpoints.laz" ^
36        -nc ^
37        -set_file_source_ID 12
38
39lasinfo -i "%WORK_DIRECTORY%\strips_raw\Boom - Scanner 1 - 170713_073738_Scanner_1 - originalpoints.laz" ^
40        -nc ^
41        -set_file_source_ID 21
42
43lasinfo -i "%WORK_DIRECTORY%\strips_raw\Boom - Scanner 2 - 170713_073738_Scanner_2 - originalpoints.laz" ^
44        -nc ^
45        -set_file_source_ID 22
46
47lasinfo -i "%WORK_DIRECTORY%\strips_raw\Boom - Scanner 1 - 170713_073943_Scanner_1 - originalpoints.laz" ^
48        -nc ^
49        -set_file_source_ID 31
50
51lasinfo -i "%WORK_DIRECTORY%\strips_raw\Boom - Scanner 2 - 170713_073943_Scanner_2 - originalpoints.laz" ^
52        -nc ^
53        -set_file_source_ID 32
54
55:: rescale, reoffset, fix projection
56
57rmdir %WORK_DIRECTORY%\strips_fixed /s /q
58mkdir %WORK_DIRECTORY%\strips_fixed
59las2las -i %WORK_DIRECTORY%\strips_raw\*.laz ^
60        -rescale 0.01 0.01 0.01 ^
61        -auto_reoffset ^
62        -epsg 28992 -set_ogc_wkt ^
63        -odir %WORK_DIRECTORY%\strips_fixed -olaz ^
64        -cores %NUM_CORES%
65
66:: create adaptive tiling (create initial 128 by 128 meter tiles)
67
68rmdir %WORK_DIRECTORY%\tiles_buffered /s /q
69mkdir %WORK_DIRECTORY%\tiles_buffered
70lastile -i %WORK_DIRECTORY%\strips_fixed\*.laz ^
71        -apply_file_source_ID ^
72        -tile_size 128 ^
73        -buffer 1 -flag_as_withheld ^
74        -refine_tiling 15000000 ^
75        -odir %WORK_DIRECTORY%\tiles_buffered -o %TILE_BASE_NAME%.laz
76
77:: refine adaptive tiling (refine too large 128 by 128 meter into 64 by 64 tiles)
78
79lastile -i %WORK_DIRECTORY%\tiles_buffered\%TILE_BASE_NAME%*_128.laz ^
80        -refine_tiles 15000000 ^
81        -flag_as_withheld ^
82        -olaz ^
83        -cores %NUM_CORES%
84
85:: refine adaptive tiling (refine too large 64 by 64 meter into 32 by 32 tiles)
86
87lastile -i %WORK_DIRECTORY%\tiles_buffered\%TILE_BASE_NAME%*_64.laz ^
88        -refine_tiles 15000000 ^
89        -flag_as_withheld ^
90        -olaz ^
91        -cores %NUM_CORES%
92
93:: refine adaptive tiling (refine too large 32 by 32 meter into 16 by 16 tiles)
94
95lastile -i %WORK_DIRECTORY%\tiles_buffered\%TILE_BASE_NAME%*_32.laz ^
96        -refine_tiles 15000000 ^
97        -flag_as_withheld ^
98        -olaz ^
99        -cores %NUM_CORES%
100
101:: refine adaptive tiling (refine too large 16 by 16 meter into 8 by 8 tiles)
102
103lastile -i %WORK_DIRECTORY%\tiles_buffered\%TILE_BASE_NAME%*_16.laz ^
104        -refine_tiles 15000000 ^
105        -flag_as_withheld ^
106        -olaz ^
107        -cores %NUM_CORES%
108
109:: pre-classification based on height above trajectory
110
111rmdir %WORK_DIRECTORY%\tiles_trajectory_coded /s /q
112mkdir %WORK_DIRECTORY%\tiles_trajectory_coded
113lastrack -i %WORK_DIRECTORY%\tiles_buffered\%TILE_BASE_NAME%*.laz ^
114         -track %WORK_DIRECTORY%\trajectory.laz ^
115         -offset -2 ^
116         -classify_below -0.3 7 ^
117         -classify_between -0.3 0.3 8 ^
118         -classify_between 0.3 1.3 3 ^
119         -classify_between 1.3 2 9 ^
120         -classify_between 2 50 5 ^
121         -classify_above 50 7 ^
122         -odir %WORK_DIRECTORY%\tiles_trajectory_coded -olaz ^
123         -cores %NUM_CORES%
124
125:: mark most central point from class 8 per 2 by 2 cm cell as class 20
126
127rmdir %WORK_DIRECTORY%\tiles_thinned_preground /s /q
128mkdir %WORK_DIRECTORY%\tiles_thinned_preground
129lasthin -i %WORK_DIRECTORY%\tiles_trajectory_coded\%TILE_BASE_NAME%*.laz ^
130        -ignore_class 3 5 7 9 ^
131        -classify_as 20 -step 0.02 -central ^
132        -odir %WORK_DIRECTORY%\tiles_thinned_preground -olaz ^
133        -cores %NUM_CORES%
134
135:: remove isolated noise points from class 20 and store result in a tiny LAY file
136
137lasnoise -i %WORK_DIRECTORY%\tiles_thinned_preground\%TILE_BASE_NAME%*.laz ^
138        -ignore_class 3 5 7 9 ^
139        -step_xy 0.5 -step_z 0.1 -isolated 10 ^
140        -olay ^
141        -cores %NUM_CORES%
142
143:: classify only points of class 20 into (2) ground and (1) non-ground (also use LAY files from last step)
144
145rmdir %WORK_DIRECTORY%\tiles_ground /s /q
146mkdir %WORK_DIRECTORY%\tiles_ground
147lasground -i %WORK_DIRECTORY%\tiles_thinned_preground\%TILE_BASE_NAME%*.laz -ilay ^
148          -ignore_class 3 5 7 8 9 ^
149          -step 1 -bulge 0.1 -spike 0.2 -offset 0.02 -fine -all_returns -compute_height ^
150          -odir %WORK_DIRECTORY%\tiles_ground -olaz ^
151          -cores %NUM_CORES%
152
153:: create output DTM
154
155rmdir %WORK_DIRECTORY%\tiles_dtm /s /q
156mkdir %WORK_DIRECTORY%\tiles_dtm
157las2dem -i %WORK_DIRECTORY%\tiles_ground\%TILE_BASE_NAME%*.laz ^
158        -keep_class 2 ^
159        -step 0.05 -use_tile_bb ^
160        -odir %WORK_DIRECTORY%\tiles_dtm -obil ^
161        -cores %NUM_CORES%
162
163:: remove buffer points prior to publishing point cloud on server
164
165rmdir %WORK_DIRECTORY%\tiles_final /s /q
166mkdir %WORK_DIRECTORY%\tiles_final
167lastile -i %WORK_DIRECTORY%\tiles_ground\%TILE_BASE_NAME%*.laz ^
168        -set_user_data 0 ^
169        -remove_buffer ^
170        -odir %WORK_DIRECTORY%\tiles_final -olaz ^
171        -cores %NUM_CORES%
172
173::optimize for compression and indexing
174
175rmdir %WORK_DIRECTORY%\tiles_optimized /s /q
176mkdir %WORK_DIRECTORY%\tiles_optimized
177lasoptimize -i %WORK_DIRECTORY%\tiles_final\%TILE_BASE_NAME%*.laz ^
178            -odir %WORK_DIRECTORY%\tiles_optimized -olaz ^
179            -cores %NUM_CORES%
180
181::publish with Potree in 3D on the Web
182
183rmdir %WORK_DIRECTORY%\portal /s /q
184mkdir %WORK_DIRECTORY%\portal
185laspublish -i %WORK_DIRECTORY%\tiles_optimized\%TILE_BASE_NAME%*.laz ^
186           -only_3D -elevation -overwrite ^
187           -title "My Cool Portal" ^
188           -description "This is so cool!" ^
189           -odir %WORK_DIRECTORY%\portal -o portal.html -olaz
190
191::stop here
192
193GOTO:EOF
194
195::other unused stuff
196
197lasview -i "f:\Rail_noise_2\Noise_at_new_rec - Scanner 1 - 170512_131454.laz" ^
198        -drop_intensity_above 0 -keep_first_of_many -filtered_transform -set_classification 7
199
200laslayers -i "f:\Rail_noise_2\Noise_at_new_rec - Scanner 1 - 170512_131454.laz" ^
201        -drop_intensity_above 0 -keep_first_of_many -filtered_transform -set_classification 7 -olay
202