В R & sf, как я могу обновить координаты выбранных объектов? - PullRequest
0 голосов
/ 08 января 2019

Я застрял с, казалось бы, простой проблемой. Я хотел бы вручную исправить результаты геокодирования для выбранных точек. Допустим, нужно обновить центр тяжести «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 голосов
/ 08 января 2019

Использование 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, опубликованном @ 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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...