主题
聚合
字数统计: 2.3k 字
阅读时长: 约 4 分钟
当前版本: 4.29
聚合到边长为 30 英里的六边形中的地震数据
什么是聚合?
聚合允是将许多要素的大型数据集汇总(或聚合)成具有较少要素的图层。通常是汇总到多边形内,每个多边形可以显示多边形中包含的点数。虽然本主题中的示例侧重于点到面的聚合,但所描述的每个原则也适用于点到折线和面到面的聚合。
注: 聚类是客户端聚合的一种形式,可在放大和缩小时重新计算。本主题重点介绍服务器端聚合,它将数据表示为具有单个分辨率的静态聚合要素。
什么时候用聚合?
当点聚类可动态进行聚合时,为什么应将点聚合到多边形?
在以下两种情况下,将点聚合到面图层比点聚类更有利:
点数据集太大,无法在客户端进行聚类 某些点数据集太大,无法合理地加载到浏览器并以良好的性能进行可视化。将点聚合到面图层允许您以高性能的方式表示数据。
点数据可以在不规则多边形边界内汇总的。 我们有时候需要将点数据汇总到有意义的预定义多边形边界内,例如县、学区或警察局。聚类总是在屏幕空间中处理,而不考虑地缘政治边界。在某些情况下,决策者需要通过预定义的不规则多边形进行汇总。
聚合的工作原理
点到面聚合是数据预处理步骤,通常在 web 地图中可视化数据之前完成。有多种工具可用于执行此操作,以下示例是使用 GeoScene Online 地图查看器中的聚合点
分析工具准备的。
在 GeoScene Online 中聚合点时,先选择要聚合的点图层,以及用于计算汇总统计数据的面图层。这将创建一个新要素服务。默认情况下,与每个多边形相交的点将包含在输出表中。我们可以选择性地选择点图层中的字段,使用各种统计数据进行汇总,例如数字字段的平均值或字符串字段的主要值。我们还可以按字符串字段的值对数字统计信息进行分组。
示例
六边形
以下示例演示了如何可视化聚合到六边形的地震点。该图层是使用 GeoScene Online 地图视图中的 聚合点
分析工具创建的。输出图层包含与每个图格相交的地震总数
注: 六边形格网非常适合不考虑地缘政治边界的连续数据集,例如地震。将地震聚合到均匀格网比聚合到不相关的不规则面图层(如邮政编码)更有意义。
注: 六边形格网在保留面积的空间参考 中看起来最佳。
该图层是使用颜色视觉变量通过连续色带进行样式化的。通常,如果没有某种形式的数据标准化,不应使用颜色来可视化多边形中的总计数。但是,在此示例中是允许的,因为每个六边形的面积相等,从而可有效地按面积对数据进行归一化。
聚合到边长为 30 英里的六边形中的地震数据。弹出窗口使用 Arcade 显示有关每个六边形表示的地震的摘要信息。
此地图除了聚合点工具生成的六边形图层之外,它还包括可见性由比例进行控制的地震点图层。这允许我们使用 Arcade 在弹出窗口中汇总地震统计数据。
例如,要显示最大地震的大小,我们可以编写以下表达式。
js
var earthquakes = Intersects(FeatureSetByName($map, "earthquake points"), $feature);
Text( Max(earthquakes, "mag"), "#.#" );
然后在弹出内容中引用表达式。
在六边形图层上设置 maxScale
并在点图层上设置等效的 minScale
,这样,在缩放到更大比例时创建平滑过渡。当用户缩放超过一定比例时,可以安全地加载点图层,而无需担心性能问题。根据六边形的分辨率,以大比例查看图格在视觉上没有意义。
js
const earthquakeLayer = view.map.layers.find((layer) => layer.title === "earthquake points");
earthquakeLayer.minScale = 577790;
earthquakeLayer.maxScale = 0;
不规则多边形
此示例演示了如何汇总相关不规则多边形内的点。在此应用程序中,表示命案地点的点图层被聚合到表示芝加哥警察局的多边形图层中。在比较警察辖区的统计数据时,按辖区汇总数据是有意义的。
由于多边形形状和大小的差异,我们应使用分级符号(即具有大小视觉变量的图标)来可视化总数。使用颜色会导致过分强调大面积区域,该区域的总面积可能比人口更稠密的小区域要小。
美国芝加哥警察局报告的凶杀案总数(2008-2017 年)。原始凶杀点图层聚合为代表警察分局的多边形图层
在点到多边形聚合分析期间,命案计数按案件的状态(即未结案、因逮捕而关闭或因未逮捕而关闭)进行分组。这些统计信息保存在输出表中,以便在弹出窗口中轻松引用它们。

由于汇总统计信息作为属性包含在表中,因此还可以根据任何分组统计信息进行渲染。例如,可以显示未解决的凶杀案的总数,而不是显示所有凶杀案的总数。
美国芝加哥警察局报告的未解决凶杀案(2008-2017 年)。此应用程序使用与上一示例相同的图层,但现在根据数据的子集(未解决案件与总案件)渲染数据。
众数渲染
使用 GeoScene Online 中的聚合点工具,还可以为最常见的字符串值创建一个字段。这允许我们创建一个众数渲染图,其中大小仍然表示总计数,但颜色表示特定类别的最常见值。以下示例使用颜色来表示每个区域中受害者的主要种族或民族。
美国芝加哥警察局报告的凶杀案总数(2008-2017 年)。每个图标的颜色表示每个分局中受害者的主要种族或民族。
此样式使用 UniqueValueRenderer 和大小视觉变量进行配置。
浏览要素
默认情况下,聚类弹出窗口具有“浏览要素”操作,允许选择聚类中的各个要素以查看其位置和属性信息。我们可以在表示聚合点数据的多边形图层中实现相同的行为。
在以下示例中,单击任何一个六边形以探索属于该图格的各个要素。
聚合到边长为 30 英里的六边形中的地震数据。单击任何弹出窗口中的“浏览要素”操作以查看与特定地震事件相关的位置和信息。
要实现此浏览体验,需要执行以下操作:
为聚合图层的弹出模板创建“浏览要素”操作。
js
hexbinLayer.popupTemplate.actions = [
{
title: "Browse features",
id: "browse",
className: "geoscene-icon-table"
}
];
当用户激活浏览时,执行一个函数来查询与所选要素相交的点图层中的要素。然后将获取的要素添加到视图的弹出窗口中。
js
const layer = view.map.layers.find((layer) => layer.title === "earthquake points");
const query = layer.createQuery();
query.returnGeometry = true;
query.geometry = aggregateGraphic.geometry;
const { features } = await layer.queryFeatures(query);
view.popup.features = [aggregateGraphic].concat(features);
选择新要素后,将其添加到视图中并从视图中清除之前的任何图形。
js
selectedFeatureHandle = reactiveUtils.watch(
() => view.popup?.selectedFeature,
async (feature) => {
if (!feature|| selectedAggregateFeature.getObjectId() === feature.getObjectId()) {
return;
}
feature.symbol = {
type: "simple-marker",
color: "rgb(50,50,50)",
size: 8,
style: "x",
outline: {
color: "rgb(50,50,50)",
width: 4
}
};
if (selectedFeature && view.graphics.includes(selectedFeature)) {
view.graphics.remove(selectedFeature);
selectedFeature = null;
}
if (selectedAggregateFeature.getObjectId() !== feature.getObjectId()) {
view.graphics.add(feature);
selectedFeature = feature;
}
});
同样的技术也可应用于不规则多边形的聚合图层。通过单击弹出窗口中的操作并选择其中一个凶杀地点来浏览辖区内的要素。
命案聚合到警察局。单击任何弹出窗口中的“浏览要素”操作以查看与特定地震事件相关的位置和信息。