在R&SF中,如何更新所选要素的坐标?

时间:2019-01-08 06:39:09

标签: r sf

我陷入了一个看似简单的问题。我想手动更正所选点的地理编码结果。可以说,“ Dare”的质心需要更新:

library(sf)     
nc <- st_centroid(st_read(system.file("shape/nc.shp", package = "sf")))
st_coordinates(filter(nc, NAME== "Dare"))

如何更改

的原始值
          X        Y
1 -75.80982 35.73548

有什么不同吗?

我期望类似

st_coordinates(filter(nc, NAME== "Dare")) <- matrix(c(-73, 33), nrow = 1)

nc %>% 
  mutate(geometry = ifelse(place_full_name == "Dare", 
                           yes = st_set_geometry(c(-73, 33)), 
                           no = geometry))

可以完成工作,但是两种解决方案都会产生错误。

1 个答案:

答案 0 :(得分:4)

使用st_geometry<-

获取原始几何图形(仅供检查):

st_geometry(nc[nc$NAME == "Dare", ])
# Geometry set for 1 feature 
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: -75.80982 ymin: 35.73548 xmax: -75.80982 ymax: 35.73548
# epsg (SRID):    4267
# proj4string:    +proj=longlat +datum=NAD27 +no_defs
# POINT (-75.80982 35.73548)
st_geometry<-

替换选定的几何。替换值必须是简单的要素几何,因此是st_sfc(st_point(...

st_geometry(nc[nc$NAME == "Dare", ]) <-  st_sfc(st_point(c(-80, 40)))

# check again
st_geometry(nc[nc$NAME == "Dare", ])
# Geometry set for 1 feature 
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: -80 ymin: 40 xmax: -80 ymax: 40
# epsg (SRID):    4267
# proj4string:    +proj=longlat +datum=NAD27 +no_defs
# POINT (-80 40)

注意:

Twitter discussion shared by @radek中,sf包的作者@Edzer Pebesma评论说原始几何图形的边界框未更新。

原始边框:

st_bbox(nc)
#      xmin      ymin      xmax      ymax 
# -84.05976  34.07663 -75.80982  36.49101

将选定的几何图形替换为原始边界框之外的坐标,此处x小于xmin,而y大于ymax

st_geometry(nc[nc$NAME == "Dare", ]) <-  st_sfc(st_point(c(-90, 40)))

对象的bbox未更新:

st_bbox(nc)
#      xmin      ymin      xmax      ymax 
# -84.05976  34.07663 -75.80982  36.49101