在R Leaflet地图上叠加图片

7

我有一张 .PNG 图像,它本质上是光栅图形,但不是光栅格式。这些图像是提供给我的,否则我将生成光栅并避免此问题。

我想在R中的leaflet底图上叠加该图像。图像叠加只是为了让用户在周围绘制一个边界框,并查询数据库以获取在该区域生成光栅的原始数据。

在Python的Leaflet实现中,可以通过这种方式实现图像叠加。

center = [0,0]
zoom = 2

m = Map(center=center, zoom=zoom)
layer = ImageOverlay(url="filename.png", bounds=(( min_lat, min_lon), 
                                             (max_lat, max_lon)))
m.add_layer(layer)
return m

目前看来,在R中要做到这一点,我需要一个栅格对象,然后使用addRasterImage(),它似乎将栅格转换为RGB图像,然后将其覆盖在leaflet地图上。我有一张图片,只想将其作为图层添加,而不是需要一个栅格格式。谢谢。

1个回答

5
如果您需要附加图像,并且不需要更改其bbox或source,则应该能够使用htmlwidgets来访问本机leaflet.js进行操作:
htmlwidget :: onRender函数可用于使用本机JavaScript向叶片地图添加自定义行为。这是一种相当高级的用例,需要您了解JavaScript。使用onRender,您可以使用Leaflet.js文档中定义的任何API自定义地图的行为。(来自leaflet r documentation
这样可以通过显示更广泛的本机功能来获得更大的灵活性。添加图像覆盖很简单(example),类似于python实现。从r和js文档版本采用的简单示例可能如下:
library(leaflet)

m <- leaflet() %>%
  addTiles() %>%  # Add default OpenStreetMap map tiles
  addMarkers(lng=-74.22655, lat=40.712216, popup="Bottom Right Corner") %>%
  htmlwidgets::onRender("
      function(el, x) {
        console.log(this);
        var myMap = this;
        var imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg';
        var imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];

        L.imageOverlay(imageUrl, imageBounds).addTo(myMap);
      }
      ")
m  # Print the map

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