R语言st_transform报错:无简单要素几何,无法转换坐标
问题原因与解决方案
问题原因
- 列名不匹配:你在
st_read的options参数里指定了X_POSSIBLE_NAMES=Lon和Y_POSSIBLE_NAMES=Lat,但实际CSV文件中的经度列是Lon.lambda.,纬度列是Lat.fi.,st_read无法识别到对应的坐标列,因此无法生成sf(简单要素)对象,只能返回普通data.frame,自然无法使用依赖sf对象的st_transform函数。 - 坐标列类型错误:从
dput结果能看到,Lon.lambda.和Lat.fi.的数值是字符串格式(带引号),而非数值类型,就算列名正确,也无法直接转换为几何对象。
解决方案
以下两种方式都可以解决问题:
方式一:修正st_read参数,直接读取为sf对象
修改options中的列名匹配实际字段,同时确保st_read能识别并转换坐标列为数值型:
tabela1 = st_read( "table6.csv", options = c( "X_POSSIBLE_NAMES=Lon.lambda.", "Y_POSSIBLE_NAMES=Lat.fi.", "GEOM_POSSIBLE_NAMES=Lon.lambda.,Lat.fi." ), crs = 4326 ) # 后续坐标转换与导出代码保持不变 tabela1_t = st_transform(tabela1, crs = "+proj=merc +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +units=m") st_write(tabela1_t, "tacke1_trans.csv", layer_options = "GEOMETRY=AS_XY")
方式二:先导入为data.frame,再转换为sf对象
如果st_read自动转换存在异常,可以手动处理数据类型后再生成sf对象:
# 先读取为普通data.frame tabela1 = read.csv("table6.csv") # 将坐标列转换为数值型 tabela1$Lon.lambda. = as.numeric(tabela1$Lon.lambda.) tabela1$Lat.fi. = as.numeric(tabela1$Lat.fi.) # 转换为sf对象,指定坐标列和原始坐标系 tabela1_sf = st_as_sf(tabela1, coords = c("Lon.lambda.", "Lat.fi."), crs = 4326) # 执行坐标转换 tabela1_t = st_transform(tabela1_sf, crs = "+proj=merc +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +units=m") # 导出转换后的文件 st_write(tabela1_t, "tacke1_trans.csv", layer_options = "GEOMETRY=AS_XY")
内容的提问来源于stack exchange,提问作者Aleksandar
相关产品推荐
相关产品推荐

