Как я могу синхронизировать две мои карты буклетов R друг с другом?

У меня был хороший успех в реализации пакета Leaflet в R для некоторых данных.

Мне также удалось поставить две карты рядом, как решетку, и как синхронизацию.

У меня есть две проблемы:

1) Синхронизация... карты вообще не синхронизируются

Я использую Mapview и Raster для попытки синхронизации, но две карты рядом не увеличиваются/уменьшаются одновременно.

См. код ниже:

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) В идеале я хочу, чтобы одна карта буклета перекрывала другую

Я хочу различать их, используя разные рынки для каждой карты. Я пытался исследовать это в Интернете и читать руководства для брошюры, но безуспешно.

Любое руководство высоко ценится!


person user1    schedule 10.03.2017    source источник
comment
Какая версия mapview и листовки? Недавно в буклете появилось обновление, которое может повлиять на функцию синхронизации карты. Это было исправлено в разрабатываемой версии mapview. Попробуйте devtools::install_github("environmentalinformatics-marburg/m‌​apview@develop") установить разрабатываемую версию. См. мой предыдущий вопрос: stackoverflow.com/questions/42640120/   -  person www    schedule 10.03.2017
comment
пишет, что мне нужно установить Rtools, но когда я пытаюсь, он говорит, что Rtools недоступен   -  person user1    schedule 10.03.2017
comment
Какая у вас версия R? Попробуйте обновиться до версии 3.3.3 и загрузить последнюю версию Rtools с этого веб-сайта (cran.r -project.org/bin/windows/Rtools)   -  person www    schedule 10.03.2017
comment
Я использую RStudio, а не сам R. Я скачал RTools только что   -  person user1    schedule 10.03.2017
comment
Вы не можете использовать RStudio без R,...   -  person Tonio Liebrand    schedule 10.03.2017
comment
У меня конечно R, но я все делаю в RStudio...   -  person user1    schedule 10.03.2017
comment
Rtools не является пакетом. Вам необходимо скачать и установить отсюда cran.r-project.org/bin/windows /Rtools   -  person TimSalabim    schedule 11.03.2017
comment
@TimSalabim да скачал!   -  person user1    schedule 11.03.2017
comment
Тогда devtools::install_github("environmentalinformatics-marburg/m‌​‌​apview@develop") должно работать   -  person TimSalabim    schedule 11.03.2017
comment
Пробовал, это не сработало. попробую еще раз в понедельник   -  person user1    schedule 11.03.2017
comment
привет, поздний ответ, но только что попробовал еще раз, и он не работает   -  person user1    schedule 28.03.2017
comment
Не могли бы вы предоставить образец того, что находится в FILE1 и FILE2? Одним из способов было бы сгенерировать некоторые игрушечные данные а-ля data.frame('lat' = c(51.1, 49.9, 51.0), 'lon' = c(0.1, 0.3, 0.5)). Другой вариант — запустить dput(FILE1) и скопировать вывод сюда.   -  person JanLauGe    schedule 29.03.2017
comment
Я взял на себя смелость добавить некоторые игровые данные на данный момент. Не стесняйтесь изменить его на что-то более обширное.   -  person JanLauGe    schedule 29.03.2017
comment
файл буквально содержит только широту и долготу, ничего больше   -  person user1    schedule 29.03.2017
comment
сначала попробует ваши образцы данных и сообщит   -  person user1    schedule 29.03.2017
comment
@JanLauGe только что протестировал его с вашими образцами данных ... все еще не синхронизирует обе карты ...   -  person user1    schedule 29.03.2017
comment
Да, примеры данных в основном просто облегчают нам жизнь :)   -  person JanLauGe    schedule 29.03.2017


Ответы (1)


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

Если вы хотите сделать что-то подобное для маркеров кластера, есть хорошая документация по этому вопросу. окраска-кластеров">здесь и здесь. Основываясь на части кода из этих сообщений, я создал предложение ниже, в котором я использую уже существующие стили, чтобы различать кластеры разных типов:

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) });
  
    }")))

пример карты

person JanLauGe    schedule 29.03.2017
comment
Ре. зависимости, это ошибка в новейшей версии devtools, установка версии 1.11.1 исправляет ее. - person m-dz; 29.03.2017
comment
Спасибо за это! просто работаю над тем, чтобы убедиться, что это работает правильно при любых условиях. Кроме того, попытка простого clusterOptions=markerClusterOptions() не возвращает кластер для моего пользовательского значка во втором наборе данных. - person user1; 29.03.2017
comment
Привет, я не могу заставить функцию iconcreate работать выше... мне удалось наложить 2 набора данных, а также удалось использовать 2 разных маркера... но для FILE2 я не могу получить его в кластере, таком как FILE1... FILE2 содержит маркер клиента я добавил - person user1; 30.03.2017
comment
Не могли бы вы обновить часть 2) вашего вопроса воспроизводимым примером, пожалуйста? - person JanLauGe; 30.03.2017
comment
Привет, извините, завтра будет немного времени, чтобы попробовать еще раз. Несмотря на это, я все равно приму ваш ответ, поскольку я достиг того, к чему стремился, материал выше в комментариях является более вспомогательным. - person user1; 03.04.2017