2016-04-07 19 views
7

Podczas wykreślania znaczników na interaktywnej worlmap z danych zawartych w ulotce pakietu z dokładnie tymi samymi współrzędnymi będą się nakładały na siebie.Wiele znaczników na tej samej współrzędnej

Zobacz poniższy przykład:

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

Jest possibilty pokazać wszystko koordynuje z opcją klastra, ale jest daleko od mojego celu. Nie chcę klastrów i pokazuję tylko nakładające się znaczniki przy pełnym powiększeniu. Po pełnym powiększeniu mapa tła zmienia kolor na szary ("Dane mapy jeszcze nie są dostępne"). Widok pająk z nakładającymi markerów jest to, co chcę, ale nie wtedy, gdy w pełni powiększony

patrz przykład poniżej.

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()) 

znalazłem trochę Literatur o rozwiązanie czego chcę, ale nie wiem jak zaimplementować w kodzie/pakiecie z ulotką. https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet

Również jeśli istnieją inne podejścia do obsługi nakładających się markerów, odpowiedz na nie. (Na przykład wielokrotne Markery informacji w jednym popup)

Odpowiedz

9

Można jitter() współrzędne nieznacznie:

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) 

ten sposób jeszcze potrzeba, aby powiększyć do markerów do oddzielnego, ile trzeba, aby powiększyć zależy na atrybucie factor w jitter().

Należy zauważyć, że używam library(mapview) w przykładzie dla uproszczenia.