我陷入了一个看似简单的问题。我想手动更正所选点的地理编码结果。可以说,“ 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))
可以完成工作,但是两种解决方案都会产生错误。
答案 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