尝试一下在线预览此示例演示了如何生成一个渲染器,该渲染器通过 视图比例 更改点图层中的图标大小。 相同的工作流程也适用于折线图层,并且仅支持 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 图标在全局范围内使视图混乱 | ...但在区域范围内看起来不错 |
---|
|
|
另一方面,在简单的渲染器中将 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 图标在全局范围内看起来不错 | ...但在区域范围内很难看到 |
---|
|
|
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);
});
这个变量是输出渲染器的一部分,在输入图层设置输出渲染器时,可以提供更好的视觉效果,在不同的尺度下都可以很好地工作。
在全球范围内尺寸较小 | ...在区域范围内更大 |
---|
|
|
一旦为图层生成了变量,就可以克隆它,并在该图层的任何其他渲染器集中使用它。这避免了对智能映射方法的不必要调用。
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 的可视化创作应用程序。 在所有其他情况下,渲染器应保存到图层或使用任何 渲染器类 手动创建。