将字符类转换为空间点

问题描述 投票:0回答:2

我有一个 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, ^

r geospatial ogr
2个回答
2
投票

您的数据框似乎具有众所周知的文本格式(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


0
投票

@VinceGreg,但你的建议是缺失的部分。我非常感谢你。我运行 Total_df$Coor[!grepl("^POINT", Total_df$Coor)] 来检测是否有任何观察结果在没有“POINT”的情况下开始,然后确保它们都具有相同的格式,然后我可以轻松应用 st_as_sfc。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.