我有一个 R 数据框,在 EPSG 25832 系统中有一些坐标。我尝试了一些不同的方法来将类转换为空间点,但我无法让它工作。
几何_EPSG_25832 | 变量1 | 变量2 |
---|---|---|
点(549611.77 6189284.79) | 1.99 | 739 |
点(700990.83 6223807.37) | 12 | 129 |
然后我尝试了另一篇文章中的内容: 在 R 中使用 sf 包中的 st_as_sfc 时出现错误“OGR:不支持的几何类型”
# Remove "POINT" and parentheses
Total_df$EPSG <- gsub("POINT|\\(|\\)", "", Total_df$Geometri_EPSG_25832)
Total_df$EPSG <- sf::st_as_sfc(Total_df$EPSG,CRS("+init=epsg:25832"))
# Convert to numeric values
Total_df$x_coord <- as.numeric(stringr::str_extract(Total_df$EPSG, "[^ ]+"))
Total_df$y_coord <- as.numeric(stringr::str_extract(Total_df$EPSG, "(?<=\\s)[^\\s]+"))
Total_df$Coor <- paste0(Total_df$x_coord,", ", Total_df$y_coord)
Total_df$geos_points <- sapply(Total_df$Coor, function(x) st_multipoint(matrix(eval(str2lang(x)), ncol = 2)), USE.NAMES = FALSE)
但是然后得到: 解析错误(text = x) : :1:10: 意外的“,” 1:549611.77, ^
您的数据框似乎具有众所周知的文本格式(WKT)的几何形状。
sf
支持该格式。
我刚刚看到margusl的回答。我认为我们可以在同一个
st_as_sf
通话中完成所有事情。
library(sf)
#> Linking to GEOS 3.11.2, GDAL 3.7.2, PROJ 9.3.0; sf_use_s2() is TRUE
df =data.frame( Geometri_EPSG_25832 = c("POINT (549611.77 6189284.79)" ,
"POINT (700990.83 6223807.37)"),
Var1 = c(1.99,12) , Var2 = c(739,129))
st_as_sf(df, wkt="Geometri_EPSG_25832", crs = 25832 )
#> Simple feature collection with 2 features and 2 fields
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: 549611.8 ymin: 6189285 xmax: 700990.8 ymax: 6223807
#> Projected CRS: ETRS89 / UTM zone 32N
#> Var1 Var2 Geometri_EPSG_25832
#> 1 1.99 739 POINT (549611.8 6189285)
#> 2 12.00 129 POINT (700990.8 6223807)
创建于 2024-03-20,使用 reprex v2.1.0
@VinceGreg,但你的建议是缺失的部分。我非常感谢你。我运行 Total_df$Coor[!grepl("^POINT", Total_df$Coor)] 来检测是否有任何观察结果在没有“POINT”的情况下开始,然后确保它们都具有相同的格式,然后我可以轻松应用 st_as_sfc。谢谢!