[{
		"comments": [
			"Each object in this list defines one level of detail processing method for a",
			"point attribute. While the 'method' field is mandatory, the 'comments' field",
			"exists for your information only and can be omitted. Depending on the method,",
			"there may be further required fields as shown below.",
			"",
			"Each point attribute accepts exactly one LOD method string which is the method",
			"description in JSON format. If the method description contains only the name",
			"but no other details (like input or output settings), then the string can also",
			"simply contain the plain method name instead of a JSON object.",
			"",
			"If not specified otherwise, each method is applied to one point attribute, i.e.",
			"high resolution data is read, points are thinned or combined and low resolution",
			"data is written to the same point attribute (but in a different primary index tree",
			"level)."
		]
	},



	{
		"method": "ignore",
		"comments": "Ignores this point attribute, i.e. no LOD data is calculated."
	},



	{
		"method": "default",
		"comments": [
			"Uses the default method. The default method depends on the LOD",
			"mode defined in the database creation settings as follows:",
			"",
			"    - mode 'thinout': thinout.copy",
			"    - mode 'combine': combine.first"
		]
	},



	{
		"method": "thinout.copy",
		"comments": "Takes the attribute value of a point as it is."
	},



	{
		"method": "combine.first",
		"comments": "Takes the attribute value of the first point of a group."
	},



	{
		"method": "combine.minimum",
		"comments": "Takes the lowest attribute value of all points in a group."
	},



	{
		"method": "combine.maximum",
		"comments": "Takes the highest attribute value of all points in a group."
	},



	{
		"method": "combine.sum",
		"comments": "Calculates the attribute value sum of all points in a group."
	},



	{
		"method": "combine.average",
		"comments": "Calculates the average attribute value of all points in a group."
	},



	{
		"method": "combine.weighted_average",
		"comments": "Calculates the weighted average attribute value of all points in a group.",
		"input": {
			"weights": "<name of weight attribute, e.g. riegl.point_count>"
		}
	},



	{
		"method": "combine.pixels_mpx",
		"comments": [
			"This method is designed for 2D pixel data and combines e.g. up to 4 high resolution",
			"pixels (HRP) to one low resolution pixel (LRP). This includes combination of linear-",
			"and square-sums of point-to-pixel-corner distances in order to calculate a LSQ plane",
			"for the LRP. This plane is then used to calculate the height of the surface in the",
			"center of the LRP.",
			"",
			"In contrast to other methods, this method has multiple outputs:",
			"",
			"    - point_count   = total number of points in all HRP             (required, length: 1)",
			"    - position_xy   = coordinates of LRP's corner                   (required, length: 2)",
			"    - height_mean   = average surface height                        (required, length: 1)",
			"    - height_center = surface height at LRP's center                          (length: 1)",
			"    - linear_sums   = sums of linear distances wrt. LRP's corner    (required, length: 3)",
			"    - square_sums   = sums of square distances wrt. LRP's corner    (required, length: 6)",
			"    - pca_axis_0    = the normalized eigenvector that belongs to the          (length: 3)",
			"    - pca_axis_1    =    largest (0), medium (1) or smallest (2)              (length: 3)",
			"    - pca_axis_2    =        eigenvalue (result of the PCA)                   (length: 3)",
			"    - pca_extent_0  = extent along PCA axis 0 (width)                         (length: 1)",
			"    - pca_extent_1  = extent along PCA axis 1 (height)                        (length: 1)",
			"    - pca_extent_2  = extent along PCA axis 2 (thickness)                     (length: 1)",
			"    - pca_extents   = extents along PCA axes 0, 1 and 2 (in that order)       (length: 3)",
			"    - pca_sigma     = standard deviation of residual point-to-plane distances (length: 1)",
			"    - shape_id      = Estimated shape of point cloud (see 'riegl.shape_id')   (length: 1)",
			"",
			"Each point attribute can only receive one of the outputs. To update multiple attributes,",
			"define this method for each attribute with the same input settings and the desired output.",
			"Methods with exactly the same input settings are only executed once and the results are",
			"copied to the defined point attribute.",
			"",
			"Please note that some of the outputs are required as they are the inputs for the computation",
			"of the next coarser level. So make sure to assign each required output to a point attribute.",
			"",
			"Please note that input/output attributes must have the correct length (number of dimensions).",
			"",
			"The pixel size defines the edge length of the original pixel in meters."
		],
		"input": {
			"pixel_size": 1.194328566955879,
			"scale_factors": [
				0.6133900606140712,
				0.6118450887899296,
				1
			],
			"shape_thresholds": {
				"plane": 0.25,
				"line": 4.0
			},
			"point_count": "<name of point count attribute>",
			"position_xy": "<name of pixel coordinates attribute>",
			"height_mean": "<name of mean height attribute>",
			"linear_sums": "<name of linear sums attribute>",
			"square_sums": "<name of square sums attribute>"
		},
		"output": "<name of output>"
	}
]