按比例改变点的大小

尝试一下在线预览

此示例演示了如何生成一个渲染器,该渲染器通过 视图比例 更改点图层中的图标大小。 相同的工作流程也适用于折线图层,并且仅支持 MapView 中的可视化。

当在一个点图层的简单渲染器中为一个标记符号设置静态大小为 10px 时,在更大的(区域)尺度下,可视化看起来会很好,但在小尺度下看起来太混乱。

           
1
2
3
4
5
6
7
8
9
10
11
layer.renderer = new SimpleRenderer({
  symbol: {
    type: "simple-marker",
    color: [100, 100, 100],
    outline: {
      color: [255, 255, 255, 0.7],
      width: 0.5
    },
    size: "10px"
  }
});

10px 图标在全局范围内使视图混乱

...但在区域范围内看起来不错

scale-small-bad scale-large-good

另一方面,在简单的渲染器中将 2px  的较小图标大小设置为标记符号时,可视化在较小比例下看起来不错,但在较大(区域)比例下可能很难看到。

            
1
2
3
4
5
6
7
8
9
10
11
12
layer.renderer = new SimpleRenderer({
  label: "Weather Station",
  symbol: {
    type: "simple-marker",
    color: [100, 100, 100],
    outline: {
      color: [255, 255, 255, 0.7],
      width: 0.5
    },
    size: "2px"
  }
});

2px 图标在全局范围内看起来不错

...但在区域范围内很难看到

scale-small-good scale-large-bad

location.createRenderer() 方法( 和其他智能映射渲染器创建器方法 )有一个 sizeOptimizationEnabled 参数,当设置为 true 时,会生成一个将图标大小映射到视图比例的 大小变量

             
1
2
3
4
5
6
7
8
9
10
11
12
13
// generates a new renderer with a scale-dependent
// size visual variable to vary icon size by scale
locationRendererCreator.createRenderer({
  layer: layer,
  view: view,
  sizeOptimizationEnabled: sizeOptimizationEnabled
}).then((rendererResponse) => {
  // the renderer contains a size variable with stops
  // mapping icon sizes to scale values
  layer.renderer = rendererResponse.renderer;
}).catch((error) => {
  console.error(error);
});

这个变量是输出渲染器的一部分,在输入图层设置输出渲染器时,可以提供更好的视觉效果,在不同的尺度下都可以很好地工作。

在全球范围内尺寸较小

...在区域范围内更大

location zoomed out location zoomed in

一旦为图层生成了变量,就可以克隆它,并在该图层的任何其他渲染器集中使用它。这避免了对智能映射方法的不必要调用。

                             
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
// icon sizes will linearly change
// depending on the view.scale
// This variable was generated using the previous snippet
const sizeVariable = {
  type: "sizeInfo",
  valueExpression: "$view.scale",
  stops: [
    {
      size: 7.5,
      value: 1155581.108577
    },
    {
      size: 6,
      value: 9244648.868618
    },
    {
      size: 3,
      value: 73957190.948944
    },
    {
      size: 1.5,
      value: 591657527.591555
    }
  ]
};

const renderer = layer.renderer.clone();
renderer.visualVariables.push(sizeVariable);
layer.renderer = renderer;

注意

请记住,在大多数应用程序中应避免 生产 渲染器,因为会影响最终用户的性能成本。 如 智能制图 指南主题所述,Smart Mapping API 设计用于两种类型的应用程序:数据探索应用程序和类似于 GeoScene Online 的可视化创作应用程序。 在所有其他情况下,渲染器应保存到图层或使用任何 渲染器类 手动创建。

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