聚类

字数统计: 1.6k
阅读时长: 约 3 分钟
当前版本: 4.29

按燃料类型对全球发电厂进行聚类和分类。聚类汇总了图层的渲染器,因此您可以一目了然地查看要素的空间密度

什么是聚类?

聚类是一种通过彼此之间的空间接近度将点要素分组为聚类来减少图层中点的方法。通常,聚类的大小取决于每个聚类中的要素数。

如果区域中的许多点相互叠加,则这是显示该区域的有效方法。

聚类允许您有效地可视化点叠加在另一点上或彼此非常接近的位置。使用上面的卷帘微件比较发电厂的未聚类图层与聚类版本

注: 聚类仅适用于 MapView 中具有 point 几何的图层。

为什么聚类分析很有用?

大型点图层可能具有欺骗性。看起来只有几个点,但实际上可能是几千个。聚类允许您在相对较小的区域中以可视化方式表示大量点。

例如,以下地图显示了数千个发电厂的位置。在下图中,区域 A 和 B 都具有高密度的点,因此无法进行比较。

已禁用聚类

区域 A 和区域 B 都具有高密度的点。无法判断每个区域中有多少个点重叠

但是,启用聚类时,用户现在可以清楚地看到区域 B 的点数几乎是区域 A 的两倍。

没有标注的分类

聚类可使用户能够一目了然地轻松比较重叠要素的密度

聚类的工作方式

聚类是在图层的 featureReduction 属性中配置的。通过将 featureReduction 类型设置为 cluster,可以使用最少的代码启用聚类。

js
    layer.featureReduction = {
        type: "cluster"
    };

featureReduction 属性使您可以控制许多其他聚类属性。clusterRadius 可定义每个聚类的影响区域以包括要素。您还可以为聚类定义 popupTemplateslabels,以汇总聚类中包含的要素。

  • 在聚类中心使用计数标注聚类时,请关闭标注消除冲突。如果标注放置位于聚类之外,请保持标注消除冲突处于启用状态。

  • 增加 clusterMinSize 以将标注放入较小的聚类中 (16pt 是一个很好的起点)。

  • 对于较大的图层,可使用舍入值或缩写值 (例如 10k 而不是 10000) 格式化标注中的聚类计数。有关此示例,请参阅以下建议的聚类默认值

示例

基本聚类

以下示例演示了如何在点图层上启用聚类,以及如何配置用于显示聚类计数的标注和弹出窗口。

在图层上启用聚类后,将生成聚类使用的聚合字段。默认情况下,所有聚类图层都具有 cluster_count 聚合字段。这可用于每个聚类的标注和弹出窗口。图层渲染器中使用的其他字段均可以在弹出窗口中显示。您可在 FeatureReductionCluster.popupTemplate 文档中了解有关如何使用它们的更多信息。

按计数聚类的全球发电厂

js
    clusteredLayer.featureReduction = {
        type: "cluster",
        clusterMinSize: 16.5,
        // defines the label within each cluster
        labelingInfo: [{
            deconflictionStrategy: "none",
            labelExpressionInfo: {
                expression: "Text($feature.cluster_count, '#,###')"
            },
            symbol: {
                type: "text",
                color: "white",
                font: {
                    family: "Noto Sans",
                    size: "12px"
                }
            },
            labelPlacement: "center-center"
        }],
            // information to display when the user clicks a cluster
        popupTemplate: {
            title: "Cluster Summary",
            content: "This cluster represents <b>{cluster_count}</b> features.",
            fieldInfos: [{
                fieldName: "cluster_count",
                format: {
                    places: 0,
                    digitSeparator: true
                }
            }]
        }
    };

建议的聚类默认值

默认情况下,聚类符号始终汇总聚类中的要素。当图层具有 UniqueValueRenderer 时,每个聚类的符号表示聚类中要素的主要值。当图层应用了任何视觉变量时,可将聚类中每个变量的平均值应用于聚类符号。描述数值字段的主要类型和平均值的字段可以在聚类弹出窗口和标注中引用。

此示例使用智能制图方法演示了如何生成特定于图层渲染器的建议聚类配置。

按燃料类型对全球发电厂进行聚类和分类。聚类汇总了图层渲染器,因此您可以一目了然地查看聚类所包含的要素汇总

js
    // generates default popupTemplate
    const popupTemplate = await clusterPopupCreator
      .getTemplates({ layer })
      .then( (popupTemplateResponse) => popupTemplateResponse.primaryTemplate.value );
    // generates default labelingInfo
    const { labelingInfo, clusterMinSize } = await clusterLabelCreator
       .getLabelSchemes({
            layer,
            view
        }.then((labelSchemes) => labelSchemes.primaryScheme);

    // Set this object on layer.featureReduction
    return {
        type: "cluster",
        popupTemplate,
        labelingInfo,
        clusterMinSize
    };

聚类为饼图

默认情况下,当图层具有 UniqueValueRendererClassBreaksRenderer 时,每个聚类的符号表示聚类中的主要类别。

您可能更希望将基于类型的渲染器聚类可视化为饼图,而不是主要类别。为此,您可以调用 pieChart.createRendererForClustering 方法,该方法将根据 UniqueValueRenderer 或 ClassBreaksRenderer 中定义的类别创建饼图渲染器。

从此方法返回的字段和渲染器应直接在图层上的 FeatureReductionCluster 实例上进行设置。

js
    const { renderer, fields } = await pieChartRendererCreator.createRendererForClustering({
        layer,
        shape: "donut"
    });

    layer.featureReduction = {
        type: "cluster",
        fields,
        renderer
    }

311 份事故报告,按燃料类型分类。聚类分析可使用 UniqueValueRenderer 或 ClassBreaksRenderer 将图层渲染器汇总为图层的饼图