我正在尝试使用rmaps http://rmaps.github.io/绘制车辆跟随地图的路线。在我的理想世界中,地图应该: *是互动的(即可缩放,可滚动) *存储和显示元数据(例如,当您点击标记时获取弹出窗口) *显示车辆行驶的实际路径(使用航点之间的直线,或甚至可能沿着道路行驶)。 *可嵌入闪亮的网页
通过rMaps将标记添加到Leaflet地图非常容易。我只是想知道是否可以添加其他结构,例如Leaflet.js中可用的结构,例如Polyline和Polygon。如果没有,是否计划在未来版本中使用此类功能?
我在这里查看了传单的rMaps代码:https://github.com/ramnathv/rMaps/blob/master/R/Leaflet.R 我没有看到任何我认出的东西。有一个geoJson函数,我不知道如何使用。
答案 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(例如圆圈),你应该:
寻找:
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)
}
之后,您可以使用以下代码添加一个漂亮的圆圈,(别忘了保存文件):
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也是如此)
所有rMaps都是创建javascript代码,地图的构建是由您的web浏览器完成的,这意味着如果您将去安装rmaps的库并将其复制到另一台计算机没有R,html文件将完美运行,这意味着您可以创建一个rMap,然后在html文件中手动添加rMaps不支持的传单API中的任何其他元素,就像我解释的那样(我展示了如何为“圈子”做这件事。
对于闪亮的应用,您无法手动添加内容,因此您必须确保在rmaps中支持API中的元素。为了了解支持API的哪些元素,首先要创建一个地图:
map&lt; - Leaflet $ new()
然后查看“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代码中执行该功能的函数。