问题
In ggmap, you can set the view of the map based on longitude and latitude of input data, where two columns of csv are Longitude and Latitude, i.e.
sep <- read.csv("31R_SEP_assets_csv.csv")
# get the map
bbox <- make_bbox(sep$Longitude, sep$Latitude, f = 0.3)
map <- get_map(bbox)
I am searching for similar function in leaflet, but so far, I only find setView() that takes in an actual value for latitude and longitude, i.e.
m <- leaflet() %>% setView(lng = -71.0589, lat = 42.3601, zoom = 12)
m %>% addTiles()
What function to use?
Here's my code so far
library(ggmap)
library(ggplot2)
library(historydata)
library(leaflet)
library(rgdal)
setwd("d:/GIS/31R")
sep <- read.csv("31R_SEP_assets_csv.csv")
Sub1 <- sep[grep("SEP.12", names(sep))]
sep$newCol <- 100*rowSums(Sub1)/rowSums(sep[4:7])
# create a new grouping variable
Percent_SEP12_Assets <- ifelse(sep[,8] <= 33, "Less than 33%", ifelse(sep[,8] >= 66, "More than 66%", "Between 33% and 66%"))
leaflet(data = sep[]) %>% addTiles() %>%
addMarkers(~Longitude, ~Latitude, popup = ~as.character(paste(Site, Percent_SEP12_Assets , sep=", ")))
and output is zoomed out all the way

dput(sep)
structure(list(Site = structure(1:5, .Label = c("Staten Island\\31R001",
"Staten Island\\31R002", "Staten Island\\31R003", "Staten Island\\31R004",
"Staten Island\\31R005"), class = "factor"), Latitude = c(40.508874,
40.577256, 40.520825, 40.552373, 40.529697), Longitude = c(-74.244048,
-74.100135, -74.211845, -74.195516, -74.187532), Windows.SEP.11 = c(63L,
174L, 11L, 85L, 163L), Mac.SEP.11 = c(0L, 1L, 4L, 0L, 0L), Windows.SEP.12 = c(124L,
185L, 9L, 75L, 23L), Mac.SEP.12 = c(0L, 1L, 32L, 1L, 0L), newCol = c(66.3101604278075,
51.5235457063712, 73.2142857142857, 47.2049689440994, 12.3655913978495
)), .Names = c("Site", "Latitude", "Longitude", "Windows.SEP.11",
"Mac.SEP.11", "Windows.SEP.12", "Mac.SEP.12", "newCol"), row.names = c(NA,
-5L), class = "data.frame")
Update
Tried
addTiles(do.call(fitBounds, args = c(list(map = leaflet()), as.list(setNames(make_bbox(sep$Longitude, sep$Latitude, f = 0.3), c("lng1", "lat1", "lng2", "lat2")))))
and map is blank
then tried
leaflet(data = sep[]) %>% addTiles() %>%
fitBounds(~min(sep$Longitude), ~min(sep$Latitude), ~max(sep$Longitude), ~max(sep$Latitude)) %>%
addMarkers(~Longitude, ~Latitude, popup = ~as.character(paste(Site, Percent_SEP12_Assets , sep=", ")))
And map is still zoomed out ...
Workaround
I am using setView that uses average of Longitude and Latitude
leaflet(data = sep[]) %>%
setView(lng = mean(sep$Longitude), lat = mean(sep$Latitude), zoom = 12) %>% addTiles() %>%
addMarkers(~Longitude, ~Latitude, popup = ~as.character(paste(Site, Percent_SEP12_Assets , sep=", ")))
Seems to work so far ....
回答1:
Use
fitBounds(lng1 = min(table$lng),
lat1 = min(table$lat),
lng2 = max(table$lng),
lat2 = max(table$lat))
来源:https://stackoverflow.com/questions/31406598/leaflet-in-r-setview-based-on-range-of-latitude-and-longitude-from-dataset