2016-04-07 3 views
7

При построении маркеров на интерактивной карте из данных листовки r с точно такими же координатами будут перекрываться друг с другом.Несколько маркеров на одной и той же координате

Смотрите пример ниже:

library(leaflet) 

Data <- structure(list(Name = structure(1:3, .Label = c("M1", "M2", "M3"), class = "factor"), Latitude = c(52L, 52L, 51L), Longitude = c(50L, 50L, 50L), Altitude = c(97L, 97L, 108L)), .Names = c("Name", "Latitude", "Longitude", "Altitude"), class = "data.frame", row.names = c(NA, -3L)) 

leaflet(data = Data) %>% 
       addProviderTiles("Esri.WorldImagery", options = providerTileOptions(noWrap = TRUE)) %>% 
       addMarkers(~Longitude, ~Latitude, popup = ~as.character(paste(sep = "", 
                      "<b>",Name,"</b>","<br/>", "Altitude: ",Altitude))) 

Там является possibilty показать все координаты с опцией кластера, но это далеко от своей цели. Я не хочу кластеров, и только ползучие маркеры отображаются, когда они полностью увеличены. Когда полностью увеличена фоновая карта, она становится серой («Данные карты пока недоступны»). Вид паука перекрывающихся маркеров, что я хочу, но не тогда, когда полностью увеличено

См пример ниже:.

leaflet(data = Data) %>% 
    addProviderTiles("Esri.WorldImagery", options = providerTileOptions(noWrap = TRUE)) %>% 
    addMarkers(~Longitude, ~Latitude, popup = ~as.character(paste(sep = "", 
                   "<b>",Name,"</b>","<br/>", "Altitude: ",Altitude)), clusterOptions = markerClusterOptions()) 

Я нашел Literatur о решении я хочу, но я не знаю, как реализовать это в r буклет-код/​​пакет. https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet

Также, если есть другие подходы к обработке перекрывающих маркеров, не стесняйтесь отвечать. (Например, информация несколько маркеров в одном всплывающем окне)

ответ

9

Вы можете немного jitter() свои координаты:

library(mapview) 
library(sp) 

Data <- structure(list(Name = structure(1:3, .Label = c("M1", "M2", "M3"), 
             class = "factor"), 
         Latitude = c(52L, 52L, 51L), 
         Longitude = c(50L, 50L, 50L), 
         Altitude = c(97L, 97L, 108L)), 
        .Names = c("Name", "Latitude", "Longitude", "Altitude"), 
        class = "data.frame", row.names = c(NA, -3L)) 

Data$lat <- jitter(Data$Latitude, factor = 0.0001) 
Data$lon <- jitter(Data$Longitude, factor = 0.0001) 

coordinates(Data) <- ~ lon + lat 
proj4string(Data) <- "+init=epsg:4326" 

mapview(Data) 

Таким образом, вы все еще нужно увеличить для маркеров, чтобы отделить, как далеко вы должны увеличить зависит по атрибуту factor в jitter().

Обратите внимание, что я использую library(mapview) в примере для простоты.

Смежные вопросы