解决此错误:“无法转换缺少 crs 的 sfc 对象”

bco*_*lio 5 geospatial r-sf

我试图概述美国各州的特定人口普查区分组。

这是我尝试运行的代码:

sf_states <- sf::st_as_sf(fifty_states, coords = c("long", "lat")) %>%
  group_by(id, piece) %>%
  summarize(do_union = FALSE) %>%
  st_cast("POLYGON") %>%
  ungroup()

illinois <- sf_states %>%
  filter(id == "illinois")

arlington.crs <- arlington.test %>%
  st_set_crs(4326)

ggplot() +
  theme_minimal() +
  geom_sf(data = illinois) +
  geom_sf(data = arlington.crs, col = "green", alpha = 0, size = 2)
Run Code Online (Sandbox Code Playgroud)

数据arlington.test来自tidycensus包,包括每个人口普查区域的相关几何图形。

但是,当我运行代码时,出现以下错误:

Error in st_transform.sfc(st_geometry(x), crs, ...) : 
  cannot transform sfc object with missing crs
Run Code Online (Sandbox Code Playgroud)

我尝试了在 StackOverflow 上遇到的数十个不同的答案,但似乎没有任何方法可以解决这个问题。

更奇怪的是,我可以geom_sf使用 ggplot 分别运行这两个函数,并且它们的绘图效果很好。

仅当我尝试将它们一起运行时才会发生该错误,如上面包含的代码所示ggplot

还有其他想法/想法吗?

提前致谢。

编辑(回答下面的问题):

> sf::st_crs(arlington.test)
Coordinate Reference System:
  User input: NAD83 
  wkt:
GEOGCRS["NAD83",
    DATUM["North American Datum 1983",
        ELLIPSOID["GRS 1980",6378137,298.257222101,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["latitude",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["longitude",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    ID["EPSG",4269]]
> 
Run Code Online (Sandbox Code Playgroud)

Jin*_*cko 4

您的arlington.test对象似乎在EPSG:4269中;您尝试通过 将其覆盖为 WGS 84 sf::st_set_crs(4326)。你确定你不是这个意思吗sf::st_transform(4326)

设置 crs 最好保留用于您确定 CRS 格式错误/不正确的情况(当*.prj您的 shapefile 丢失时可能会发生这种情况*.shp)。这不是{tidycensus}数据的典型用例。

将投影从一种已知的 CRS 更改为另一种sf::st_transform()效果最好。