2017-02-18 3 views
2

Ich versuche, leaflet Popups in R, mit dem leaflet Paket feinere Kontrolle zu bekommen. Der Code für einen MWE ist unter:Getting feinere Kontrolle von Prospekt Popups in r

library(dplyr) 
library(magrittr) 
library(leaflet) 

download.file(
    url = "http://biogeo.ucdavis.edu/data/gadm2.8/rds/GBR_adm1.rds", 
    destfile = "GBR_adm1.rds", 
    method = "curl" 
) 

shp_gbr <- readRDS("GBR_adm1.rds") 

# get centroids for placing popups in second map 
shp_gbr_centers <- 
    rgeos::gCentroid(shp_gbr, byid = TRUE) %>% 
    sp::SpatialPointsDataFrame([email protected], match.ID = FALSE) 

[email protected] %<>% 
    left_join(shp_gbr_centers[1], by = 'OBJECTID', copy = TRUE) %>% 
    rename(lat = y, lng = x) %>% 
    select(NAME_1, lat, lng) %>% 
    mutate(text = ProgGUIinR::LoremIpsum) 

popup <- paste("<b><h3>", shp_gbr$NAME_1, "</h3></b>", shp_gbr$text) 

shp_gbr %>% 
    leaflet() %>% 
    addPolygons(popup = ~popup) 

Dieses eine schöne Karte mit Pop-ups gibt, die auf Klick in den Bereichen der vier Länder erscheinen, aber in diesem Fall ist der Text ist zu viel für das Pop-up schön zu handhaben :

enter image description here

Was Ich mag würde, ist ein Teil der popupOptions verfügbar über die addPopups Funktion, in diesem Fall für den Zugriff auf das Popup breiter zu machen und eine Bildlaufleiste angezeigt. Ein Beispiel hierfür ist unter:

shp_gbr %>% 
    leaflet() %>% 
    addPolygons() %>% 
    addPopups(
    data = [email protected], 
    popup = ~popup, 
    options = 
     popupOptions(
     maxWidth = 600, 
     maxHeight = 100 
    ) 
) 

Allerdings sind die Pop-ups nun eingestellt offen auf Start zu sein, anstatt erscheinen innerhalb der Grenzen zu klicken, und Sie wieder öffnen nicht auf Klick geschlossen einmal:

enter image description here

Meine Frage ist, wie Sie diese Elemente kombinieren, so dass Sie beispielsweise eine Bildlaufleiste für zu viel Text innerhalb einer Map haben könnten, wie im ersten Beispiel, wo die Popups standardmäßig geschlossen sind, aber beim Klick geöffnet sind.

+0

Sieht aus wie ein Überstand von, wie es in JavaScript funktioniert. Eine Problemumgehung besteht darin, mit Ihrem Popup-HTML einfach etwas intensiver zu werden und CSS über Stilattribute hinzuzufügen, um die Größenanpassung zu steuern. – alistaire

+0

@alistaire Ja, du magst da sein ... es ist nur verlockend nah dran, dass es in getrennten Ansätzen so gut funktioniert, aber das Zusammenfügen funktioniert nicht ... –

+0

Prüfe die GitHub-Probleme; jemand könnte das schon mal erlebt haben. Wenn nicht, könnten Sie einen hinzufügen. – alistaire

Antwort

1

Sie können diese Funktion benutzen, um Ihre Pop-up zu erstellen:

popup <- paste("<div class='leaflet-popup-scrolled' style='max-width:600px;max-height:100px'><b><h3>", shp_gbr$NAME_1, "</h3></b>", shp_gbr$text,"</div>") 

Es wickelt das Popup in einer div mit der leaflet-popup-scrolled Klasse der Bildlaufleiste und Inline-CSS hinzufügen die max-width und max-height einzustellen.

+0

wunderbar elegante Lösung installiert - vielen Dank! –