尝试一下在线预览可以使用 PointCloudLayer 在浏览器中可视化点云数据。每个点的可视化(其颜色和大小)是由渲染器定义的。有四种渲染器类型可以应用于点云数据:
这些渲染器可以使用文档中定义的 API 手动创建,也可以使用智能映射 API 生成。有三个渲染器创建器方法可以简化 PointCloudLayer 的渲染器创建过程:
这个示例展示了如何调用这些方法中的每一个,并将不同的呈现程序应用到 PointCloudLayer 。用于可视化的渲染器依赖于给定的字段名。点云的典型字段名包括ELEVATION
, RGB
, CLASS_CODE
和 INTENSITY
。例如,无需将颜色映射到 PointCloudUniqueValueRenderer 中的一长串类代码,您只需调用 createPCClassRenderer() 方法即可根据 CLASS_CODE
字段为数据生成标准颜色:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const layer = new PointCloudLayer({
url: "https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/BARNEGAT_BAY_LiDAR_UTM/SceneServer"
});
// generates colors for visualizing each class code
typeRendererCreator
.createPCClassRenderer({
layer: layer,
field: "CLASS_CODE"
})
.then((response) => {
// set the renderer on the input layer
layer.renderer = response.renderer;
});
此示例使用自定义函数根据给定字段名生成适当的呈现器。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// stores generated renderers to avoid making service
// calls for the same renderer multiple times
const renderersByField = {
RGB: null,
CLASS_CODE: null,
ELEVATION: null,
INTENSITY: null
};
function getRenderer(fieldName) {
// If the renderer is already generated, then return it
if (renderersByField[fieldName]) {
return promiseUtils.resolve(renderersByField[fieldName]);
}
// Store the generated renderer in a predefined object in
// case it is requested in the future and return the renderer
function responseCallback(response) {
renderersByField[fieldName] = response.renderer;
return response.renderer;
}
if (fieldName === "RGB") {
return colorRendererCreator
.createPCTrueColorRenderer({
layer: pcLayer
})
.then(responseCallback);
}
if (fieldName === "CLASS_CODE") {
return typeRendererCreator
.createPCClassRenderer({
layer: pcLayer,
field: fieldName
})
.then(responseCallback);
}
if (fieldName === "ELEVATION" || "INTENSITY") {
return colorRendererCreator
.createPCContinuousRenderer({
layer: pcLayer,
field: fieldName
})
.then(responseCallback);
}
}
附加资源
查看下面的示例,了解如何手动创建上面列出的渲染器,而不是使用智能映射 APIs: