主题可视化与现实的 3D 符号

尝试一下在线预览

此示例演示如何在 3D SceneView 中基于真实世界的大小或测量值来可视化 2D 点要素。 此应用程序中的图层包含表示树位置的点数据。 该数据具有用于测量每棵树的多个字段,包括沿半长轴和半短轴的树冠直径、树冠高度、树干宽度和树干高度。无论比例如何, 我们将使用这些字段中的数据来创建表示每棵树与其他地图要素相关的真实世界大小和形状的符号。

在这种情况下,我们将使用具有三个 大小 视觉变量 和一个 颜色 视觉变量的 SimpleRenderer 来模拟每棵树在现实世界中存在的大小和形状。

在完成以下步骤之前,您应该熟悉 views , Map 和 FeatureLayer 。 如有必要,请先完成以下教程:

此应用程序的基本组件,例如创建  Map 和  SceneView  类的实例以及理解 HTML 和 CSS 结构将不会被审查。 如果您需要熟悉此应用程序中的这些组件,请参阅上面列出的教程。 作为一般规则,上述教程中讨论的介绍性原则适用于文档中的大多数示例。

1. 为树创建一个 SimpleRenderer 并为其分配一个默认符号

创建一个  SimpleRenderer  并在渲染器的 symbol  属性上设置一个默认符号。 在这种情况下,我们将创建一个描绘现实树的  WebStyleSymbol  。 GeoScene Online 提供了许多开箱即用的逼真 3D 符号。 在这种情况下,我们从 esriRealisticTreesStyle  样式组中选择一个通用树。

        
1
2
3
4
5
6
7
8
const trunkRenderer = {
  type: "simple", // autocasts as new SimpleRenderer()
  symbol: {
    type: "web-style", // autocasts as new WebStyleSymbol()
    styleName: "esriRealisticTreesStyle",
    name: "其他"
  }
};

要深入了解 WebStyleSymbols 及其与 PointSymbol3D 的关系,请参阅 使用逼真的 WebStyleSymbol 可视化要素 示例。

2. 在渲染器上设置三个尺寸视觉变量

在定义任何  WebStyleSymbol  或  ObjectSymbol3DLayer 的大小时,需要考虑三个轴:高度、宽度(从东到西的长度/直径)和深度(从北到南的长度/直径)。 每个轴都可以根据具有单独大小视觉变量的字段值进行设置。 如果每个轴的值相等,则只需要一个大小的视觉变量。 

树数据恰好有三个字段,存储每个树冠的三个维度: Crown_Height (高度以英尺为单位)、 Width_EW (从东到西的直径以英尺为单位)和 Width_NS (从北到南的直径以英尺为单位)。 由于这些值中的每一个都可能不同,我们会看到一些树冠更接近于它们的实际形状,而不是完美的球体。

                        
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const crownRenderer = {
  type: "simple", // autocasts as new SimpleRenderer()
  symbol: sym, // set from the code snippet in step 3
  visualVariables: [
    {
      type: "size",
      axis: "height", // specify which axis to apply the data values to
      field: "Crown_Height",
      valueUnit: "feet"
    },
    {
      type: "size",
      axis: "width", // specify which axis to apply the data values to
      field: "Width_EW",
      valueUnit: "feet"
    },
    {
      type: "size",
      axis: "depth", // specify which axis to apply the data values to
      field: "Width_NS",
      valueUnit: "feet"
    }
  ]
};

3. 添加一个颜色视觉变量到渲染器

添加颜色视觉变量可以为树可视化添加很好的主题感。 由于该服务包含每棵树的碳储存数据,我们将根据在特定点测量的碳储存量为每棵树冠分配从淡黄色到深绿色的颜色。 在 基于真实世界尺寸 (2D) 样本的缩放要素尺寸 中讨论了相同的概念。

          
1
2
3
4
5
6
7
8
9
10
const visualVariables = crownRenderer.visualVariables.splice(0);
visualVariables.push({
  type: "color",
  field: "C_Storage", // Carbon storage
  stops: [
    { value: 0, color: "#f7fcb9" }, // features with zero carbon
    { value: 10000, color: "#31a354" } // features with 8000 carbon
  ]
});
crownRenderer.visualVariables = visualVariables;

4. 将渲染器应用到该图层

定义渲染器后,将其设置在图层上。

            
1
2
3
4
5
6
7
8
9
10
11
12
const treesLayer = new FeatureLayer({
  url: "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Landscape_Trees/FeatureServer/0",
  renderer: renderer, // set renderer on layer
  outFields: ["*"],
  popupTemplate: {
    // autocasts as new PopupTemplate()
    title: "{Cmn_Name}",
    content:
      "<i>{Sci_Name}</i><br>" +
      "This tree is in {Condition} condition and is {Height} feet in height."
  }
});

定义渲染器后,您可以在图层上设置它,视图将自动更新。 单击下面的沙盒按钮以查看此应用程序的完整代码。

虽然此示例的主要目的是演示如何根据真实世界的大小来缩放要素的大小,但它还演示了如何通过其他视觉手段(例如颜色或各种尺寸维度)合并专题映射的多元元素。

5. 其他可视化教程和示例

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