2017-12-01 2 views
0

Ich habe eine Broschüre Karte, die ich in R erstellt und ich würde einen Dropdown-Filter basierend auf Felder in einer Spalte hinzufügen möchten. Der Code sieht in JS unkompliziert, siehe Beispiel hier Leaflet dropdown filter, aber ich kann nicht herausfinden, wie Sie den Code für R. einzustellenDropdown-Filter in Leaflet für R

Dank

library(leaflet.extras) 

n = c(2, 3, 5) 
long = c(102.1,102.13,102.2) 
lat = c(55,55.1,55.15) 
select_cols= c("a","b","c") 
df = data.frame(n, long, lat,select_cols) 


pal <- colorFactor(c("navy", "red","green"), domain = c("a","b","c")) 


leaflet(df)%>% addTiles()%>% 
    addCircleMarkers(lng = long,lat=lat,radius= ~n*2, 
color=~pal(select_cols),stroke=F,fillOpacity = 1) 

Hier ist der JS-Code, der ein Dropdown-Filter hinzufügt.

var legend = L.control({position: 'topright'}); 
legend.onAdd = function (map) { 
var div = L.DomUtil.create('div', 'info legend'); 
div.innerHTML = '<select><option>1</option><option>2</option>   
<option>3</option></select>'; 
div.firstChild.onmousedown = div.firstChild.ondblclick =   
L.DomEvent.stopPropagation; 
return div; 
}; 
legend.addTo(map); 

Ich weiß, wie das „show hide Schichten“ Feature hinzuzufügen, aber ich habe über 20 verschiedene Felder, und ich denke, es wäre einfacher, wenn der Benutzer das dazugehörige Feld mit einem Dropdown-Feld auswählen kann.

+0

willkommen zu R, müssen Sie ein Beispiel geben, was Sie – user5249203

+0

versucht, die Frage aktualisierten Code enthalten. – jsimpsno

Antwort

0

Falls jemand etwas Ähnliches sucht, habe ich eine Lösung gefunden, die Crosstalk verwendet. Im folgenden Code finden Sie ein Beispiel.

```{r} 
library(crosstalk) 
library(tidyverse) 
library(leaflet.extras) 

quakes <- quakes %>% 
    dplyr::mutate(mag.level = cut(mag,c(3,4,5,6), 
    labels = c('3.01-4.00', '4.01-5.00', '5.01-6.00'))) 

quakes_sd<- SharedData$new(quakes) 

map<- leaflet(quakes_sd)%>%addProviderTiles(providers$Esri.WorldTopoMap)%>%  addCircles() 

#add filter 
bscols(
filter_select("Magnitude Level", "Magnitude Level", quakes_sd, ~mag.level) 
) 

bscols(map) 
``` 
Verwandte Themen