尝试一下在线预览此示例演示如何基于 FeatureLayer 中的一组竞争数字字段生成优势可视化。 这是通过 优势渲染器创建者辅助对象 中的 createRenderer() 方法完成的。
可视化优势涉及根据一组相互竞争的数字属性中的哪个属性在总计数中胜出或击败其他属性来为图层的要素着色。 这方面的常见应用包括可视化选举结果、调查结果和人口多数。
此示例根据房屋建造的主要十年来可视化爱达荷州博伊西的街区组。 如果您查看该图层的服务元数据,您将看到一个包含十个数字字段的列表,其中包含基于建造年代的住房单元计数。
这些都是竞争字段 ,因为一个住房单元不能在10年以上完成建设
为了说明优势字段是如何工作的,我们在一个 选择
元素中向用户公开所有竞争字段。
1
2
3
4
5
6
7
8
9
10
11
12
<select id="fieldList" multiple="multiple" size="10" class="geoscene-widget">
<option value="ACSBLT1939" selected>Before 1940</option>
<option value="ACSBLT1940" selected>1940-1949</option>
<option value="ACSBLT1950" selected>1950-1959</option>
<option value="ACSBLT1960" selected>1960-1969</option>
<option value="ACSBLT1970" selected>1970-1979</option>
<option value="ACSBLT1980" selected>1980-1989</option>
<option value="ACSBLT1990" selected>1990-1999</option>
<option value="ACSBLT2000" selected>2000-2009</option>
<option value="ACSBLT2010" selected>2010-2013</option>
<option value="ACSBLT2014" selected>After 2013</option>
</select>
然后添加一个函数,每当用户从可视化中添加或删除一个字段时,该函数就会生成优势渲染器。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const selectedOptions = [].slice.call(fieldList.selectedOptions);
const fields = selectedOptions.map((option) => {
return {
name: option.value, // field name from the select element
label: option.text // label from the select element
};
});
const params = {
view: view,
layer: layer,
fields: fields,
includeSizeVariable: includeSizeCheckbox.checked,
includeOpacityVariable: includeOpacityCheckbox.checked,
legendOptions: {
title: "Most common decade in which homes were built"
}
};
return predominanceRendererCreator.createRenderer(params)
.then((response) => {
layer.renderer = response.renderer;
});
您可以选择包含大小和/或不透明度视觉变量以向可视化添加另一个维度。启用不透明度变量时,高不透明度要素表示高度主要的值。 主要价值以小幅度击败其他要素的要素将被分配低不透明度,这表明虽然该要素具有获胜价值,但它并不会赢得太多。
启用大小变量后,将根据所有竞争值的总和为要素分配大小。 根据图层的几何类型,总计数较小的要素将使用小图标或线条调整大小,而总计数较大的要素将使用大图标或线条调整大小。 启用此选项有助于可视化特定要素与整个数据集相比的影响力。 它消除了由具有较大地理区域但数据值相对较小的要素引入的偏差。
geoscene/smartMapping/popup/templates
模块允许您生成仅包含与图层渲染器相关的信息的默认弹出模板。
1
2
3
4
5
6
7
8
9
function createPopupTemplate(layer){
popupTemplateCreator.getTemplates({
layer: layer
}).then((response) => {
// the response may also contain secondary
// templates you can choose from
layer.popupTemplate = response.primaryTemplate.value;
})
}
这提供了一个更好的默认弹出式模板,而不是传统的提供一个包含未格式化值的长表的方法。
基于渲染器的建议默认模板 | 传统默认 |
---|
|
|
提示
请记住,在大多数应用程序中应避免 生产 渲染器,因为会影响最终用户的性能成本。 如 智能制图 指南主题所述,Smart Mapping API 设计用于两种类型的应用程序:数据探索应用程序和类似于 GeoScene Online 的可视化创作应用程序。 在所有其他情况下,渲染器应保存到图层或使用任何 渲染器类 手动创建。
其他可视化示例和资源