在Shiny / Leaflet / R中通过缩放级别更改标记聚类

时间:2015-11-08 07:11:38

标签: r shiny leaflet

我想创建一个Web应用程序,其中用户输入一组标识符,并在地图上显示与这些标识符相关的一组点。

麻烦的是,这些数据的数量可能达到数十至数十万甚至可能达到数百万。鉴于这种可能性,我想采取轻松的措施。以下是我理想的聚合行为。

在低缩放级别,我想将这些点聚合成按状态计数(适当的符号体系大小/颜色表示更高的强度,点以状态质心为中心)。在略高的缩放级别,这些将通过较小的多边形分成计数。在更高的变焦,更小的多边形。如果没有聚合,地图上的点数将小于~500,那么只需绘制点。

这些多边形已经确定,每个点在其数据中都包含它所在的每个多边形的多边形ID。

由于点是在各个多边形内随机绘制的,因此多边形内点的实际分布无关紧要。或者更确切地说,任何忽略绘制点的多边形的聚合都将消除信息。出于这个原因,我不能使用markercluster(至少不能使用我看到的选项。如果有一种简单的方法可以按照我正在寻找的方式进行聚合,请告诉我)

由于各种原因(我不是javascript程序员,我是R程序员)我在R内的传单包的范围内工作。有没有办法可以根据缩放更改聚合级别以这种方式?

我已经整理了一个玩具数据集,其中包含一个相对较小的子集(1个实体,3个状态,~10k观测值)以及这些状态的人口普查区和县的质心。

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

1 个答案:

答案 0 :(得分:1)

这不是一个答案,但它几乎不适合评论。

您希望显示每个预定义地理区域的汇总数据(点/标记的数量?),这些区域以较低的缩放级别合并(让我们说它可能是每个城市,然后是县,州等) )。

即使在JavaScript中,我也不知道这个用例的任何开箱即用的解决方案。有一些可能的解决方法,但我不确定它们是否可以在R中轻松完成。

通常的解决方法是摆脱任何自动聚类,并使用适当的数据聚合算法在每个缩放级别生成自己的标记(由于您可以依赖父多边形ID,因此不是很难)。然后只需在缩放更改时添加/删除标记。

不幸的是,这意味着您无法从MarkerCluster获得动画和覆盖范围。

您可能也对GitHub上Leaflet.markercluster问题页面中的这个帖子[Question] Build clusters depending on some geographical entity #521感兴趣。用例在某种程度上是相似的,你可以看到一些实现的例子,但不幸的是它没有在任何通用和可靠的解决方案中输出。