8

我想在带有 d3 的传单地图上实现一个热图图层。我有大约 2-3k 个数据点。

我的数据格式如下:

[{lat: .., lon: .., value: ..}, {lat: .., lon: .., value: ..}, ...]

理想情况下,我想根据值以及基于点的密度在热图之间切换。我还需要能够动态更新数据。从视觉上看,我的目标是这样的:

热图示例

我知道 Leaflet 有几个热图插件,它们看起来都不是很活跃。Heatmap.js最接近我的需要。但是,它似乎没有维护,文档与源代码不一致,而且运行速度太慢。我已经广泛使用 d3,如果可能的话,我更愿意将它用于热图层。

周围有一两个街区(例如,这个街区),但我没有找到一个有效的街区。这最接近我的需要。它仍然适用于最新的传单版本,但理想情况下我想使用渐变(如 heatmap.js)而不是 hexbins。我还需要重写代码处理数据的方式并调整其他一些位(例如,它绘制密度,而不是值)。

理想情况下,我希望有一个类似于 Mikes 传单示例的解决方案。有什么建议么?

更新:我还找到了这个webgl-heatmap 的传单包装器,但它似乎坏了

4

3 回答 3

5

如果您担心热图的性能,我会向您推荐两个选项:Leaflet.heatGoogle Maps JS API v3

最近我一直在使用 Leaflet 热图,在尝试了几个像你这样的热图之后,我最终得到了Leaflet.heat。放弃 Google 的唯一原因是许可证,但它确实表现良好。

这是演示页面中的一个示例,包含 10k 点: 例子

它是由 Leaflet 的同一作者制作的,即使它仍然是 alpha/beta,在我的测试中也相当稳定。官方Leaflet 插件页面中没有提到它,我花了一段时间才找到它。

它基于simpleheat,并在 Leaflet 之上创建了一个 HTML5 画布来绘制热图:请记住,它仅适用于 IE9+。

即使从我的测试中每帧绘制 1k 点也非常快。

数据格式是一个 lat、long 和 value 的数组,如下所示:

[[lat, lon, value], [...], [...], ... ]

您可以指定自己的渐变,将其作为创建时的选项传递 - 键实际上是值但它有效,这有点奇怪 - 请注意0

{
  ...,
  gradient: {0.4: 'blue', 0.65: 'lime', 1: 'red'}
}

如果您正在寻找更多的六边形样式,就在今天早上,我在 bl.ocks.org 上找到了这个:有一个用于 d3 的 hexbin 插件,您可以尝试使用以防万一。

与 Leaflet 的集成应该不会那么糟糕:一旦在其上创建了一个图层,您应该能够放置您的六边形并将它们填充为热图(就像在这个例子中一样)

于 2014-10-04T16:59:47.817 回答
1

我知道这个问题已经很老了,但我一直在研究同样的问题并遇到了一些事情:

这看起来像一个不错的教程: http: //www.delimited.io/blog/2013/12/1/hexbins-with-d3-and-leaflet-maps

这是 tnightingales 代码的链接(您引用了它),但作为一个工作块:http ://bl.ocks.org/tnightingale/4668062

这是来自 Bostock 的动态 hexbin 示例:http: //bl.ocks.org/mbostock/7833311

最后这里是 Bostock 的一个示例,使用大小和颜色作为动态​​变量:http ://bl.ocks.org/mbostock/4330486

我希望这有助于有人研究同样的问题。

于 2015-12-09T12:40:14.710 回答
1

另一个(传单)选项是:webgl-heatmap-leaflet 借助WebGL,可以将数据点扩展到数十万个!

于 2015-11-09T13:31:13.207 回答