leaflet在線地圖進階寶典之——高級輔助特性

本文跟大家分享leaflet在線地圖的高級附加屬性,這些屬性通常來講僅僅作為我們數據額可視化項目的修飾元素,而並不會影響數據元素。

但是有了這些輔助修飾元素,往往可以使你的數據可視化項目變得更具人性化。

本文內容根據leaflet的官方主頁(R語言介面)翻譯而來:

附加屬性:

測度工具:Leaflet Measure

###增加該工具可以輕而易舉的讓你在可視化地圖中通過滑鼠打點,測量兩點之間的距離,如果是閉合區域,則可以直接計算閉合區域的真實面積。

網格線:Graticule

### 網格線可以提供平面坐標系下地理空間的經緯度位置參考線。

晝夜分界線:Terminator (day/night indicator)

###晝夜分界線可以提供一天中不同地區的晝夜分界狀況。

mini小地圖:Minimap

mini窗口小地圖可以提供定位窗口,讓你知道主版面中位置在更大範圍地理區域上的大致方位,就相當於遊戲中的mini導航圖。

輔助按鈕:EasyButton

輔助按鈕可以提供一鍵初始化比例尺,一鍵定位功能。

自定義js屬性:Custom JavaScript with htmlwidgets::onRender

你可以利用leaflet與HTML的介面工具對地圖版面進行更加豐富的屬性設置。

測度工具:Leaflet Measure

library(leaflet)nm<-leaflet()%>%addTiles()nm %>%fitBounds(-73.9,40.75,-73.95,40.8) %>%addMeasure()n

右上側的小彈窗打開之後選擇創建測距選項,就可以通過滑鼠打點兒,測量兩點之間的地理距離,如果是三個以上的點,則會測量出閉合多邊形區域的面積。

m %>%n fitBounds(13.76134, 52.675499, 13.0884, 52.33812) %>% #設定版面呈現的地理區域範圍n addMeasure(n position = "bottomleft", #測距菜單位置n primaryLengthUnit = "meters", #測量的點距離輸出單位n primaryAreaUnit = "sqmeters", #測量的閉合多邊形區域面積輸出單位n activeColor = "#3D535D", #n completedColor = "#7D4479")n

網格線:Graticule

leaflet() %>% addTiles() %>% setView(0,0,2) %>% addGraticule()n

leaflet() %>% addTiles() %>% setView(0,0,2) %>% naddGraticule(interval = 10, style = list(color = "#FF0000", weight = 1))n

而且網格線系統是可控元素,控制方式就是將其當成一個單獨的圖層,然後分組。

leaflet() %>% addTiles() %>% setView(0,0,2) %>%n addGraticule(group = "Graticule") %>%n addLayersControl(overlayGroups = c("Graticule"),options=layersControlOptions(collapsed = FALSE))n

晝夜分界線:Terminator (day/night indicator)

leaflet() %>% addTiles() %>% addTerminator()n

晝夜分界線支持自定義日期和分組功能:

leaflet() %>%n addTiles() %>%n addTerminator(n resolution=10,n time = "2013-06-20T21:00:00Z",n group = "daylight") %>%n addLayersControl(n overlayGroups = "daylight",n options = layersControlOptions(collapsed = FALSE))n

mini導航地圖:Minimap

leaflet() %>% setView(0,0,3) %>%n addProviderTiles(providers$Esri.WorldStreetMap) %>%n addMiniMap()n

mini導航地圖中的地圖背景也是支持自定義的:

leaflet() %>% setView(0,0,3) %>%n addProviderTiles(providers$Esri.WorldStreetMap) %>%n addMiniMap(tiles = providers$Esri.WorldStreetMap,toggleDisplay = TRUE)n

輔助工具菜單:

library(htmltools)nlibrary(htmlwidgets)nleaflet() %>% addTiles() %>%n addEasyButton(easyButton( #添加一鍵恢復初始窗口比利時n icon="fa-globe", title="Zoom to Level 1",n onClick=JS("function(btn, map){ map.setZoom(1); }"))) %>%n addEasyButton(easyButton( #添加一鍵定位功能(根據你的所在位置)n icon="fa-crosshairs", title="Locate Me",n onClick=JS("function(btn, map){ map.locate({setView: true}); }")))n

以下代碼展示了如何通過調用js工具控制項來通過打開菜單工具開啟地圖上的點聚合功能,同時關閉菜單工具按鈕,關閉點聚合功能。

leaflet() %>% addTiles() %>%n addMarkers(data=quakes,n clusterOptions = markerClusterOptions(),n clusterId = "quakesCluster") %>%n addEasyButton(easyButton(n states = list(n easyButtonState( #狀態1:打開菜單,開啟點聚合n stateName="unfrozen-markers",n icon="ion-toggle",n title="Freeze Clusters",n onClick = JS("n function(btn,map) {n var clusterManager =n map.layerManager.getLayer(cluster, quakesCluster);n clusterManager.freezeAtZoom();n btn.state(frozen-markers);n }")n ),n easyButtonState( #狀態2:關閉菜單,結束點聚合功能n stateName="frozen-markers",n icon="ion-toggle-filled",n title="UnFreeze Clusters",n onClick = JS("n function(btn, map) {n var clusterManager =n map.layerManager.getLayer(cluster, quakesCluster);n clusterManager.unfreeze();n btn.state(unfrozen-markers);n }")n )n )n ))n

自定義js屬性:Custom JavaScript with htmlwidgets::onRender

基礎圖層會根據導航窗內的圖層風格改變而隨之轉換:

mymap<-leaflet() %>% setView(0,0,3)nesri <- grep("^Esri", providers, value = TRUE)n

for (provider in esri) {

mymap <-mymap %>% addProviderTiles(provider, group = provider)

}

mymap %>%n addLayersControl(baseGroups = names(esri),n options = layersControlOptions(collapsed = FALSE)) %>%n addMiniMap(tiles = esri[[1]], toggleDisplay = TRUE,n position = "bottomleft") %>%n htmlwidgets::onRender("n function(el, x) {n var myMap = this;n myMap.on(baselayerchange,n function (e) {n myMap.minimap.changeLayer(L.tileLayer.provider(e.name));n })n }")n

聯繫方式:

微信:ljty1991

博客主頁:raindus home

個人公眾號:數據小魔方(datamofang)

團隊公眾號:EasyCharts

qq交流群:[魔方學院]553270834


推薦閱讀:

DataHunter:數據可視化,打通產業鏈最後一公里
我們為什麼要做數據可視化?數據可視化的真善美是什麼?
【深入淺出數據可視化 01】關於入門這件小事兒
今天你數據,可視化了么?

TAG:R编程语言 | 数据可视化 | 地图 |