如何访问R中由传单生成的地图

时间:2015-05-19 21:11:13

标签: r leaflet

假设我有一个像这样的代码

# Install devtools if needed
if(!require(devtools)) install.packages("devtools")
# view rawif-devtools.R hosted with ❤ by GitHub
# Install leaflet package
if(!require(leaflet)) install_github("rstudio/leaflet")
library("leaflet")
mymap <- leaflet()
mymap <- addTiles(mymap)
mymap

这会在Chrome中打开,文件路径如下:

file:///var/folders/8x/v2tk5zy51x51jx9jbp0m29qr0000gn/T/RtmpQaeu1E/viewhtmlf74547061f7d/index.html. 

假设我想将此内容发布到我的博客中。我究竟如何访问这个html文件?有没有办法设置保存到哪里?我以为它会被保存到工作目录但事实并非如此。我想我可以通过终端访问它,但我希望有一种更简单的方法。

4 个答案:

答案 0 :(得分:16)

我开发了一些函数,可以将传单映射保存在临时文件夹以外的其他位置。

请参阅此处的要点:https://gist.github.com/barryrowlingson/d066a7ace15cf119681a获取完整信息,简短版本是这两个功能:

saveas <- function(map, file){
    class(map) <- c("saveas",class(map))
    attr(map,"filesave")=file
    map
}

print.saveas <- function(x, ...){
    class(x) = class(x)[class(x)!="saveas"]
    htmltools::save_html(x, file=attr(x,"filesave"))
}

然后你所做的就是:

leaflet() %>% etc etc %>% saveas("/wherever/you/want/index.html")

或以您的工作方式:

mymap <- leaflet()
mymap <- addwhatever(mymap)
saveas(mymap, "/wherever/you/want/index.html")

此时,文件夹/wherever/you/want应该有一组自包含的地图文件。我认为它应该是可移植的,即在任何Web服务器上工作,但我无法保证......

答案 1 :(得分:11)

迟到的回复:

library(leaflet)
mymap <- leaflet() %>%
  addTiles()
library(htmlwidgets)
saveWidget(widget = mymap, file = "/wherever/you/want/mymap.html")

埃纳尔

答案 2 :(得分:3)

在chrome(或任何其他浏览器)中打开地图后,您只需转到Dim rng as range set rng=range("D4:K57") rng.select' or whatever you want to do with it ,然后将.html页面保存到用户定义名称下的目标目录中。 (或者只需在Mac上按"File -> Save as"或在Windows上按cmd + s。) 这通常是我使用R或Rmarkdown创建网页时所做的。

当然,您也可以点击&#34;发布&#34;将文件上传到Rpubs.com。按钮,当您使用Rmarkdown创建地图时。从那里您可以通过提供的链接轻松访问它。

答案 3 :(得分:1)

当我尝试安装名为&#34; leaflet&#34;的软件包时,带有CRAN的对话框只显示名为leafletR的软件包。安装和加载该包确实成功,并向控制台发送消息:

 Your leaflet map has been saved under /Users/myuser_name/map/map.html

该地图具有所需的功能。鉴于我可以从网络浏览器访问的信息量,我猜测我实际上是通过Chrome连接到OpenStreetMap服务器而不是与磁盘文件数据服务进行交互。

从CRAN下载的版本中没有addTiles功能。并且使用sos :: findFn在任何其他包中都找不到它。这可能是仅在github版本中可用的新功能: https://github.com/chgrl/leafletR

进一步搜索显示此内容仅在RStudio上托管,而不在CRAN上托管:http://robinlovelace.net/r/2015/02/01/leaflet-r-package.html

我需要一个新的会话,因为我遇到了错误,我怀疑这是因为同时加载了传单和leafletR。在我的浏览器中,我左键单击以显示ViewSource窗口,然后选择并复制到下面。 Chrome和Firefox都能够显示底层代码并支持选择和复制到编辑器。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="lib/htmlwidgets-0.3.2/htmlwidgets.js"></script>
<script src="lib/jquery-1.11.1/jquery.min.js"></script>
<link href="lib/leaflet-0.7.3/leaflet.css" rel="stylesheet" />
<script src="lib/leaflet-0.7.3/leaflet.js"></script>
<link href="lib/leafletfix-1.0.0/leafletfix.css" rel="stylesheet" />
<script src="lib/leaflet-binding-0.0.16/leaflet.js"></script>

</head>
<body style="background-color:white;">
<div id="htmlwidget_container">
  <div id="htmlwidget-3689" style="width:100%;height:400px;" class="leaflet"></div>
</div>
<script type="application/json" data-for="htmlwidget-3689">{ "x": {
 "calls": [
 {
 "method": "addTiles",
"args": [
 "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
null,
{
 "minZoom":                 0,
"maxZoom":                18,
"maxNativeZoom": null,
"tileSize":               256,
"subdomains": "abc",
"errorTileUrl": "",
"tms": false,
"continuousWorld": false,
"noWrap": false,
"zoomOffset":                 0,
"zoomReverse": false,
"opacity":                 1,
"zIndex": null,
"unloadInvisibleTiles": null,
"updateWhenIdle": null,
"detectRetina": false,
"reuseTiles": false,
"attribution": "&copy; <a href=\"http://openstreetmap.org\">OpenStreetMap</a> contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>" 
} 
] 
} 
] 
},"evals": [  ] }</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-3689">{ "viewer": {
 "width": "100%",
"height":               400,
"padding":                 0,
"fill": true 
},"browser": {
 "width": "100%",
"height":               400,
"padding":                 0,
"fill": true 
} }</script>
</body>
</html>

仅靠代码是不够的。其余所需的支持文件将保存在与html文件和浏览器同名的目录中,并保存为#34;另存为...&#34;功能最适合:

enter image description here