首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将leaflet地图从R输出为可使用Leaflet命令进行编辑的格式?

如何将leaflet地图从R输出为可使用Leaflet命令进行编辑的格式?
EN

Stack Overflow用户
提问于 2017-07-06 07:24:16
回答 1查看 771关注 0票数 0

我在使用R进行数据操作和使用GIS软件制作地图方面有一些经验,所以我只是尝试使用Leaflet for R包来制作我的第一张小叶地图。在完成了教程之后,我已经能够很好地做到这一点,但我想对我的最终地图做一些微调,这些微调似乎可以使用“regular Leaflet”,而不是R包(只在自定义地图窗格中使用平铺标签层,以便地理标签显示在我的多边形上方,等等)。这很好,只是我不知道在地图的输出文件中的什么地方可以使用Leaflet语法进行必要的编辑。

我正在使用以下代码based off this example导出我的地图

代码语言:javascript
复制
saveWidget(myMap, 'myMap.html', selfcontained = FALSE)    

我对HTML输出不是很熟悉;我在QGIS中制作过地图,并将其导出为HTML文件,但我从来不需要编辑源代码。我正在寻找一个文件,我可以在其中添加单叶命令。index.html文件似乎是唯一包含特定于我的地图的信息的文件,其他文件包含index.html文件为了显示地图而引用的代码。我以为这是用Leaflet命令编辑代码的地方,但它看起来一点也不像我见过的Leaflet地图代码示例。我没有在这里包含完整的index.html文件,因为它太长了,但它看起来一点也不像叶子脚本here。没有var =L.tileLayer, L.polygon等。我看不到地图对象,只有坐标。

我假设的情况是,当我使用HTML输出Leaflet地图时,R被转换成Leaflet,然后再被转换成我在index.html文件中看到的基本Javascript。所以首先,我想知道这是否准确。

如果它是准确的,我的问题是:有没有一种方法可以将地图从R输出到Leaflet命令中,而不仅仅是Javascript?

如果不准确,我的问题是:我可以使用Leaflet编辑我现在地图输出文件夹中的文件吗?(我可能误解了Leaflet-它是一个自定义命令库,与典型的Javascript不同,对吧?)

如果这是一个非常基本的问题,我提前道歉,我在这里绝对是一个新手。

编辑:这是我的地图的HTML文件的图像。我假设这都是基本的Javascript (或者甚至是简化的Javascript?)如果我想进一步调整地图,我必须在这里参考宣传单的源代码。除非有一种方法可以在第一个回复中提到的htmlwidgets::onRender命令中引用Leaflet库,然后我可以在其中编写Leaflet。

HTML file for map

EN

回答 1

Stack Overflow用户

发布于 2017-07-06 19:27:18

实际上,leaflet htmlwidget完成了您在幕后所描述的工作。它不使用直接的leaflet命令,而是使用定义的here方法来操作地图,如下面的截图所示。

来自R的呼叫

来自R的调用存储在map$x$calls上。让我们使用?leaflet中的一些代码来制作一个快速映射,这样我们就可以看到发生了什么。

代码语言:javascript
复制
# from ?leaflet
library(leaflet)

rand_lng = function(n = 10) rnorm(n, -93.65, .01)
rand_lat = function(n = 10) rnorm(n, 42.0285, .01)

m = leaflet() %>%
  addTiles() %>%
  fitBounds(0, 40, 10, 50) %>%
  setView(-93.65, 42.0285, zoom = 17) %>% 
  addPopups(
    -93.65, 42.0285, 'Here is the <b>Department of Statistics</b>, ISU'
  ) %>%
  clearBounds()

m$x$calls

或者更图形化地看起来像这样(参见here for live example)。

这些调用在创建leaflet小部件时作为JSON发送。这种方法为处理leaflet提供了许多辅助工具,对于不熟悉leaflet或JavaScript的R用户尤其有用。然而,这一中间步骤可能会使您试图完成的任务变得稍微困难一些。

onRender

如果我没理解错的话,htmlwidgets::onRender()可能会做你想做的事情。让我们来看看它的实际效果。

代码语言:javascript
复制
htmlwidgets::onRender(
  m,
  "
  function(el, x, data) {
    // our leaflet map is available as this
    console.log(this);
  }
  "
)

如果您在浏览器中打开地图并使用开发人员工具(ctrl + shift + i)进行检查,您将看到可以进一步操作小叶地图。

跟进

我希望这对你有所帮助。如果你有更多的问题,请让我知道,我很乐意帮助你回答。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44937476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档