使用 R 为 Leaflet 生成彩色地图图层

Posted

技术标签:

【中文标题】使用 R 为 Leaflet 生成彩色地图图层【英文标题】:Generate colored map layers with R for Leaflet 【发布时间】:2016-04-08 18:07:27 【问题描述】:

我从事个人项目,女巫站在 mysql 数据库中收集和存储一些工作气象站的天气数据(温度、二氧化碳、湿度......)(我已经尝试使用 PostGIS 后的 PostgreSQL)。

在前端,我使用基于 Laravel 的 Web 应用程序和 Leaflet 来显示映射数据(Laravel 请求数据库并将 GeoJSON 文件返回给 Leaflet)。

为了获得更好的可视化效果,我决定进行一些插值以覆盖缺失的数据,然后生成一个彩色图层供传单显示。

在第一步中,我使用 IDW 和克里金插值算法编写了一些 R 脚本,在 R 中绘制结果看起来不错,但问题是我需要生成 shape 或 geoJSON 文件以将其传递给 Leaflet 而不是图像。

经过一些研究,我意识到我需要使用像 geoserver(WMS) 这样的层服务器和 Postgres 而不是 MySQL ...

在这一点上,我仍然很困惑该怎么做。

注意:我需要让我的地图出现在这个网站上:http://www.irceline.be/

请帮忙,提前致谢。

【问题讨论】:

有一个 leaflet R package 可以让您直接使用来自 R 的数据。 【参考方案1】:

您可以像这样在 R 端实现所有内容:

library(mapview)
library(sp)
library(htmlwidgets)

## point data
data(meuse)
coordinates(meuse) <- ~x+y
proj4string(meuse) <- CRS("+init=epsg:28992")

## grid data
data(meuse.grid)
coordinates(meuse.grid) <- ~x+y
proj4string(meuse.grid) <- CRS("+init=epsg:28992")
gridded(meuse.grid) <- TRUE

## map it
m <- mapview(meuse.grid, zcol = "dist") + meuse
m

## save it
saveWidget(m@map, file = "/path/to/file.html")

meuse 将是您的积分,meuse.grid 将是您的插值产生的网格数据。

【讨论】:

谢谢,这是我第一次使用 mapview,使用我自己的数据(lat&long 而不是 x & y)和我的 ESPG = 26191,结果是一张空地图! EPSG 应该不是问题,因为 mapview 在内部处理重投影。空地图是什么意思?没有数据?还是没有背景图?是否有机会提供您的数据(或其子集)?【参考方案2】:

另一种选择是使用传单本身使用我编写的 IDW 插件来实现所有内容:https://github.com/JoranBeaufort/Leaflet.idw 使用该插件,您仍然可以使用您的 Laravel 请求到您的数据库并返回 GeoJSON 文件,您将这些文件输入到插件中以在 Leaflet 中生成一个 IDW 层。注意:该插件仅适用于有限数量的点,因此如果您有大量点,您可以首先对点进行聚类(我建议使用 DBSCAN),然后将聚类传递给插件。希望这会有所帮助

【讨论】:

以上是关于使用 R 为 Leaflet 生成彩色地图图层的主要内容,如果未能解决你的问题,请参考以下文章

如何使用react-leaflet添加或删除图层

leaflet 中fitBounds去掉动画

leaflet加载天地图

通过sqlview动态发布地图图层

leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载)

基于Leaflet的VideoOverlay视频图层叠加实战