1

我正在尝试在对象shapefiles之上添加ggmap。具体来说,我想使用从包中下载的Simple Feature(SF)。我试图将这些覆盖在.google 地图上。shapefilesRTigrisStamenggmap

使用的包:

library(tigris)
library(tidyverse)
library(ggmap)
library(sf)

首先shapefilesTigris包中下载。我正在使用德克萨斯州的县形状。我专门将这些下载为 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)

现在,当我尝试在 上覆盖县shapefileggmap,边界没有正确对齐。

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 一样简单。谢谢。

4

0 回答 0