2017-09-21 11 views
1

Shinyの小さなアプリを作っています。これは、国や地域向けのデータを保持しており、ユーザーは地域を選択できます。次に、アイデアは、私がアプリで持っているリーフレットマップがズームインし、選択した地域に焦点を当てるということです(ユーザーが「ヨーロッパ」をクリックし、ヨーロッパで地図がズームインする)。リーフレットの境界をsfカラムで調整する

単純な機能geometryの列をリーフレットのフィルタとして使用する方法についてはわかりません。ここには単純な例があります(シャイニーではありませんが、問題はシャイニー関連ではありません)。

library(rnaturalearth) 
library(dplyr) 
library(leaflet) 

# sf data: 
earth <- ne_countries(returnclass = "sf") %>% 
    select(Region = region_un, geometry) 

# little dataset: 
df <- data_frame(
    Region = c("Europe", "Africa", "Asia", "Oceania", "Americas"), 
    Score = c(0.85, 0.77, 0.81, 0.93, 0.79) 
) 
# join: 
df <- full_join(df, earth) 

# simulate what I'm doing in Shiny: 
input <- list() 
input$region <- "Europe" 

df2 <- filter(df, Region == input$region) 

leaflet(df2) %>% addTiles() 

これが生成します。私はdf(フィルタリングされていないデータフレーム)を使用した場合と同じである enter image description here

を。どのように私はこれについて行くことができるかについての任意のアイデア?私はShiny/leafletの文書でそれを見つけることができませんでした。

我々が関心の我々の地域に集中する leaflet::setView()を使用し、その後平均緯度と経度を取得し、 df2$geometryから値を抽出するために sf::st_coordinatesを使用することができ

答えて

1

library(sf) 
coords <- st_coordinates(df2$geometry) 
lng <- mean(coords[,1]) 
lat <- mean(coords[,2]) 

leaflet(df2) %>% addTiles() %>% 
    setView(lng, lat, zoom = 3) # 3 for "continent" level 

enter image description here

のためのいくつかの特別な方法があります。 leafletは、光沢のある設定で、主にleafletProxy()のマップに更新されています。これらは、docsでかなりよく説明されています。

+1

完璧に動作します、ありがとうございます!私は 'st_coordinates()'関数を知らなかったので、非常に便利です。 – RobertMc

関連する問題