是否可以使用rMaps在R中的地图上绘制路线?

时间:2014-03-26 09:44:54

标签: r map leaflet shiny polyline

我正在尝试使用rmaps http://rmaps.github.io/绘制车辆跟随地图的路线。在我的理想世界中,地图应该: *是互动的(即可缩放,可滚动) *存储和显示元数据(例如,当您点击标记时获取弹出窗口) *显示车辆行驶的实际路径(使用航点之间的直线,或甚至可能沿着道路行驶)。 *可嵌入闪亮的网页

通过rMaps将标记添加到Leaflet地图非常容易。我只是想知道是否可以添加其他结构,例如Leaflet.js中可用的结构,例如Polyline和Polygon。如果没有,是否计划在未来版本中使用此类功能?

我在这里查看了传单的rMaps代码:https://github.com/ramnathv/rMaps/blob/master/R/Leaflet.R 我没有看到任何我认出的东西。有一个geoJson函数,我不知道如何使用。

2 个答案:

答案 0 :(得分:2)

我一直在寻找同样的问题。有一个"传单路由机"你可以在这里找到的插件(https://github.com/perliedman/leaflet-routing-machine),它具有计算航点之间路线的功能。他们的演示很酷!

我一直在尝试使用rMaps和这个传单插件绘制两个位置之间的路线。我仍在努力让我的代码工作(我想我错过了一些东西),但这是它到目前为止的样子。

library(rMaps)
library(leaflet)

map = Leaflet$new()
map$setView(c(50.6067, 3.6254), 6)
map$tileLayer(provider="MapQuestOpen.OSM")
map$marker(c(48.8588,2.3469), bindPopup = 'Pickup Location')
map$marker(c(52.3546,4.9039), bindPopup = 'Dropoff Location')
map

map$addAssets(jshead = c("leaflet-routing-machine.min.js"))
map$setTemplate(afterScript = sprintf("
   <script>
   L.Routing.control({
       waypoints: [
           L.latLng(48.8588,2.3469),
           L.latLng(52.3546,4.9039)
       ],
       geocoder: L.Control.Geocoder.nominatim(),
       plan: L.Routing.plan(null, {
           waypointIcon: function(i) {
                return new L.Icon.Label.Default({ labelText: String.fromCharCode(65 + i)});
           }
       })
   }).addTo(map);
   </script>
 "))
map

至少,我认为如果你看看这个插件可能会有所帮助,虽然我还没有完全弄清楚如何绘制路线!!

答案 1 :(得分:1)

为了添加poligon(例如圆圈),你应该:

  1. 转到实际地图的html页面的位置(您应该在浏览器中看到该位置)并打开它,右键单击,最好使用notepad ++
  2. 寻找:

    var map = L.map(spec.dom,{     fullscreenControl:是的   })。setView(spec.center,spec.zoom);

    if (spec.provider){
      L.tileLayer.provider(spec.provider).addTo(map)    
    } else {
    L.tileLayer(spec.urlTemplate, spec.layerOpts).addTo(map)
    }
    
  3. 之后,您可以使用以下代码添加一个漂亮的圆圈,(别忘了保存文件):

    L.circle([29.7601927,-95.3693896],7200,{color:'red'}).addTo(map).bindPopup('some thing').addTo(map)
    

    了解更多信息,请参阅http://leafletjs.com/reference.html

    中的传单API 不过,rmaps只是R和传单的一个接口,如果你想创建真正疯狂的东西,你应该习惯打开html文件并从传单API添加java脚本代码,人们创建了惊人的插件,更多只是添加多边形,例如:

    http://leafletjs.com/plugins.html

    我也非常喜欢这个:

    http://threatwiki.thesentinelproject.org/iranvisualization

    只是添加一些关于rMaps如何工作的其他信息(rCharts也是如此)

    1. 所有rMaps都是创建javascript代码,地图的构建是由您的web浏览器完成的,这意味着如果您将去安装rmaps的库并将其复制到另一台计算机没有R,html文件将完美运行,这意味着您可以创建一个rMap,然后在html文件中手动添加rMaps不支持的传单API中的任何其他元素,就像我解释的那样(我展示了如何为“圈子”做这件事。

    2. 对于闪亮的应用,您无法手动添加内容,因此您必须确保在rmaps中支持API中的元素。为了了解支持API的哪些元素,首先要创建一个地图:

      map&lt; - Leaflet $ new()

    3. 然后查看“map”的所有元素,并将其与传单API进行比较。  例如,您可以在API中找到的标记创建命令:

      http://leafletjs.com/reference.html#marker(来自传单API),由以下人员创建:

      L.marker([51.5, -0.09]).bindPopup('Hi. I am a popup').addTo(map);
      

      在rMaps中具有等价物:

      map$marker(
        c(51.5, -0.09),
        bindPopup = 'Hi. I am a popup'
      )
      

      只需逐步浏览您感兴趣的传单API中的每个元素,如果它不存在,那么您可以在Github中请求ramnath添加它https://github.com/ramnathv/rMaps/pulls, 或者自己创建一个在R代码中执行该功能的函数。