#r #sf
Вопрос:
Я хотел бы преобразовать sf
объект в a dataframe
и восстановить его в исходное состояние. Но когда я выполняю преобразование st_as_text(st_sfc(stands_sel$geometry))
, показывает, что его очень трудно восстановить снова. В моем примере:
library(sf)
# get AOI in shapefile
download.file(
"https://github.com/Leprechault/trash/raw/main/sel_stands_CMPC.zip",
zip_path <- tempfile(fileext = ".zip")
)
unzip(zip_path, exdir = tempdir())
# Open the file
setwd(tempdir())
stands_sel <- st_read("sel_stands_CMPC.shp")
st_crs(stands_sel) = 4326
# Extract geometry as text
geom <- st_as_text(st_sfc(stands_sel$geometry))
# Add the features
features <- st_drop_geometry(stands_sel)
str(features)
# Joining feature geom
geo_df <- cbind(features, geom)
str(geo_df)
# 'data.frame': 2 obs. of 17 variables:
# $ CD_USO_SOL: num 2433 9053
# $ ID_REGIAO : num 11 11
# $ ID_PROJETO: chr "002" "344"
# $ PROJETO : chr "BARBA NEGRA" "CAMPO SECO"
# $ CD_TALHAO : chr "159A" "016A"
# $ CARACTERIS: chr "Plantio Comercial" "Plantio Comercial"
# $ CARACTER_1: chr "Produtivo" "Produtivo"
# $ CICLO : int 2 1
# $ ROTACAO : int 1 1
# $ DATA_PLANT: chr "2008/04/15" "2010/04/15"
# $ LOCALIDADE: chr "BARRA DO RIBEIRO" "DOM FELICIANO"
# $ ESPACAMENT: chr "3.00 x 2.50" "3.5 x 2.14"
# $ ESPECIE : chr "SALIGNA" "DUNNI"
# $ SISTEMA_PR: chr "MACRO ESTACA - EUCALIPTO" "SEMENTE - EUCALIPTO"
# $ VLR_AREA : num 8.53 28.07
# $ ID_UNIQUE : chr "BARBANEGRA159A" "CAMPOSECO016A"
# $ geom : chr "MULTIPOLYGON (((-51.21423 -30.35172, -51.21426 -30.35178, -51.2143 -30.35181, -51.21432 -30.35186, -51.21433 -3"| __truncated__
# Return to original format again
stands_sf <- geo_df %>%
st_geometry(geom) %>%
sf::st_as_sf(crs = 4326)
#Error in UseMethod("st_geometry") :
Пожалуйста, какая-нибудь помощь в восстановлении моего stands_sf
объекта в исходное состояние?
Комментарии:
1. При настройке геометрии (в конце) попробуйте вместо этого:
st_as_sf(geo_df, wkt = "geom", crs = 4326)
2. @Skaqqs большое вам спасибо, проблема решена!!!
3. Не за что! Вы не будете возражать, если я опубликую это в качестве ответа, чтобы будущим читателям было легче его найти?
Ответ №1:
Я думаю geom
, что это не в том формате st_geometry
, который ожидается. st_as_text
преобразовал вашу геометрию в WKT, как описано в справке:
Возвращенное представление WKT геометрии простых объектов соответствует спецификации и расширениям доступа к простым функциям, известным как EWKT, поддерживаемым PostGIS и другими реализациями простых функций для добавления SRID в строку WKT.
https://r-spatial.github.io/sf/reference/st_as_text.html
Вместо этого используйте st_as_sf(wkt=)
для установки новой (старой) геометрии.
st_as_sf(geo_df, wkt = "geom", crs = 4326)