在Shiny / Leaflet / R中根据缩放级别更改标记聚合

8
我想创建一个Web应用程序,用户输入一组标识符,与这些标识符相关的地图上的一组点会出现。问题是,这些数据可能达到数十万甚至数百万。鉴于这种可能性,我希望采取轻量级方法。以下是我的理想聚合行为。在低缩放级别下,我希望按州进行点的聚合计数(适当的符号尺寸/颜色表示更高的强度,并将点居中在州质心上)。在稍高的缩放级别下,它们将分成较小的多边形计数。在更高的缩放级别下,它们将分成更小的多边形计数。当未聚合时,地图上的点数少于约500个时,只需绘制点。这些多边形已经确定,每个点都有其数据中所属多边形的多边形ID。由于这些点最初是在各自的多边形内随机绘制的,因此点在多边形内的实际分布并不重要。或者换句话说,任何忽略点被绘制在哪个多边形内的聚合都会清除信息。因此,我不能使用markercluster(至少不是我看到的选项)。如果有一种简单的方法可以按照我要求的方式进行聚合,请告诉我。
出于各种原因(我不是JavaScript程序员,我是R程序员),我正在使用R中的leaflet包。是否有一种方法可以根据缩放级别更改聚合级别?
我已经准备了一个玩具数据集,其中包含相对较小的子集(1个实体,3个状态,约10k个观测值)以及这些州的人口普查区和县的质心。

http://s000.tinyupload.com/index.php?file_id=00048836337627834343


2
如果用户使用cluster=clusterOptions()选项,则已经有按缩放级别聚类的选项。您是否想做更多的事情? - Rorschach
是的...如第五段所解释的,我不能使用现有的缩放集群,因为它会擦除/忽略多边形边界。一个特定点所属的多边形才是真正重要的...擦除这些边界或将附近的点分组在一起是不希望出现的行为。 - Faydey
你能提供一个包含少量数据点的玩具数据集,以便我们可以进行实验吗? - NicE
我已经整理好了一个。大约有10k个观测数据,分布在加利福尼亚州、内华达州和亚利桑那州。 - Faydey
1个回答

1
这并不是一个确切的答案,但它很难放在评论中。您想显示预定义地理区域的聚合数据(点/标记数量?),这些区域在较低的缩放级别下合并(比如可以按城市、县、州等分组)。即使在JavaScript中,我也不知道有没有针对这种情况的开箱即用的解决方案。有一些可能的解决方法,但我不确定它们是否容易在R中实现。通常的解决方法是摆脱任何自动聚类,并在每个缩放级别上生成自己的标记,使用适当的数据聚合算法(因为您可以依赖父多边形ID,所以这并不难做)。然后在缩放更改时简单地添加/删除标记。不幸的是,这意味着您将无法从MarkerCluster获得动画和覆盖范围显示。您还可能对GitHub上Leaflet.markercluster问题页面的[Question] Build clusters depending on some geographical entity #521线程感兴趣。用例有些类似,您可以看到一些实现示例,但遗憾的是它没有输出任何普遍可靠的解决方案。

谢谢您的输入。我确实喜欢他们链接中的结果,但我不确定如何在R中实现它。我同意这是一个困难的想法。我的想法是在添加到地图之前,在各种聚合级别上进行聚合,然后仅在该时间点上地图上有的那些点(取决于缩放级别)添加到地图上。 (理想情况下,是那些在地图上+周围一点点区域的点,然后只有当地图边界移动到超出该周围区域时才重新绘制。)不过,我仍在努力解决这个问题。遇到了一些奇怪的错误。 - Faydey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接