R 将字符串转换为sf中的几何图形
基本问题,如何将typeR 将字符串转换为sf中的几何图形,r,sf,R,Sf,基本问题,如何将typecharacterLINESTRING变量转换为geometrytype insf,然后分别将两个坐标分离为不同的变量。例如 library(tidyverse) library(sf) df <- structure(list(geometry = c("LINESTRING (-85.76 38.34, -85.72 38.38)", "LINESTRING (-85.46 38.76, -85.42 3
character
LINESTRING
变量转换为geometry
type insf
,然后分别将两个坐标分离为不同的变量。例如
library(tidyverse)
library(sf)
df <- structure(list(geometry = c("LINESTRING (-85.76 38.34, -85.72 38.38)",
"LINESTRING (-85.46 38.76, -85.42 38.76)",
"LINESTRING (-85.89 38.31, -85.85 38.32)"
), var1 = c(4, 5, 6
), var2 = c(1, 2, 3
)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"
))
df
# # A tibble: 3 x 3
# geometry var1 var2
# <chr> <dbl> <dbl>
# 1 LINESTRING (-85.76 38.34, -85.72 38.38) 4 1
# 2 LINESTRING (-85.46 38.76, -85.42 38.76) 5 2
# 3 LINESTRING (-85.89 38.31, -85.85 38.32) 6 3
我以为像final%st\u geometry(geometry)
这样的组合可以转换它,但我想不出来。也许sfheaders
在这里有用吗
编辑
我想要一个sf
类型的解决方案,而不是手动提取坐标
有什么建议吗?
谢谢我不熟悉上面提到的软件包,但是使用regex我们可以做类似的事情
gsub("[^0-9\\.\\s-]", "", df$geometry, perl= TRUE)
对于所需的输出,我们可以使用
df <- cbind.data.frame(df, do.call("rbind.data.frame", lapply(strsplit(gsub("[^0-9\\.\\s-]", "", df$geometry, perl= TRUE), " "), function(i) as.numeric(i[2:length(i)]))))
df <- df[ , c(1, 4:7, 2, 3)]
names(df) <- c("geometry", "start_lon", "start_lat", "end_lon", "end_lat", "var1", "var2")
dflibrary(sf)
可以直接读取已知文本,如果您告诉它使用wkt=
参数。这将为您提供sf
对象
sf <- sf::st_as_sf( df, wkt = "geometry" )
sf
# Simple feature collection with 3 features and 2 fields
# geometry type: LINESTRING
# dimension: XY
# bbox: xmin: -85.89 ymin: 38.31 xmax: -85.42 ymax: 38.76
# CRS: NA
# geometry var1 var2
# 1 LINESTRING (-85.76 38.34, -... 4 1
# 2 LINESTRING (-85.46 38.76, -... 5 2
# 3 LINESTRING (-85.89 38.31, -... 6 3
谢谢,但我正在寻找一个sf
类型的解决方案。你的方法没有回答我的主要问题,我如何将字符变量geometry
转换为类型geometry
以sf
@user绘图我不确定你的问题是关于什么的,我想。一般来说,您可以使用上面我正在寻找的class(df$geometry)解决方案更改类,谢谢您的帮助
sf <- sf::st_as_sf( df, wkt = "geometry" )
sf
# Simple feature collection with 3 features and 2 fields
# geometry type: LINESTRING
# dimension: XY
# bbox: xmin: -85.89 ymin: 38.31 xmax: -85.42 ymax: 38.76
# CRS: NA
# geometry var1 var2
# 1 LINESTRING (-85.76 38.34, -... 4 1
# 2 LINESTRING (-85.46 38.76, -... 5 2
# 3 LINESTRING (-85.89 38.31, -... 6 3