Interaktiiviset kartat leafletillä
Renderöikää interaktiivisia verkkokarttoja, joissa on merkkejä, ponnahdusikkunoita ja karttatasoja.
Interaktiiviset kartat leafletillä on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.
Johdatus leaflet-pakettiin
leaflet-paketti tarjoaa R:lle käyttöliittymän Leaflet.js-kirjastoon, jonka avulla voitte luoda interaktiivisia ja zoomattavia verkkokarttoja suoraan R:stä. Kartat ovat HTML-widgettejä, jotka näkyvät RStudion Viewerissa, R Markdownissa ja Shiny-sovelluksissa ilman JavaScript-osaamista.
library(leaflet)
# Minimal leaflet map: tiles + one marker
leaflet() |>
addTiles() |> # OpenStreetMap base layer
setView(
lng = -74.006,
lat = 40.713,
zoom = 12
) |>
addMarkers(
lng = -74.006,
lat = 40.713,
popup = '<b>New York City</b>'
)addTiles: taustakarttatasot
addTiles() lisää oletusarvoisen OpenStreetMap-laattatason. Vaihtakaa satelliittikuviin, CartoDB:hen, Esriin, Stameniin tai muuhun laattapalveluun käyttämällä funktiota addProviderTiles(providers$. Tasojen nimet ovat sisäänrakennetussa providers-listassa.
library(leaflet)
# Default OpenStreetMap
map1 <- leaflet() |> addTiles()
# CartoDB light theme (great for data overlay)
map2 <- leaflet() |>
addProviderTiles(providers$CartoDB.Positron)
# Satellite imagery
map3 <- leaflet() |>
addProviderTiles(providers$Esri.WorldImagery)
# Custom tile URL
custom <- leaflet() |>
addTiles(
urlTemplate = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
attribution = '(c) OpenStreetMap contributors'
)
map2addMarkers ja ponnahdusikkunat
addMarkers(lng, lat, popup) lisää kartalle neulamerkkejä. popup-argumentti hyväksyy HTML-merkkijonoja, joten voitte sisällyttää lihavoitua tekstiä, linkkejä tai kuvia. label-argumentti näyttää tekstin osoitettaessa kohdetta hiirellä ilman napsautusta.
library(leaflet)
cities <- data.frame(
name = c('New York', 'Los Angeles', 'Chicago'),
lon = c(-74.006, -118.244, -87.629),
lat = c( 40.713, 34.052, 41.878),
pop = c(8336817, 3979576, 2693976)
)
leaflet(cities) |>
addTiles() |>
addMarkers(
lng = ~lon,
lat = ~lat,
popup = ~paste0(
'<b>', name, '</b><br>',
'Population: ', format(pop, big.mark = ',')
),
label = ~name
)addCircleMarkers
addCircleMarkers() piirtää ympyröitä, joiden koko on kiinteä näytön pikseleinä (toisin kuin addCircles(), jonka koko skaalautuu zoomauksen mukaan). Ne sopivat erinomaisesti suhteellisten symbolien esittämiseen — määrittäkää radius datamuuttujan perusteella.
library(leaflet)
cities <- data.frame(
name = c('New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'),
lon = c(-74.006, -118.244, -87.629, -95.369, -112.074),
lat = c( 40.713, 34.052, 41.878, 29.760, 33.449),
pop = c(8336817, 3979576, 2693976, 2304580, 1608139)
)
leaflet(cities) |>
addProviderTiles(providers$CartoDB.Positron) |>
addCircleMarkers(
lng = ~lon,
lat = ~lat,
radius = ~sqrt(pop / 50000),
color = 'steelblue',
fill = TRUE,
fillOpacity = 0.6,
popup = ~paste0(name, ': ', format(pop, big.mark = ','))
)addPolygons: koropleettikartat
addPolygons() piirtää polygonigeometriat suoraan sf-objektista. Täyttöväri voidaan yhdistää datasarakkeeseen käyttämällä colorNumeric()- tai colorBin()-palettifunktioita. highlight-valinta lisää hiiriosoitukseen liittyvät korostustehosteet.
library(leaflet)
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
# Colour palette based on birth count
pal <- colorNumeric('YlOrRd', domain = nc$BIR74)
leaflet(nc) |>
addProviderTiles(providers$CartoDB.Positron) |>
addPolygons(
fillColor = ~pal(BIR74),
fillOpacity = 0.7,
color = 'white',
weight = 1,
popup = ~paste0('<b>', NAME, '</b><br>Births 1974: ', BIR74),
highlight = highlightOptions(
weight = 3,
color = '#333',
bringToFront = TRUE
)
) |>
addLegend('bottomright', pal = pal, values = ~BIR74, title = 'Births 1974')setView ja fitBounds
setView(lng, lat, zoom) keskittää kartan kiinteään sijaintiin ja zoomaustasoon. fitBounds(lng1, lat1, lng2, lat2) zoomaa automaattisesti niin, että maantieteellinen rajauslaatikko mahtuu kartalle. Tämä on hyödyllistä, kun datan laajuutta ei tiedetä etukäteen.
library(leaflet)
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
bbox <- st_bbox(nc)
# fitBounds: auto-zoom to data extent
leaflet() |>
addTiles() |>
fitBounds(
lng1 = bbox['xmin'], lat1 = bbox['ymin'],
lng2 = bbox['xmax'], lat2 = bbox['ymax']
) |>
addPolygons(
data = nc,
fillColor = 'lightblue',
fillOpacity = 0.4,
color = 'steelblue',
weight = 1
)addLayersControl: tasojen vaihtaminen
addLayersControl() lisää radio- tai valintaruutuohjaimen, jolla pohjakarttoja ja päällekkäisiä tasoja voi ottaa käyttöön ja poistaa käytöstä. Käyttäkää baseGroups-parametria keskenään vaihtoehtoisiin karttatasoihin ja overlayGroups-parametria toisistaan riippumattomasti vaihdettaviin datatasoihin.
library(leaflet)
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
high_birth <- nc[nc$BIR74 > 3000, ]
low_birth <- nc[nc$BIR74 <= 3000, ]
leaflet() |>
addProviderTiles(providers$CartoDB.Positron, group = 'Light') |>
addProviderTiles(providers$Esri.WorldImagery, group = 'Satellite') |>
addPolygons(data = high_birth, color = 'red', group = 'High Births (>3000)') |>
addPolygons(data = low_birth, color = 'blue', group = 'Low Births (<=3000)') |>
addLayersControl(
baseGroups = c('Light', 'Satellite'),
overlayGroups = c('High Births (>3000)', 'Low Births (<=3000)'),
options = layersControlOptions(collapsed = FALSE)
)addPopups ja addLegend
addPopups() lisää pysyviä (aina näkyviä) ponnahdusruutuja. addLegend() luo väripalettiin yhdistetyn kartan selitteen. Molemmat tukevat HTML-sisältöä, ja niitä voi mukauttaa kattavasti CSS-luokkien avulla.
library(leaflet)
leaflet() |>
addTiles() |>
setView(-79.0, 35.5, zoom = 7) |>
addPopups(
lng = -78.639,
lat = 35.779,
popup = '<b>Raleigh</b><br>State Capital of NC'
) |>
addLegend(
position = 'bottomleft',
colors = c('red', 'blue', 'green'),
labels = c('High', 'Medium', 'Low'),
title = 'Risk Level',
opacity = 0.8
)Väripaletit: colorNumeric ja colorBin
Funktiot colorNumeric(), colorBin(), colorQuantile() ja colorFactor() luovat palettifunktioita, jotka yhdistävät data-arvot heksaväreihin. Välittäkää tulos parametrille fillColor ja käyttäkää samaa palettia myös funktiossa addLegend().
library(leaflet)
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
# Continuous palette
pal_num <- colorNumeric('Blues', domain = nc$BIR74)
# Binned palette (5 equal bins)
pal_bin <- colorBin('RdYlGn', domain = nc$BIR74, bins = 5)
# Quantile palette (equal number of features per class)
pal_qtl <- colorQuantile('YlOrRd', domain = nc$BIR74, n = 4)
# Use binned palette
leaflet(nc) |>
addTiles() |>
addPolygons(
fillColor = ~pal_bin(BIR74),
fillOpacity = 0.7, weight = 1, color = 'white'
) |>
addLegend('bottomright', pal = pal_bin, values = ~BIR74,
title = 'Births 1974 (5 bins)')leafletProxy: karttojen päivittäminen Shinyssä
leafletProxy('mapId') päivittää olemassa olevan leaflet-kartan Shiny-sovelluksessa piirtämättä koko karttaa uudelleen alusta. Käyttäkää sitä yhdessä funktioiden clearMarkers(), clearShapes() tai addMarkers() kanssa, jotta käyttäjän syötteisiin voidaan reagoida tehokkaasti.
library(shiny)
library(leaflet)
# Minimal Shiny app with leafletProxy
ui <- fluidPage(
selectInput('colour', 'Marker colour:', choices = c('red', 'blue', 'green')),
leafletOutput('map')
)
server <- function(input, output, session) {
output$map <- renderLeaflet({
leaflet() |> addTiles() |>
setView(-79.0, 35.5, zoom = 7)
})
observeEvent(input$colour, {
leafletProxy('map') |>
clearMarkers() |>
addCircleMarkers(
lng = -78.639, lat = 35.779,
color = input$colour,
label = paste('Raleigh -', input$colour)
)
})
}
# shinyApp(ui, server) # uncomment to runTäydellinen interaktiivinen koropleettikartta
Tässä on tuotantotason koropleettikartta, jossa yhdistyvät kaikki keskeiset ominaisuudet: palveluntarjoajan karttatasot, polygonien täyttö, hiiriosoitukseen liittyvät korostukset, dynaamiset ponnahdusikkunat, väriselite ja tasojen ohjaus — kaikki alle 25 rivillä.
library(leaflet)
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
pal <- colorQuantile('YlOrRd', domain = nc$SID74, n = 5)
leaflet(nc) |>
addProviderTiles(providers$CartoDB.Positron) |>
addPolygons(
fillColor = ~pal(SID74),
fillOpacity = 0.75,
color = 'white',
weight = 0.5,
popup = ~paste0('<b>', NAME, '</b><br>SIDS 1974: ', SID74),
highlight = highlightOptions(
weight = 2, color = '#555', bringToFront = TRUE
)
) |>
addLegend(
position = 'bottomright',
pal = pal, values = ~SID74,
title = 'SIDS Deaths 1974<br>(Quintiles)'
) |>
addControl('<b>NC SIDS Data 1974</b>', position = 'topright')Pikatarkistus
Haluatte Shiny-sovelluksessa päivittää merkkien sijainnit olemassa olevalla leaflet-kartalla, kun käyttäjä muuttaa pudotusvalinnan arvoa — piirtämättä koko karttaa uudelleen. Mitä funktiota käyttäisitte?
Kertaus: leaflet-paketti
Keskeiset opit:
leaflet() |> addTiles()luo interaktiivisen kartan OpenStreetMap-karttatasoillaaddProviderTiles(providers$vaihtaa toiseen karttatasojen tarjoajaan) addMarkers()/addCircleMarkers()pisteaineistolle; käyttäkää parametrejapopupjalabeladdPolygons(fillColor = ~pal(col))koropleettikarttoihincolorNumeric(),colorBin()jacolorQuantile()luovat palettifunktioitaaddLegend()yhdistetään palettifunktioihin;addLayersControl()vaihtaa tasojaleafletProxy()tehokkaisiin Shiny-karttojen päivityksiinfitBounds()zoomaa automaattisesti datan laajuuteen
library(leaflet)
# Three-line interactive map
leaflet() |>
addProviderTiles(providers$CartoDB.Positron) |>
addCircleMarkers(lng = c(-74, -118, -88), lat = c(41, 34, 42),
label = c('NYC', 'LA', 'Chicago'), color = 'steelblue')Opi R tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 43
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Interaktiiviset kartat leafletillä” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Interaktiiviset kartat leafletillä”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Interaktiiviset kartat leafletillä”?
Renderöikää interaktiivisia verkkokarttoja, joissa on merkkejä, ponnahdusikkunoita ja karttatasoja. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Interaktiiviset kartat leafletillä”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?
Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Simple Features sf-paketilla
- Koordinaattijärjestelmät ja projektiot
- Paikkatietoliitokset ja -operaatiot
- Interaktiiviset kartat leafletillä