我正在尝试在对象shapefiles
之上添加ggmap
。具体来说,我想使用从包中下载的Simple Feature
(SF)。我试图将这些覆盖在.google 地图上。shapefiles
R
Tigris
Stamen
ggmap
使用的包:
library(tigris)
library(tidyverse)
library(ggmap)
library(sf)
首先shapefiles
从Tigris
包中下载。我正在使用德克萨斯州的县形状。我专门将这些下载为 SF 对象(与 SP 对象相对)。
shp_tx <- tigris::counties(cb = TRUE,
resolution = "20m",
year = 2018,
class = 'sf',
state = 'TX')
然后我从这个对象计算一个边界框,用于下载一个stamen ggmap
.
my_bbox <- sf::st_bbox(shp_tx) %>% as.numeric()
my_map <- ggmap::get_stamenmap(bbox = my_bbox,
maptype = 'toner-lite',
zoom = 5)
现在,当我尝试在 上覆盖县shapefile
时ggmap
,边界没有正确对齐。
ggmap(my_map) +
geom_sf(data = shp_tx,
aes(geometry = geometry),
col = 'blue',
fill = 'lightblue',
alpha = 0.25,
inherit.aes = FALSE)
shp_tx
我的理解是我需要将(SF) 对象重新投影到 aCRS
以匹配 my_map ( ggmap
) 对象。
我根据在线帖子尝试了多种预测,但似乎没有一个能正常工作。以下是我尝试过的:
shp_tx2 <- sf::st_transform(shp_tx,
crs = 3857)
ggmap(my_map) +
geom_sf(data = shp_tx2,
aes(geometry = geometry),
col = 'blue',
fill = 'lightblue',
alpha = 0.25,
inherit.aes = FALSE)
和
shp_tx3 <- sf::st_transform(shp_tx,
crs = 4326)
ggmap(my_map) +
geom_sf(data = shp_tx2,
aes(geometry = geometry),
col = 'blue',
fill = 'lightblue',
alpha = 0.25,
inherit.aes = FALSE)
我不确定使用 aStamen Map
或 Google Map 进行这种转换是否相同,但我已经尝试了这两种方法并且遇到了类似的问题。我希望解决方案就像转换为正确的 CRS 一样简单。谢谢。