st_crs(x) == st_crs(y) 的 st_intersects 错误不为 TRUE

Dob*_*ski 3 gis r tigris r-sf

library(tidyverse) 
library(tigris) 
library(sf)
santacruz <- tracts("CA", "Santa Cruz")
coords_sf <- locations %>% st_as_sf(coords = c("Longitude", "Latitude"), crs=4269) 
Run Code Online (Sandbox Code Playgroud)

这应该有相同的 CRS,但是当我尝试时

st_intersects(coords_sf, santacruz)
Run Code Online (Sandbox Code Playgroud)

我明白了

错误:st_crs(x) == st_crs(y) 不为 TRUE

然后我尝试了

st_set_crs(santacruz, 4269)
st_set_crs(coords_sf, 4269)
st_transform(santacruz, 4269)
st_transform(coords_sf, 4269)
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我也尝试过

st_transform(santacruz, crs = "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")

st_transform(coords_sf, crs = "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
Run Code Online (Sandbox Code Playgroud)

无论我尝试设置 CRS 并在尝试时对其进行转换

st_intersects(coords_sf, santacruz)
Run Code Online (Sandbox Code Playgroud)

我明白了

错误:st_crs(x) == st_crs(y) 不为 TRUE

此时我无法判断是否是设置 CRS 或转换或st_intersects功能有问题。谢谢,

Edz*_*sma 7

st_set_crs(santacruz, 4269)
Run Code Online (Sandbox Code Playgroud)

设置返回对象的 CRS,但不替换santacruz. 您需要保存它:

santacruz <- st_set_crs(santacruz, 4269)
Run Code Online (Sandbox Code Playgroud)

或者做

st_crs(santacruz) <- 4269 
Run Code Online (Sandbox Code Playgroud)

取代 CRS。