2014-03-26 26 views
2

我試圖用rmaps http://rmaps.github.io/繪製車輛跟隨到地圖的路線。在我的理想世界,地圖應該: * *存儲和顯示的元數據(例如,當你點擊一個標記,彈出) *顯示車輛行駛的實際路徑(使用是互動(即縮放,滾動)航點之間的直線,或者甚至可能沿着道路行駛)。 *是一個閃亮的網頁是否有可能使用rMaps繪製在R A地圖上的路線?

這很容易通過rMaps來標記添加到單張地圖嵌入。我只是想知道是否可以添加其他結構,如Leaflet.js中可用的結構,例如Polyline和Polygon。如果沒有,這種功能是否計劃用於未來版本?

我已經通過rMaps代碼查看傳單:https://github.com/ramnathv/rMaps/blob/master/R/Leaflet.R 我看不到任何我認識的東西。 geoJson有一個函數,我不知道如何使用。

回答

1

爲了添加一個poligon(如圓),你應該:

  1. 轉到實際地圖的HTML頁面的位置(你應該看到在瀏覽器中的位置),然後打開它,與點擊右鍵,優選與記事本++
  2. 外表爲:

    變種地圖= 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) 

更多信息,只看到傳單API在http://leafletjs.com/reference.html

順便說一句,rmaps只是一個R和傳單的接口,如果你想創建真正的瘋狂的東西,你應該習慣打開HTML文件並從傳單API添加Java腳本代碼,泰德驚人的插件,更是僅僅增加多邊形,冷靜的例子看:

http://leafletjs.com/plugins.html

我也很喜歡這一個:

http://threatwiki.thesentinelproject.org/iranvisualization

我想補充如何rMaps的一些附加信息作品(對於rCharts也是如此)

  1. 所有那些rMaps做的,就是創建javascript代碼,地圖的構建是通過您的網頁瀏覽器來完成的,這意味着如果您將要安裝rmaps的庫並將其複製到另一臺沒有R的計算機上,那麼html文件將完美運行,這意味着您可以創建一個rMap,然後添加從不受rMaps手動支持,單張API的任何其他元素,在HTML文件中,就如同我解釋(我展示瞭如何做到這一點的「圈子」)。

  2. 對於閃亮的應用程序,你不能手動添加的東西,所以你必須確保從API的元素在rmaps的支持。爲了瞭解該API的元素的支持,首先創建一個映射:

    地圖< - 傳單$新的()

然後查看所有的「地圖」元素,並將其與傳單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添加它, 或由您自己創建一個函數, R代碼。

+0

謝謝,這是非常有用的建議。我需要學習Javascript。我還需要找出如何讓R/Shiny動態更新Javascript,但這是另一個問題。如果我找到方法,我會在這裏發佈。 – CPhil

+0

只需在HTML文件中使用傳單API,您不必學習JavaScript(儘管我的建議是這樣),但您可以在API或教程中堅持使用傳單的示例。 –

1

我一直在尋找類似的問題。有一個「leaflet-routing-machine」插件,你可以在這裏找到(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 

至少,我想,如果你在這個插件來看看它可能是有幫助的,雖然我還沒有完全想通了如何獲取路線繪製尚未!