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

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

st_intersects(coords_sf, santacruz)

我明白了

错误: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)

它不起作用。我也试过

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")

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

st_intersects(coords_sf, santacruz)

我明白了

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

在这一点上,我无法判断设置 CRS 或转换或st_intersects函数是否有问题。谢谢,

4

2 回答 2

5
st_set_crs(santacruz, 4269)

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

santacruz <- st_set_crs(santacruz, 4269)

或者做

st_crs(santacruz) <- 4269 

更换 CRS。

于 2018-03-07T20:37:10.093 回答
1

我没有你的位置数据,但如果我尝试使用 sf 的 nc 数据集,这对我有用:

library(tidyverse) 
library(tigris) 
library(sf)
santacruz <- tracts("CA", "Santa Cruz")
santacruz <- st_as_sf(santacruz) %>% st_set_crs(4269)
nc <- st_read(system.file('shape/nc.shp', package = 'sf')) %>%
  st_transform(4269)
st_intersects(nc, santacruz)

#> Sparse geometry binary predicate list of length 100, where the predicate was `intersects'
#> first 10 elements:
#>  1: (empty)
#>  2: (empty)
 #> 3: (empty)
 #> 4: (empty)
 #> 5: (empty)
 #> 6: (empty)
 #> 7: (empty)
 #> 8: (empty)
 #> 9: (empty)
 #> 10: (empty)

请注意,这会在 santacruz 对象上的 st_set_crs 之前执行 st_as_sf。

于 2018-03-07T02:27:59.143 回答