The following are profiles of the common classes 3dSceneLayerInfo, attributeInfo, Store, Index, defaultGeometrySchema, vertexAttributes, and AttributeStatistics. Please note that most of these profiles of common and shared classes in the core I3S standard have additional mandatory elements
This section describes the point cloud scene layer. The following table describes the properties of the point cloud scene layer. The description provides guidance on the mandatory/allowed values for a property (or object) for a given property.
Property | Type | Description |
---|---|---|
id |
integer |
A unique identifying number for the layer. For point cloud scene layer, only a single layer is supported, therefore, id is always 0. |
layerType |
string |
String indicating the layer type. |
name |
string |
Represents the layer name. |
alias |
string |
Represents the alias layer name. |
desc |
string |
Description for the layer. |
copyrightText |
string |
Copyright information to be displayed with this layer. |
capabilities |
string[] |
Capabilities supported by this layer. |
spatialReference |
An object containing the WKID or WKT identifying the spatial reference of the layer’s geometry. No special point cloud guidance. |
|
heightModelInfo |
An object containing the vertical coordinate system information. No special point cloud guidance. |
|
serviceUpdateTimeStamp |
Object to provide time stamp when the I3S service or the source of the service was created or updated. No special point cloud guidance, |
|
store |
The storage for the layer. Please reference the point cloud scene layer store profile below. |
|
attributeStorageInfo |
List of attributes included for this layer. Please reference the point cloud scene layer attributeInfo profile below. |
|
drawingInfo |
An object containing drawing information for the point cloud scene layer. |
|
elevationInfo |
An object containing elevation information. For point cloud scene layers, the following
rules shall apply |
|
fields |
[Field] [] |
For the point cloud scene layer profile, the properties name and type are mandatory. |
Note: Properties in bold are mandatory
Below is an example JSON encoding of the point cloud scene layer definition. Please note that the “types”
pointCloudSplatAlgorithm
and pointCloudStretchRenderer
are examples specific to what your clients support.
Replace these types with whatever algorithms are appropriate on your development and 3d visualization environment.
In the following example, PointCloudStretchRenderer
defines the color of each point in a PointCloudLayer based on
the value of a numeric attribute. pointCloudSplatAlgorithm
is an algorithm for rendering points using sizes
depending on point density. These are examples only.
{
"id": 0,
"layerType": "PointCloud",
"name": "Test Data",
"desc": "Nice Test data",
"capabilities": [
"View"
],
"spatialReference": {
"wkid": 4326,
"latestWkid": 4326,
"vcsWkid": 5703,
"latestVcsWkid": 5703
},
"store": {
"id": "",
"profile": "PointCloud",
"version": "2.0",
"extent": [
-122.45945212669568,
38.298060753040346,
-122.43014691292728,
38.303939889306761
],
"index": {
"nodeVersion": 1,
"boundingVolumeType": "obb",
"nodesPerPage": 64,
"lodSelectionMetricType": "density-threshold"
},
"defaultGeometrySchema": {
"geometryType": "points",
"header": [],
"topology": "PerAttributeArray",
"encoding": "lepcc-xyz",
"vertexAttributes": {
"position": {
"valueType": "Float64",
"valuesPerElement": 3
}
},
"ordering": [
"position"
]
}
},
"attributeStorageInfo": [
{
"key": "1",
"name": "ELEVATION",
"encoding": "embedded-elevation"
},
{
"key": "2",
"name": "INTENSITY",
"ordering": [
"attributeValues"
],
"attributeValues": {
"valueType": "UInt16",
"valuesPerElement": 1
},
"encoding": "lepcc-intensity"
},
{
"key": "4",
"name": "RGB",
"ordering": [
"attributeValues"
],
"attributeValues": {
"valueType": "UInt8",
"valuesPerElement": 3
},
"encoding": "lepcc-rgb"
},
{
"key": "8",
"name": "CLASS_CODE",
"ordering": [
"attributeValues"
],
"attributeValues": {
"valueType": "UInt8",
"valuesPerElement": 1
}
},
{
"key": "16",
"name": "FLAGS",
"ordering": [
"attributeValues"
],
"attributeValues": {
"valueType": "UInt8",
"valuesPerElement": 1
}
},
{
"key": "32",
"name": "RETURNS",
"ordering": [
"attributeValues"
],
"attributeValues": {
"valueType": "UInt8",
"valuesPerElement": 1
}
}
],
"drawingInfo": {
"renderer": {
"pointSizeAlgorithm": {
"type": "pointCloudSplatAlgorithm",
"scaleFactor": 1,
"minSize": 4
},
"pointsPerInch": 25,
"field": "ELEVATION",
"fieldTransformType": "none",
"colorModulation": {
"field": "",
"minValue": 1,
"maxValue": 255
},
"type": "pointCloudStretchRenderer",
"stops": [
{
"value": 23.91416560580215,
"color": [
88,
19,
252,
255
]
},
{
"value": 59.9739474458430379,
"color": [
8,
252,
253,
255
]
},
{
"value": 96.033729285883922,
"color": [
242,
254,
42,
255
]
},
{
"value": 132.093511125924806,
"color": [
255,
43,
24,
255
]
}
]
}
},
"elevationInfo": {
"mode": "absoluteHeight"
},
"heightModelInfo": {
"heightModel": "gravity_related_height",
"vertCRS": "NAVD_1988",
"heightUnit": "meter"
}
}
List of attributes included for this point cloud scene layer.
Property | Type | Description |
---|---|---|
key |
string |
Represents the attribute key. Key is the same as `id' used in the resource URL to fetch the binary buffers. |
name |
string |
The attribute name. Must be unique for this layer. |
ordering |
string[] |
Mapping between attribute to point. Only 1-to-1 is currently supported. |
encoding |
string |
Encoding (i.e. compression) for the attribute binary buffer if different from GZIP or no-compression. |
attributeValues |
Represents the description for value encoding, for example scalar or vector encoding. |
Note: Properties in bold are mandatory.
Elevation pseudo-attribute
``` { "key": "1", "name": "ELEVATION", "encoding": "embedded-elevation" }
*Example: Color attribute*
```
{
"key": "4",
"name": "RGB",
"ordering": [
"attributeValues"
],
"attributeValues": {
"valueType": "UInt8",
"valuesPerElement": 3
},
"encoding": "lepcc-rgb"
}
Example: 8-bit uncompressed/GZIP compressed class-codes
{
"key": "8",
"name": "CLASS_CODE",
"ordering": [
"attributeValues"
],
"attributeValues": {
"valueType": "UInt8",
"valuesPerElement": 1
}
}
The following table provides information on the properties that describes storage for the PointCloud scene layer. Please note that there are Point Cloud specific profiles of the Index and defaultGeometryScheme classes.
Property | Type | Description |
---|---|---|
id |
string |
Id for the store. Not currently used by the point cloud scene layer. |
profile |
string |
Defines the profile type of the scene layer as point cloud scene layer. |
version |
string |
Point cloud scene layer store version. |
extent |
number[4] |
2D extent of the point cloud scene layer in the layers spatial reference units. |
index |
Describes the index (i.e. bounding volume tree) of the layer. |
|
defaultGeometrySchema |
Attribute description as field. |
|
geometryEncoding |
string |
MIME type for the encoding used for the Geometry Resources. For example: application/octet-stream; version=1.6. |
attributeEncoding |
string |
MIME type for the encoding used for the Attribute Resources. For example: application/octet-stream; version=1.6. |
Note: properties in bold are mandatory.
The following is a JSON example.
{
"id": "",
"profile": "PointCloud",
"version": "2.0",
"extent": [
-105.023403,
39.740089,
-105.011746,
39.757051
],
"index": {
"nodeVersion": 1,
"boundingVolumeType": "obb",
"nodesPerPage": 64,
"lodSelectionMetricType": "density-threshold"
},
"defaultGeometrySchema": {
"geometryType": "points",
"header": [],
"topology": "PerAttributeArray",
"encoding": "lepcc-xyz",
"vertexAttributes": {
"position": {
"valueType": "Float64",
"valuesPerElement": 3
}
},
"ordering": [
"position"
]
}
}
The following table describes the properties of the index, such as bounding volume tree, of the Point Cloud layer.
Property | Type | Description |
---|---|---|
nodeVersion |
integer |
The version of the individual nodes format. |
nodesPerPage |
integer |
The page size describes the number of nodes per paged index document. 64 is currently expected. |
boundingVolumeType |
string |
The bounding volume type. Only OBB is currently supported. |
lodSelectionMetricType |
string |
Defines how node.lodThreshold should be interpreted. |
href |
string |
Note: properties in bold are mandatory.
{
"nodeVersion": 1,
"boundingVolumeType": "obb",
"nodesPerPage": 64,
"lodSelectionMetricType": "density-threshold"
}
The following table describes the properties for class defaultGeometryScheme of the Point Cloud layer.
Property | Type | Description |
---|---|---|
geometryType |
string |
The type of primitive. Only points are supported for point cloud scene layer. |
header |
[] |
The header in binary buffers. Currently not supported for point cloud scene layer. |
topology |
string |
This property is currently *ignored for point cloud scene layer since it only contains geometry position without vertex attributes. |
encoding |
string |
Only lepcc-xyz compression is currently supported. |
ordering |
string[] |
Currently the geometry contains XYZ only, so vertex attribute must only list 'position'. |
Possible values for each array string: |
- |
vertexAttributes |
Note: properties in bold are mandatory.
JSON example for defaultGeometrySchema for point cloud scene layers.
{
"geometryType": "points",
"header": [],
"topology": "PerAttributeArray",
"encoding": "lepcc-xyz",
"vertexAttributes": {
"position": {
"valueType": "Float64",
"valuesPerElement": 3
}
},
"ordering": [
"position"
]
}
The following property defines the vertex buffer description.
Property | Type | Description |
---|---|---|
position |
Only LEPCC compressed (X,Y,Z) is supported. Decompressed data will be absolute |
Example: vertexAttributes
{
"position": {
"valueType": "Float64",
"valuesPerElement": 3
}
}
This point scene layer class describes and contains statistics about each attribute. Statistics are useful to estimate attribute distribution and range. By convention, statistics are stored by attribute at layers/0/statistics/{attribute_id}
Property | Type | Description |
---|---|---|
attribute |
string |
Attribute name. Must match the name specified for this attribute in layer.attributeStorageInfo |
stats |
Statistics for this attribute |
|
labels |
The statistics document may contain labeling information for the attribute values. |
Example: Elevation statistic (point.z statistics).
{
"attribute" : "ELEVATION",
"stats" : {
"min" : 1567.597046,
"max" : 1649.043945,
"avg" : 1593.811809,
"stddev" : 12.722517,
"count" : 3799022.000000,
"sum" : 6054926127.557739,
"variance" : 161.862445,
"histogram" : {
"minimum" : 1567.596482,
"maximum" : 1644.937967,
"counts" : [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 3, 123, 1852, 7407, 11776, 15386, 11689, 12569, 10041, 11340, 12370, 18329, 29686, 40210, 44547, 50266, 86603, 102660, 129177, 113065, 97772, 103083, 92726, 74721, 70910, 68750, 65077, 66181, 75049, 69223, 65015, 65122, 54877, 46869, 48223, 47339, 38808, 35533, 35212, 33455, 29682, 33789, 41732, 26137, 23063, 26649, 20234, 15673, 16440, 22573, 23646, 24871, 25511, 25566, 22712, 20494, 19606, 20215, 18483, 17837, 17991, 17078, 19259, 20789, 20905, 18258, 17028, 20344, 20705, 20444, 21581, 19226, 16906, 19515, 15510, 15514, 15741, 15821, 16097, 14391, 14062, 15048, 15715, 15695, 17170, 14275, 12690, 13680, 15699, 15755, 15074, 14364, 16359, 20516, 16407, 12986, 13478, 12766, 12209, 11665, 11931, 13373, 14710, 14430, 14360, 15652, 15713, 14377, 14540, 12478, 12802, 16602, 13237, 12228, 10972, 12456, 13791, 15004, 18845, 15398, 16732, 15076, 13460, 12835, 12615, 13230, 12967, 12310, 13408, 18330, 20433, 21039, 26813, 21120, 12081, 6965, 7830, 9959, 8015, 6127, 6679, 6386, 9682, 11268, 5126, 4643, 5009, 4573, 4029, 4647, 4351, 6812, 4024, 3578, 3810, 4463, 5298, 4970, 2439, 2075, 1624, 1734, 1579, 1596, 1417, 1450, 1391, 1313, 1321, 1970, 3932, 1044, 982, 1158, 871, 622, 739, 513, 526, 378, 388, 500, 1172, 353, 244, 248, 175, 139, 254, 259, 248, 284, 297, 173, 155, 169, 142, 246, 130, 136, 208, 194, 96, 98, 91, 93, 126, 151, 125, 125, 119, 126, 118, 178, 140, 96, 76, 85, 38, 85]
}
}
}
Example: Intensity statistics.
{
"attribute" : "INTENSITY",
"stats" : {
"min" : 0.000000,
"max" : 256.000000,
"avg" : 0.000000,
"stddev" : 0.000000,
"count" : 3799022.000000,
"sum" : 0.000000,
"variance" : 0.000000,
"histogram" : {
"minimum" : 0.000000,
"maximum" : 256.000000,
"counts" : [143339, 143858, 149770, 164501, 174011, 181377, 192349, 166440, 132127, 110664, 100962, 97616, 97383, 100071, 106157, 114260, 119177, 122104, 121872, 116999, 111086, 102366, 92383, 81642, 71199, 61043, 53223, 47350, 42872, 39193, 38076, 403552]
}
}
}
Example: RGB color statistics ( please note that histogram is not required here).
{
"attribute" : "RGB",
"stats" : {
"min" : 0.000000,
"max" : 255.000000,
"avg" : 0.022315,
"stddev" : 0.000000,
"count" : 11397066.000000,
"sum" : 510730851.000000,
"variance" : 0.000000,
"histogram" : {
"minimum" : 0.000000,
"maximum" : 0.000000,
"counts" : []
}
}
}
Example: Class code statistics with labels.
{
"attribute": "CLASS_CODE",
"stats": {
"min": 1.0,
"max": 12.0,
"avg": 5.63104,
"stddev": 2.629335,
"count": 3799022.0,
"sum": 21392446.0,
"variance": 6.913403,
"histogram": {
"minimum": 1.0,
"maximum": 12.0,
"counts": [
14,
802764,
681975,
3056,
153,
387412,
4948,
1904257,
9987,
4073,
383
]
},
"mostFrequentValues": [
{
"value": 8.0,
"count": 1904257
},
{
"value": 2.0,
"count": 802764
},
{
"value": 3.0,
"count": 681975
},
{
"value": 6.0,
"count": 387412
},
{
"value": 9.0,
"count": 9987
},
{
"value": 7.0,
"count": 4948
},
{
"value": 10.0,
"count": 4073
},
{
"value": 4.0,
"count": 3056
},
{
"value": 11.0,
"count": 383
},
{
"value": 5.0,
"count": 153
},
{
"value": 1.0,
"count": 14
}
]
},
"labels": {
"labels": [
{
"value": 1.0,
"label": "Unclassified"
},
{
"value": 2.0,
"label": "Ground"
},
{
"value": 3.0,
"label": "Low Vegetation"
},
{
"value": 4.0,
"label": "Medium Vegetation"
},
{
"value": 5.0,
"label": "High Vegetation"
},
{
"value": 6.0,
"label": "Building"
},
{
"value": 7.0,
"label": "Low Point(noise)"
},
{
"value": 8.0,
"label": "Model Key"
},
{
"value": 9.0,
"label": "Water"
},
{
"value": 10.0,
"label": "Rail"
},
{
"value": 11.0,
"label": "Road Surface"
}
]
}
}
Example: Flags statistics (LIDAR point cloud)
{
"attribute": "FLAGS",
"stats": {
"min": 0.000000,
"max": 137.000000,
"avg": 0.000000,
"stddev": 0.000000,
"count": 82673752.000000,
"sum": 0.000000,
"variance": 0.000000,
"histogram": {
"minimum": 0.000000,
"maximum": 137.000000,
"counts": [
58138737,
0,
0,
0,
0,
0,
0,
0,
24490375,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1610,
0,
0,
0,
0,
0,
0,
0,
43030
]
},
"mostFrequentValues": [
{
"value": 0.000000,
"count": 58138737
},
{
"value": 8.000000,
"count": 24490375
},
{
"value": 136.000000,
"count": 43030
},
{
"value": 128.000000,
"count": 1610
}
]
},
"labels": {
"bitfieldLabels": [
{
"bitNumber": 3,
"label": "Overlap"
},
{
"bitNumber": 7,
"label": "Edge"
}
]
}
}
Example: Returns statistics (LIDAR point cloud).
{
"attribute": "RETURNS",
"stats": {
"min": 17.0,
"max": 52.0,
"avg": 17.41348,
"stddev": 2.606183,
"count": 3799022.0,
"sum": 66154192.0,
"variance": 6.792191,
"histogram": {
"minimum": 17.0,
"maximum": 52.0,
"counts": [
3704673,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
49581,
43733,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
394,
341,
300
]
},
"mostFrequentValues": [
{
"value": 17.0,
"count": 3704673
},
{
"value": 33.0,
"count": 49581
},
{
"value": 34.0,
"count": 43733
},
{
"value": 49.0,
"count": 394
},
{
"value": 50.0,
"count": 341
},
{
"value": 51.0,
"count": 300
}
]
}
}
Nodes represent the spatial index of the data as a bounding-volume hierarchy. To reduce the number of node-index requests required to traverse this index tree, they are organized in pages of layer.index.nodesPerPage nodes
.
Children must be contiguous, in index range, so they may be located using firstChild and childrenCount fields.
Page number computation example:
Assuming layer.store.index.nodesPerPage
= 64, then node id
= 78 will be in page page_id
= floor( 78 / 64) = 1 (i.e. second page)pc
Properties
Property | Type | Description |
---|---|---|
nodes |
[node] [] |
Array of nodes |
Note: properties in bold are mandatory.
Examples
Example: Global scene (WSG84, last page)
{
"nodes": [
{
"resourceId": 704,
"obb": {
"center": [
-105.01482,
39.747244,
1596.040551
],
"halfSize": [
29.421873,
29.539055,
22.082193
],
"quaternion": [
0.420972,
-0.055513,
-0.118217,
0.897622
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7872,
"lodThreshold": 8979.959961
},
{
"resourceId": 705,
"obb": {
"center": [
-105.014132,
39.747244,
1588.67982
],
"halfSize": [
29.421803,
29.538986,
14.721462
],
"quaternion": [
0.420972,
-0.055509,
-0.118215,
0.897623
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7055,
"lodThreshold": 8047.970215
},
{
"resourceId": 706,
"obb": {
"center": [
-105.01512,
39.747343,
1629.163972
],
"halfSize": [
3.677743,
3.692391,
3.680366
],
"quaternion": [
0.420971,
-0.055515,
-0.118217,
0.897623
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 1,
"lodThreshold": 1.140747
},
{
"resourceId": 707,
"obb": {
"center": [
-105.013445,
39.746714,
1584.999455
],
"halfSize": [
29.421768,
29.538958,
11.0411
],
"quaternion": [
0.420977,
-0.055505,
-0.118212,
0.897621
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7567,
"lodThreshold": 8632.032227
},
{
"resourceId": 708,
"obb": {
"center": [
-105.012758,
39.746714,
1584.999455
],
"halfSize": [
29.421768,
29.538958,
11.041096
],
"quaternion": [
0.420978,
-0.055501,
-0.11821,
0.897621
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7168,
"lodThreshold": 8176.874512
},
{
"resourceId": 709,
"obb": {
"center": [
-105.013445,
39.747244,
1584.999456
],
"halfSize": [
29.42177,
29.538956,
11.041099
],
"quaternion": [
0.420973,
-0.055505,
-0.118213,
0.897623
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7532,
"lodThreshold": 8592.106445
},
{
"resourceId": 710,
"obb": {
"center": [
-105.012758,
39.747244,
1581.31909
],
"halfSize": [
29.421768,
29.538956,
14.721463
],
"quaternion": [
0.420973,
-0.0555,
-0.118211,
0.897623
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 6710,
"lodThreshold": 7654.412109
},
{
"resourceId": 711,
"obb": {
"center": [
-105.01482,
39.747775,
1592.360184
],
"halfSize": [
29.421841,
29.539022,
18.401829
],
"quaternion": [
0.420968,
-0.055512,
-0.118217,
0.897624
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7044,
"lodThreshold": 8035.421875
},
{
"resourceId": 712,
"obb": {
"center": [
-105.014132,
39.747775,
1584.999455
],
"halfSize": [
29.421772,
29.538952,
11.041098
],
"quaternion": [
0.420968,
-0.055508,
-0.118215,
0.897625
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7080,
"lodThreshold": 8076.48877
},
{
"resourceId": 713,
"obb": {
"center": [
-105.01482,
39.748305,
1599.720916
],
"halfSize": [
29.421906,
29.539085,
25.762558
],
"quaternion": [
0.420964,
-0.055512,
-0.118217,
0.897626
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7355,
"lodThreshold": 8390.194336
},
{
"resourceId": 714,
"obb": {
"center": [
-105.014133,
39.748305,
1599.720915
],
"halfSize": [
29.421902,
29.539082,
25.762558
],
"quaternion": [
0.420964,
-0.055508,
-0.118215,
0.897626
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7358,
"lodThreshold": 8393.616211
},
{
"resourceId": 715,
"obb": {
"center": [
-105.014648,
39.748504,
1629.163965
],
"halfSize": [
7.355486,
7.38478,
3.680366
],
"quaternion": [
0.420962,
-0.055511,
-0.118217,
0.897627
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 5,
"lodThreshold": 5.703735
},
{
"resourceId": 716,
"obb": {
"center": [
-105.014218,
39.748139,
1640.205065
],
"halfSize": [
7.355505,
3.692403,
14.72146
],
"quaternion": [
0.420965,
-0.055508,
-0.118215,
0.897626
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 71,
"lodThreshold": 80.993034
},
{
"resourceId": 717,
"obb": {
"center": [
-105.013445,
39.747775,
1588.67982
],
"halfSize": [
29.421797,
29.538982,
14.721462
],
"quaternion": [
0.420969,
-0.055504,
-0.118213,
0.897625
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7252,
"lodThreshold": 8272.697266
},
{
"resourceId": 718,
"obb": {
"center": [
-105.012758,
39.747775,
1588.67982
],
"halfSize": [
29.421799,
29.538986,
14.721464
],
"quaternion": [
0.420969,
-0.0555,
-0.118211,
0.897625
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 5507,
"lodThreshold": 6282.09375
},
{
"resourceId": 719,
"obb": {
"center": [
-105.013445,
39.748305,
1588.67982
],
"halfSize": [
29.421803,
29.538984,
14.721462
],
"quaternion": [
0.420965,
-0.055504,
-0.118213,
0.897627
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7872,
"lodThreshold": 8979.959961
},
{
"resourceId": 720,
"obb": {
"center": [
-105.012758,
39.748305,
1592.360184
],
"halfSize": [
29.421799,
29.538982,
11.041098
],
"quaternion": [
0.420965,
-0.055499,
-0.118211,
0.897627
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 5036,
"lodThreshold": 5744.801758
}
]
}
A single bounding volume hierarchy node.
Property | Type | Description |
---|---|---|
resourceId |
integer |
Index of the first child of this node. The resourceID must be used to query node resources, like geometry buffer (XYZ) /nodes//geometry/0 and attribute buffers. One buffer can have one attribute. Available attributes are declared in the SceneLayer document. /nodes//attributes/<attrib_key>. |
firstChild |
integer |
Index of the first child of this node. |
childCount |
integer |
Number of children for this node. Value is 0 if node is a leaf node. |
vertexCount |
integer |
Number of points for this node. |
obb |
Oriented bounding boxes (OBB) are the only supported bounding volumes. |
|
lodThreshold |
number |
This metric may be used as a threshold to split a parent node into its children. See |
Note: properties in bold are mandatory.
Example: Global scene (WSG84)
{
"resourceId": 704,
"obb": {
"center": [
-105.01482,
39.747244,
1596.040551
],
"halfSize": [
29.421873,
29.539055,
22.082193
],
"quaternion": [
0.420972,
-0.055513,
-0.118217,
0.897622
]
},
"firstChild": 0,
"childCount": 0,
"vertexCount": 7872,
"lodThreshold": 8979.959961
}
Contains statistics about each attribute. Statistics are useful to estimate attribute distribution and range.
Property | Type | Description |
---|---|---|
min |
number |
(Conservative) minimum attribute value for the entire layer. |
max |
number |
(Conservative) maximum attribute value for the entire layer. |
count |
number |
Count for the entire layer. |
sum |
number |
Sum of the attribute values over the entire layer. |
avg |
number |
Representing average or mean value. For example, sum/count. |
stddev |
number |
Representing the standard deviation. |
variance |
number |
Representing variance. For example, stats.stddev *stats.stddev. |
histogram |
Represents the histogram. |
|
mostFrequentValues |
[valuecount] [] |
An array of most frequently used values within the point cloud scene layer. |
Note: properties in bold are mandatory.
Examples
Example: Elevation statistic (point.z statistics)
{
"min": 1567.597046,
"max": 1649.043945,
"avg": 1593.811809,
"stddev": 12.722517,
"count": 3799022.000000,
"sum": 6054926127.557739,
"variance": 161.862445,
"histogram": {
"minimum": 1567.596482,
"maximum": 1644.937967,
"counts": [
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
1,
3,
123,
1852,
7407,
11776,
15386,
11689,
12569,
10041,
11340,
12370,
18329,
29686,
40210,
44547,
50266,
86603,
102660,
129177,
113065,
97772,
103083,
92726,
74721,
70910,
68750,
65077,
66181,
75049,
69223,
65015,
65122,
54877,
46869,
48223,
47339,
38808,
35533,
35212,
33455,
29682,
33789,
41732,
26137,
23063,
26649,
20234,
15673,
16440,
22573,
23646,
24871,
25511,
25566,
22712,
20494,
19606,
20215,
18483,
17837,
17991,
17078,
19259,
20789,
20905,
18258,
17028,
20344,
20705,
20444,
21581,
19226,
16906,
19515,
15510,
15514,
15741,
15821,
16097,
14391,
14062,
15048,
15715,
15695,
17170,
14275,
12690,
13680,
15699,
15755,
15074,
14364,
16359,
20516,
16407,
12986,
13478,
12766,
12209,
11665,
11931,
13373,
14710,
14430,
14360,
15652,
15713,
14377,
14540,
12478,
12802,
16602,
13237,
12228,
10972,
12456,
13791,
15004,
18845,
15398,
16732,
15076,
13460,
12835,
12615,
13230,
12967,
12310,
13408,
18330,
20433,
21039,
26813,
21120,
12081,
6965,
7830,
9959,
8015,
6127,
6679,
6386,
9682,
11268,
5126,
4643,
5009,
4573,
4029,
4647,
4351,
6812,
4024,
3578,
3810,
4463,
5298,
4970,
2439,
2075,
1624,
1734,
1579,
1596,
1417,
1450,
1391,
1313,
1321,
1970,
3932,
1044,
982,
1158,
871,
622,
739,
513,
526,
378,
388,
500,
1172,
353,
244,
248,
175,
139,
254,
259,
248,
284,
297,
173,
155,
169,
142,
246,
130,
136,
208,
194,
96,
98,
91,
93,
126,
151,
125,
125,
119,
126,
118,
178,
140,
96,
76,
85,
38,
85
]
}
}
Example: Intensity statistics
{
"min": 0.000000,
"max": 256.000000,
"avg": 0.000000,
"stddev": 0.000000,
"count": 3799022.000000,
"sum": 0.000000,
"variance": 0.000000,
"histogram": {
"minimum": 0.000000,
"maximum": 256.000000,
"counts": [
143339,
143858,
149770,
164501,
174011,
181377,
192349,
166440,
132127,
110664,
100962,
97616,
97383,
100071,
106157,
114260,
119177,
122104,
121872,
116999,
111086,
102366,
92383,
81642,
71199,
61043,
53223,
47350,
42872,
39193,
38076,
403552
]
}
}
Example: RGB color statistics ( please note that histogram is not required here)
{
"min": 0.000000,
"max": 255.000000,
"avg": 0.022315,
"stddev": 0.000000,
"count": 11397066.000000,
"sum": 510730851.000000,
"variance": 0.000000,
"histogram": {
"minimum": 0.000000,
"maximum": 0.000000,
"counts": []
}
}
Example: Class code statistics with labels
{
"min": 1.0,
"max": 12.0,
"avg": 5.63104,
"stddev": 2.629335,
"count": 3799022.0,
"sum": 21392446.0,
"variance": 6.913403,
"histogram": {
"minimum": 1.0,
"maximum": 12.0,
"counts": [
14,
802764,
681975,
3056,
153,
387412,
4948,
1904257,
9987,
4073,
383
]
},
"mostFrequentValues": [
{
"value": 8.0,
"count": 1904257
},
{
"value": 2.0,
"count": 802764
},
{
"value": 3.0,
"count": 681975
},
{
"value": 6.0,
"count": 387412
},
{
"value": 9.0,
"count": 9987
},
{
"value": 7.0,
"count": 4948
},
{
"value": 10.0,
"count": 4073
},
{
"value": 4.0,
"count": 3056
},
{
"value": 11.0,
"count": 383
},
{
"value": 5.0,
"count": 153
},
{
"value": 1.0,
"count": 14
}
]
}
Example: Flags statistics (LIDAR point cloud)
{
"min": 0.000000,
"max": 137.000000,
"avg": 0.000000,
"stddev": 0.000000,
"count": 82673752.000000,
"sum": 0.000000,
"variance": 0.000000,
"histogram": {
"minimum": 0.000000,
"maximum": 137.000000,
"counts": [
58138737,
0,
0,
0,
0,
0,
0,
0,
24490375,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1610,
0,
0,
0,
0,
0,
0,
0,
43030
]
},
"mostFrequentValues": [
{
"value": 0.000000,
"count": 58138737
},
{
"value": 8.000000,
"count": 24490375
},
{
"value": 136.000000,
"count": 43030
},
{
"value": 128.000000,
"count": 1610
}
]
}
Example: Returns statistics (LIDAR point cloud)
{
"min": 17.0,
"max": 52.0,
"avg": 17.41348,
"stddev": 2.606183,
"count": 3799022.0,
"sum": 66154192.0,
"variance": 6.792191,
"histogram": {
"minimum": 17.0,
"maximum": 52.0,
"counts": [
3704673,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
49581,
43733,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
394,
341,
300
]
},
"mostFrequentValues": [
{
"value": 17.0,
"count": 3704673
},
{
"value": 33.0,
"count": 49581
},
{
"value": 34.0,
"count": 43733
},
{
"value": 49.0,
"count": 394
},
{
"value": 50.0,
"count": 341
},
{
"value": 51.0,
"count": 300
}
]
}
Optionally, the statistics document may contain labeling information for the attribute values.
Property | Type | Description |
---|---|---|
labels |
[label] [] |
Array of string label/value pairs. Used when attribute represents a set of values. For example, ClassCode. |
bitfieldLabels |
Array of string label/bitNumber pairs. This is useful when the attribute represent a bitfield. For example, FLAGS. |
Examples
Example: Class Code labels (LIDAR data)
{
"labels": [
{
"value": 1.0,
"label": "Unclassified"
},
{
"value": 2.0,
"label": "Ground"
},
{
"value": 3.0,
"label": "Low Vegetation"
},
{
"value": 4.0,
"label": "Medium Vegetation"
},
{
"value": 5.0,
"label": "High Vegetation"
},
{
"value": 6.0,
"label": "Building"
},
{
"value": 7.0,
"label": "Low Point(noise)"
},
{
"value": 8.0,
"label": "Model Key"
},
{
"value": 9.0,
"label": "Water"
},
{
"value": 10.0,
"label": "Rail"
},
{
"value": 11.0,
"label": "Road Surface"
}
]
}
Example: Flags labels (LIDAR data)
{
"bitfieldLabels": [
{
"bitNumber": 3,
"label": "Overlap"
},
{
"bitNumber": 7,
"label": "Edge"
}
]
}
Property | Type | Description |
---|---|---|
value |
number |
Value |
label |
string |
Label string |
Note: properties in bold are mandatory.
Example: Class Code label
{
"value": 2,
"label": "Ground"
}
Example for LiDAR data:
Bit Number | Label | description |
---|---|---|
0 |
Synthetic |
If set then this point was created by a technique other than LIDAR collection such as digitized from a photogrammetric stereo model or by traversing a waveform |
1 |
Key-Point |
If set, this point is considered to be a model key-point and thus generally should not be withheld in a thinning algorithm. |
2 |
Withheld |
If set, this point should not be included in processing (synonymous with Deleted). |
3 |
Overlap |
If set, this point is within the overlap region of two or more swaths or takes. Setting this bit is not mandatory (unless, of course, it is mandated by a particular delivery specification) but allows Classification of overlap points to be preserved. |
4 |
Scan Channel 0 |
Scanner Channel is used to indicate the channel (scanner head) of a multichannel system. Channel 0 is used for single scanner systems |
5 |
Scan Channel 1 |
Scanner Channel is used to indicate the channel (scanner head) of a multichannel system. |
6 |
Scan Direction |
The Scan Direction Flag denotes the direction at which the scanner mirror was traveling at the time of the output pulse. A bit value of 1 is a positive scan direction, and a bit value of 0 is a negative scan direction (where positive scan direction is a scan moving from the left side of the in-track direction to the right side and negative the opposite). |
7 |
Edge of flight line |
The Edge of Flight Line data bit has a value of 1 only when the point is at the end of a scan. It is the last point on a given scan line before it changes direction or the mirror facet changes. Note that this field has no meaning for 360° Field of View scanners (such as Mobile LIDAR scanners) and should not be set |
Property | Type | Description |
---|---|---|
bitNumber |
integer |
Bit number (0 is LSB) |
label |
string |
Label string |
Note: properties in bold are mandatory.
Example: Flag label
{
"bitNumber": 3,
"label": "Overlap"
}