2016-04-07 9 views
7

Quando si stampano i contrassegni su una worlmap interattiva dai dati del foglio illustrativo r con esattamente le stesse coordinate si sovrappongono l'un l'altro.Marcatori multipli sulla stessa coordinata

vedere l'esempio di seguito:

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

C'è un possibilty per mostrare tutte le coordinate con l'opzione cluster, ma questo è lontano dal mio obiettivo. Non desidero cluster e solo i Marker sovrapposti vengono mostrati quando sono completamente ingranditi. Una volta ingrandito, la mappa dello sfondo diventa grigia ("Dati mappa non ancora disponibili"). La vista ragno dei marcatori sovrapposti è quello che voglio, ma non a pieno zoom in

vedi esempio sotto:.

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

ho trovato alcuni literatur circa la soluzione che voglio, ma io non so come implementare nel codice/pacchetto del volantino. https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet

Anche se ci sono altri approcci per gestire i Marcatori sovrapposti, sentitevi liberi di rispondere. (Per esempio più Marcatori informazioni in una popup)

risposta

9

Si potrebbe jitter() vostre coordinate leggermente:

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) 

In questo modo è comunque necessario per ingrandire per i marcatori per separare, quanto è necessario per ingrandire dipende sull'attributo factor in jitter().

Nota che sto utilizzando library(mapview) nell'esempio per semplicità.