'\" -*- coding: us-ascii -*- .if \n(.g .ds T< \\FC .if \n(.g .ds T> \\F[\n[.fam]] .de URL \\$2 \(la\\$1\(ra\\$3 .. .if \n(.g .mso www.tmac .TH las2col 1 "16 February 2019" "" "" .SH NAME las2col \- LAS translation to MonetDB binary format .SH SYNOPSIS 'nh .fi .ad l \fBlas2col\fR \kx .if (\nx>(\n(.l/2)) .nr x (\n(.l/5) 'in \n(.iu+\nxu [\fB\fIOPTIONS\fB\fR] 'in \n(.iu-\nxu .ad b 'hy .SH DESCRIPTION \fBlas2col\fR performs LAS translation to MonetDB binary format with optional configuration. .SH OPTIONS .TP \*(T<\fB\-h\fR\*(T>, \*(T<\fB\-help\fR\*(T>, \*(T<\fB\-\-help\fR\*(T> produce help message .TP \*(T<\fB\-v\fR\*(T>, \*(T<\fB\-\-verbose\fR\*(T> Verbose message output .TP \*(T<\fB\-\-num_read_threads\fR\*(T> \fInumber\fR Set number of threads .TP \*(T<\fB\-s\fR\*(T>, \*(T<\fB\-\-skip_invalid\fR\*(T> Skip writing invalid point(s) .TP \*(T<\fB\-parse\fR\*(T> \fIstring\fR, \*(T<\fB\-\-parse\fR\*(T> \fIstring\fR Specify which entries of the LAS/LAZ will be extracted (default is xyz). For example, 'txyzia' means that six columnar (binary) MonetDB files will be generated, the first one containing all gpstime values, the next three containing values for x, y, and z coordinates, the next one with intensity values and the last one with scan angle values. The supported entries are: t - gpstime as double .br x - x coordinate as double .br y - y coordinate as double .br z - z coordinate as double .br X - x coordinate as decimal(\fInum_digits_unscaled_max_x\fR,\fInum_digits_scale_x\fR) .br Y - y coordinate as decimal(\fInum_digits_unscaled_max_y\fR,\fInum_digits_scale_y\fR) .br Z - z coordinate as decimal(\fInum_digits_unscaled_max_z\fR,\fInum_digits_scale_z\fR) .br a - scan angle as tinyint .br i - intensity as smallint .br n - number of returns for given pulse as smallint .br r - number of this return as smallint .br c - classification number as tinyint .br u - user data as tinyint .br p - point source ID as smallint .br e - edge of flight line as smallint .br d - direction of scan flag as smallint .br R - red channel of RGB color as smallint .br G - green channel of RGB color as smallint .br B - blue channel of RGB color as smallint .br M - vertex index number as integer .br k - Morton 2D code using X and Y (unscaled and no offset) as bigint .TP \*(T<\fB\-moffset\fR\*(T> \fIx\fR,\fIy\fR, \*(T<\fB\-\-moffset\fR\*(T> \fIx\fR,\fIy\fR Specify a global offset in X and Y to be used when computing the Morton 2D code. Values must be unscaled .TP \*(T<\fB\-check\fR\*(T> \fIx\fR,\fIy\fR, \*(T<\fB\-\-check\fR\*(T> \fIx\fR,\fIy\fR Check suitability to compute Morton 2D codes. It checks specified scale matches the one in input file. If \*(T<\fB\-\-moffset\fR\*(T> is provided it also checks that obtained Morton 2D codes will be consistent, i.e. global X,Y within [0,2^31] .TP \*(T<\fB\-i\fR\*(T> \fIarg\fR, \*(T<\fB\-in\fR\*(T> \fIarg\fR, \*(T<\fB\-input\fR\*(T> \fIarg\fR, \*(T<\fB\-\-input\fR\*(T> \fIarg\fR file with the list las/laz files .TP \*(T<\fB\-f\fR\*(T> \fIarg\fR, \*(T<\fB\-file\fR\*(T> \fIarg\fR, \*(T<\fB\-\-file\fR\*(T> \fIarg\fR input LAS file .TP \*(T<\fB\-o\fR\*(T> \fIarg\fR, \*(T<\fB\-out\fR\*(T> \fIarg\fR, \*(T<\fB\-\-out\fR\*(T> \fIarg\fR, \*(T<\fB\-\-output\fR\*(T> \fIarg\fR output prefix .SH EXAMPLE Convert a las/laz file into columnar format (binary) of MonetDB, outputs for each entry a file \fIoutput_prefix\fR_col_\fIentry_name\fR.dat: .nf \*(T< las2col \-i \fIinput_file\fR \-o \fIoutput_prefix\fR \*(T> .fi .PP Convert a list of las/laz files (still outputs for each entry a file \fIoutput_prefix\fR_col_\fIentry_name\fR.dat): .nf \*(T< las2col \-i \fIlas_file_1\fR \-i \fIlas_file_2\fR \-o \fIoutput_prefix\fR \*(T> .fi Alternatively: .nf \*(T< las2col \-f \fIfile_with_the_list_las/laz_files\fR \-o \fIoutput_prefix\fR \*(T> .fi .PP Convert a list of las/laz files using \fInum_read_threads\fR threads (default is 1): .nf \*(T< las2col \-f \fIfile_with_the_list_las/laz_files\fR \-o \fIoutput_prefix\fR \-\-num_read_threads \fInumber_of_threads\fR \*(T> .fi .PP After generating the columnar files, import them in MonetDB. Example: .nf \*(T< mclient \fIdb_name\fR \-s "COPY BINARY INTO flat FROM ('\fIfull_parent_path\fR/out_col_x.dat','\fIfull_parent_path\fR/out_col_y.dat','\fIfull_parent_path\fR/out_col_z.dat')" \*(T> .fi Note that full paths of the columnar files MUST be used. Also note that a table called flat has to be created in a MonetDB DB beforehand. The table must have the columns in the same order as specified by the \*(T<\fB\-\-parse\fR\*(T> option, and the column types must be the ones specified above. Example: .nf \*(T< mclient \fIdb_name\fR \-s "create table flat (x double, y double, z double)" \*(T> .fi Note that for decimal entries (XYZ) the column definition at table-creation time must be decimal(\fInum_digits_unscaled_max\fR,\fInum_digits_scale\fR) For example, if the maximum X value of a file (or a list of files) is 638982.55, then the X definition when creating the table is decimal(8,2). Example: .nf \*(T< mclient \fIdb_name\fR \-s "create table flat (x decimal(8,2), y decimal(8,2), z decimal(8,2))" \*(T> .fi