PointCloudLayer - 切换渲染器

尝试一下在线预览

可以使用  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:

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.