2017-03-10 2 views
1

J'ai eu un certain succès en implémentant le paquet Leaflet dans R pour certaines données.Comment puis-je synchroniser mes deux cartes de déploiements R?

J'ai également réussi à mettre deux cartes côte à côte en tant que treillis, et en tant que synchronisation.

J'ai deux questions:

1) Sync ... ne se synchronise pas les cartes du tout

J'utilise Mapview et Raster pour tenter de synchronisation mais les deux cartes côte à côte ne pas zoom avant/arrière ensemble.

Voir le code ci-dessous:

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) 

Je suis sûr que je manque quelque chose de simple ici, mais nous espérons que quelqu'un peut me aider à voir que :)

2) Idéalement je veux une carte de brochure à chevaucher l'autre

Je veux les différencier en utilisant différents marchés pour chaque carte. J'ai essayé de rechercher ceci sur Internet et en lisant les manuels pour la brochure mais sans succès

tout conseil grandement apprécié!

+1

Quelle est la version de MapView et la notice? Récemment, il y a une mise à jour dans la brochure, qui peut affecter la fonction de synchronisation mapview. Cela a été corrigé dans la version de développement de mapview. Essayez 'devtools :: install_github (" environmentalinformatics-marburg/m apview @ develop ")' pour installer la version de développement. Voir ma question précédente: http://stackoverflow.com/questions/42640120/sync-function-in-the-r-package-only-shows-one-panel-of-map – www

+0

il est dit que j'ai besoin d'installer Rtools, mais quand j'essaie, il dit que Rtools n'est pas disponible – user1

+0

Quelle est votre version de R? Essayez de passer à la version 3.3.3 et téléchargez les dernières versions de Rtools sur ce site Web (https: //cran.r-project.org/bin/windows/Rtools /) – www

Répondre

2

1) Synchronisation deux cartes

Installation de la version de développement résolu pour moi

# 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") 

Le code je:

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) Superposition deux cartes

Vous pouvez utiliser deux trames de données distinctes en tant que sources de données et les ajouter à la même carte séparément. Changez le style de symbole pour pouvoir les différencier.

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

Si vous voulez faire quelque chose de similaire pour les marqueurs de cluster, il y a une bonne documentation sur ce here et here. Sur la base une partie du code de ces messages que j'ai créé une suggestion ci-dessous où j'utilise les styles pré-existants pour différencier les groupes de différents types:

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. rependencies, c'est un bug dans la dernière version de 'devtools', l'installation de la version 1.11.1 le corrige. –

+0

Merci pour ça! juste à travers pour s'assurer que cela fonctionne correctement dans toutes les conditions. Aussi, en essayant un simple 'clusterOptions = markerClusterOptions()' ne retourne pas un cluster pour mon icône personnalisée sur le deuxième ensemble de données – user1

+0

Salut je ne peux pas obtenir la fonction iconcreate pour travailler dessus ... j'ai réussi à superposer 2 jeux de données, et a également réussi à utiliser 2 marqueurs différents ... mais pour FILE2 je ne peux pas l'obtenir en cluster comme FILE1 ... FILE2 contient le marqueur client ajouté – user1