2017-03-10 26 views
1

對於某些數據,我在R中實現了Leaflet包,取得了一些不錯的成功。如何讓我的兩張R小冊子地圖彼此同步?

我也設法將兩張地圖並排放置成一個格子,並作爲同步。

我有兩個問題:

1)同步......在所有

不同步的地圖我使用MapviewRaster嘗試同步,但兩張圖並排不一起放大/縮小。

請參見下面的代碼:

library(leaflet) 
library(ggmap) 
library(mapview) 
library(raster) 
library(magrittr) 
UK <- ggmap::geocode("United Kingdom") 

#FILE1 <- read.csv("DATASET1.csv") 
#FILE2 <- read.csv("DATASET2.csv") 
FILE1 <- data.frame('lat' = c(51.31, 51.52, 51.53), 'lon' = c(0.06, 0.11, 0.09)) 
FILE2 <- data.frame('lat' = c(52.20, 52.25, 52.21), 'lon' = c(0.12, 0.12, 0.12)) 

map1 <- leaflet(FILE1)%>% 
    addTiles()%>% 
    addMarkers(clusterOptions = markerClusterOptions()) 

map2 <- leaflet(FILE2)%>% 
    addTiles()%>% 
    addMarkers(clusterOptions = markerClusterOptions()) 

sync(map1,map2) 

我相信我在這裏的東西簡單,但希望有人能幫助我在看到這:)

2)理想我想一個單張地圖重疊另一個

我想區分他們通過使用不同的市場爲每個地圖。我曾試圖在互聯網上進行研究,並通過閱讀傳單的手冊,但沒有成功

任何指導非常感謝!

+1

什麼是MapView類和瓣葉的版本?最近有一個更新小冊子,這可能會影響地圖視圖同步功能。這已在mapview的開發版本中得到修復。嘗試'devtools :: install_github(「environmentalinformatics-marburg/m apview @ develop」)'安裝開發版本。看到我以前的問題:http://stackoverflow.com/questions/42640120/sync-function-in-the-r-package-only-shows-one-panel-of-map – www

+0

它說我需要安裝Rtools,但是當我嘗試它說Rtools不可用 – user1

+0

R是什麼版本?嘗試升級到3.3.3並在此網站下載最新的Rtools(https://cran.r-project。org/bin/windows/Rtools /) – www

回答

2

1)正在同步兩個地圖

安裝開發版本解決了這個對我來說

# Dependencies 
# If your devtools is not the latest version 
# then you might have to install "units" manually 
install.packages('units') 
install.packages('devtools') 
library(devtools) 

devtools::install_github("environmentalinformatics-marburg/mapview", ref = "develop") 

我使用的代碼:

library(leaflet) 
library(ggmap) 
library(mapview) 
library(raster) 
library(magrittr) 
UK <- ggmap::geocode("United Kingdom") 

#FILE1 <- read.csv("DATASET1.csv") 
#FILE2 <- read.csv("DATASET2.csv") 
FILE1 <- data.frame('lat' = c(51.31, 51.52, 51.53), 'lon' = c(0.06, 0.11, 0.09)) 
FILE2 <- data.frame('lat' = c(52.20, 52.25, 52.21), 'lon' = c(0.12, 0.12, 0.12)) 

map1 <- leaflet(FILE1)%>% 
    addTiles()%>% 
    addMarkers(clusterOptions = markerClusterOptions()) 

map2 <- leaflet(FILE2)%>% 
    addTiles()%>% 
    addMarkers(clusterOptions = markerClusterOptions()) 

mapview::latticeView(map1, map2, ncol = 2, sync = list(c(1, 2)), sync.cursor = FALSE, no.initial.sync = FALSE) 
# Or: 
sync(map1, map2) 

2)疊加兩個地圖

您可以使用兩個單獨的數據框作爲數據源,並分別將它們添加到同一個映射中。更改符號樣式以便能夠區分它們。

map3 <- leaflet(FILE2)%>% 
    addTiles() %>% 
    addCircleMarkers(data = FILE1) %>% 
    addCircleMarkers(data = FILE2, 
        color = '#0FF') 
map3 

如果你想要做的集羣標記類似的東西,有對herehere一些好的文檔。基於一些從這些帖子中,我創建了下面,我使用現有的預風格的建議不同類型的集羣來區分代碼:

FILE1 <- data.frame('lat' = rnorm(n = 1000, mean = 51.4, sd = 0.5), 
        'lon' = rnorm(n = 1000, mean = 0.8, sd = 0.5)) 
FILE2 <- data.frame('lat' = rnorm(n = 1000, mean = 53, sd = 0.5), 
        'lon' = rnorm(n = 1000, mean = -0.5, sd = 0.5)) 

map3 <- leaflet(rbind(FILE1, FILE2)) %>% 
    addTiles() %>% 
    addCircleMarkers(data = FILE1, 
    color = '#FA5', 
    opacity = 1, 
    clusterOptions = markerClusterOptions(iconCreateFunction = JS("function (cluster) {  
     var childCount = cluster.getChildCount(); 
     var c = ' marker-cluster-'; 
     if (childCount < 3) { 
     c += 'large'; 
     } else if (childCount < 5) { 
     c += 'large'; 
     } else { 
     c += 'large'; 
     }  
     return new L.DivIcon({ html: '<div><span>' + childCount + '</span></div>', 
     className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) }); 

    }"))) %>% 
    addCircleMarkers(data = FILE2, 
    color = '#9D7', 
    opacity = 1, 
    clusterOptions = markerClusterOptions(iconCreateFunction = JS("function (cluster) {  
     var childCount = cluster.getChildCount(); 
     var c = ' marker-cluster-'; 
     if (childCount < 3) { 
     c += 'small'; 
     } else if (childCount < 5) { 
     c += 'small'; 
     } else { 
     c += 'small'; 
     }  
     return new L.DivIcon({ html: '<div><span>' + childCount + '</span></div>', 
     className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) }); 

    }"))) 

example map

+1

Re。它是最新的'devtools'版本中的一個錯誤,安裝版本1.11.1修復了它。 –

+0

感謝您的支持!只是努力確保在任何情況下都能正常工作。此外,嘗試一個簡單的'clusterOptions = markerClusterOptions()'沒有返回一個集羣爲我的自定義圖標在第二個數據集 – user1

+0

您好我不能得到iconcreatefunction上面工作...我設法覆蓋2數據集,並設法使用2個不同的標記......但是對於FILE2我無法將它像FILE1那樣聚集...... FILE2包含我添加的客戶標記 – user1

相關問題