2015-04-06 19 views
12

Come aggiungere poligoni da Global Administrative areas, in modo che siano cliccabili.Aggiungi poligoni a R lucido leaflet map

Il modo più semplice di descrivere nel docs che ho provato è

adm <- getData('GADM', country='UKR', level=1) 
leaflet() %>% addTiles() %>% addPolygons(data=adm, weight = 3, fillColor = col) 

ma immaginate voglio una mappa volantino che avrà azioni onClick tardi.

Sulla base di SuperZip, ho bisogno di avere qualcosa di simile a

map <- createLeafletMap(session, "map") 
    session$onFlushed(once=TRUE, function() { 
    map$addPolygon(...) 
    }) 

Tuttavia, non esiste un metodo addPolygon e io sono confuso come funzionerà per SpartialPolygons.

Ho anche provato a convertirmi al geoJSON, simile a https://ropensci.org/blog/2013/10/23/style-geojson-polygon/ o questo SO question, ma facendo

polys <- fromJSON(<json data file>) 
    map <- createLeafletMap(session, "map") 
    session$onFlushed(once=TRUE, function() { 
    map$geoJson(polys) 
    }) 

dà un errore

Error in func() : attempt to apply non-function 

C'è un modo per farlo? O cosa sto sbagliando?

+0

quale azione onclick desideri avere in seguito? Popup semplici? o più? – maRtin

+0

I popup semplici vanno bene per iniziare –

risposta

7

Non sono sicuro di aver veramente capito il problema, anche se ho letto la domanda un paio di volte. Tuttavia il codice qui sotto sembra funzionare per me, in quanto può essere facilmente combinato con un semplice evento onClick, come un pop-up che mostra il nome di ciascun adm. unità:

--- 
title: "Ukraine" 
runtime: shiny 
output: html_document 
--- 

```{r, echo=FALSE, message=F, warning=F} 
library(leaflet) 
library(raster) 

adm <- getData('GADM', country='UKR', level=1) 

popup <- paste0("<strong>Name: </strong>", 
         adm$NAME_1) 

leaflet() %>% 
    addTiles() %>% 
    addPolygons(data=adm, weight = 2, fillColor = "yellow", popup=popup) 
```