Pima Association of Government LiDAR Processing
LiDAR Tile Map
<iframe src="https://www.google.com/maps/d/u/0/embed?mid=zWrC3jHvBaPo.kQxtF3pEUs_Y" width="800" height="600"></iframe>
The Pima Association of Governments (PAG) has collected aerial LiDAR data over the Tucson basin for a decade (dates: 2005, 2008, 2011, 2015). The LiDAR and digital Orthophotography data sets are currently hosted by the University of Arizona Library (UA Access only link)
As a demonstration portion of this project, we will calculate the monthly global irradiation (direct + diffuse + reflected) and hourly insolation of the LiDAR derived digital surface model - this is a representation of a landscape which includes above-ground features like trees, buildings, and infrastructure.
DSM and radiation/hours of sun light models will be calculated using the Sol routine developed by the Fall 2014 ACIC 420/520 (Applied Cyberinfrastructure Concepts) course.
We will be using the 2015 PAG LiDAR data for this project in order to be up-to-date on new construction and growth/death of urban trees and vegetation.
LAStools workflow
http://rapidlasso.com/2016/02/03/generating-spike-free-digital-surface-models-from-lidar/
Unfortunately - I don't have a licences to use LASTools right now and it generates a diagonal line through the surface model. I've requested one from Martin Isenberg and am standing by...
C:\LAStools\bin>las2dem -i C:\PAG2015\14S14E07.las -sp83 AZ_C -spike_free 9 -feet -step 3 -hillshade -o C:\PAG2015\hillshade.tif Please note that LAStools is not "free" (see http://lastools.org/LICENSE.txt) contact 'martin.isenburg@rapidlasso.com' to clarify licensing terms if needed. using state plane 'AZ_C' (NAD83 TM) 'stateplane83 AZ_C' WARNING: unlicensed. over 1.5 million points. inserting black diagonal. WARNING: nodata -9999 out-of-range for 8 bits. using 0.
USFS FUSION Workflow
FUSION runs in a CMD window and has similar command line utilities as LASTools.
First I run the FilterData function to remove outliers (points like birds, or airborne debris which are far above the ground level); here I use the outlier function for points within a 30x30 foot area at 5x the z-axis standard deviation.
Next, I create a digital surface model using the GridSurfaceCreate function at 3 foot resolution.
FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S13E01_f.las D:\Tucson_Sol\las\14S13E01.las FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S13E12_f.las D:\Tucson_Sol\las\14S13E12.las FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S13E13_f.las D:\Tucson_Sol\las\14S13E13.las FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S14E05_f.las D:\Tucson_Sol\las\14S14E05.las FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S14E06_f.las D:\Tucson_Sol\las\14S14E06.las FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S14E07_f.las D:\Tucson_Sol\las\14S14E07.las FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S14E08_f.las D:\Tucson_Sol\las\14S14E08.las FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S14E17_f.las D:\Tucson_Sol\las\14S14E17.las FilterData /index outlier 5 30 D:\Tucson_Sol\las\14S14E18_f.las D:\Tucson_Sol\las\14S14E18.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S13E01.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S13E01.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S13E12.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S13E12.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S13E13.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S13E13.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S14E05.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S14E05.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S14E06.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S14E06.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S14E07.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S14E07.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S14E08.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S14E08.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S14E17.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S14E17.las GridSurfaceCreate D:\Tucson_Sol\dsm\14S14E18.dtm 1 f f 2 0 2 2 D:\Tucson_Sol\las\14S14E18.las MergeDTM /disk /overlap:average /cellsize:3 D:\Tucson_Sol\dsm\ua_model_3ft.dtm D:\Tucson_Sol\dsm\14S13E01.dtm D:\Tucson_Sol\dsm\14S13E12.dtm D:\Tucson_Sol\dsm\14S13E13.dtm D:\Tucson_Sol\dsm\14S14E05.dtm D:\Tucson_Sol\dsm\14S14E06.dtm D:\Tucson_Sol\dsm\14S14E07.dtm D:\Tucson_Sol\dsm\14S14E08.dtm D:\Tucson_Sol\dsm\14S14E17.dtm D:\Tucson_Sol\dsm\14S14E18.dtm MergeDTM /disk /overlap:average D:\Tucson_Sol\dsm\ua_model_1ft.dtm D:\Tucson_Sol\dsm\14S13E01.dtm D:\Tucson_Sol\dsm\14S13E12.dtm D:\Tucson_Sol\dsm\14S13E13.dtm D:\Tucson_Sol\dsm\14S14E05.dtm D:\Tucson_Sol\dsm\14S14E06.dtm D:\Tucson_Sol\dsm\14S14E07.dtm D:\Tucson_Sol\dsm\14S14E08.dtm D:\Tucson_Sol\dsm\14S14E17.dtm D:\Tucson_Sol\dsm\14S14E18.dtm DTM2ASCII D:\Tucson_Sol\dsm\ua_model_1ft.dtm DTM2TIF D:\Tucson_Sol\dsm\ua_model_1ft.dtm DTM2ASCII D:\Tucson_Sol\dsm\ua_model_3ft.dtm DTM2TIF D:\Tucson_Sol\dsm\ua_model_3ft.dtm
Batch command processing of DSM
All .bat files are kept in the FUSION folder.
Create a filelist.txt with the directory id's of the tiles.
dir /b /s *.las >filelist.txt
The call .bat uses the filename 'filelist.txt' to execute serially the processes on all of the LAS/LAZ files to use:
for /F "eol=; tokens=1* delims=,. " %%i in (D:\Tucson_Sol\las\filelist.txt) do call create_dtm_gtifs %%
Make sure all folders are created before executing. Batch file named create_dtm_gtifs.bat:
FilterData /index outlier 5 30 D:\Tucson_Solar\las\%1_f.las D:\Tucson_Sol\las\%1.las GridSurfaceCreate D:\Tucson_Solar\dtm\%1.dtm 1 f f 2 0 2 2 D:\Tucson_Solar\las\%1_f.las DTM2ASCII D:\Tucson_Solar\dtm\%.dtm DTM2TIF D:\Tucson_Solar\tif\%.dtm
Mapping RGB onto LAS tiles
Aesthetically, I wanted to see if I could put the PAG 2015 6-inch orthophotography onto the point cloud data - this is also useful for calculating GridMetrics using FUSION, which can take into account the RGB values.
I used the Liblas las2las to read and write the RGB into the LAS tiles:
las2las -i D:\Tucson_Sol\14S14E07.las --color-source D:\Tucson_Sol\14S14E07_C50Y15.tif -o D:\Tucson_Sol\14S14E07rgb.las --file-format 1.2 --point-format 3 --color-source-scale 256 --color-source-bands 1 2 3