调用lcsa_subr函数报错:经纬度顺序错误问题求助
解决lcsa_subr函数的经纬度顺序与范围报错问题
1. 确保矢量与栅格的坐标系完全一致
- 用
crs(dem)和crs(lang_coord_sp)检查两者的CRS,必须完全匹配(包括EPSG代码、投影参数)。若不一致,根据数据类型转换:- sf对象:
lang_coord_sp <- st_transform(lang_coord_sp, crs = crs(dem)) - sp对象:
lang_coord_sp <- spTransform(lang_coord_sp, CRSobj = crs(dem))
- sf对象:
2. 严格匹配函数要求的XY列顺序与名称
- 报错提示经纬度顺序错误,先明确函数期望的顺序:
- 若函数要求经度在前、纬度在后,调整坐标列顺序:
- sp对象:
lang_coord_sp@coords <- lang_coord_sp@coords[, c("longitude", "latitude")] - sf对象:重新构造对象:
lang_coord_sp <- st_as_sf(data.frame(lon = lang_coord_sp$longitude, lat = lang_coord_sp$latitude), coords = c("lon", "lat"), crs = crs(dem))
- sp对象:
- 若函数要求纬度在前、经度在后,则调换上述代码中的列名顺序。
- 若函数要求经度在前、纬度在后,调整坐标列顺序:
3. 验证点的实际范围(排除视觉判断误差)
- 获取栅格范围:
dem_extent <- extent(dem) - 提取点坐标:
- sp对象:
point_coords <- lang_coord_sp@coords - sf对象:
point_coords <- st_coordinates(lang_coord_sp)
- sp对象:
- 检查点是否在范围内:
point_in_extent <- point_coords[,1] >= dem_extent@xmin & point_coords[,1] <= dem_extent@xmax & point_coords[,2] >= dem_extent@ymin & point_coords[,2] <= dem_extent@ymax - 若存在不在范围内的点,说明坐标顺序仍有错误,调换XY列后重新验证。
4. 重新构造符合规范的空间对象
如果以上步骤无效,直接重新生成空间对象:
# 提取原始点数据(根据实际列名调整) point_df <- data.frame(lon = lang_coord_sp$longitude, lat = lang_coord_sp$latitude) # 生成sp对象(适配函数要求的格式) lang_coord_sp_fixed <- SpatialPointsDataFrame( coords = point_df[, c("lon", "lat")], # 按函数要求的顺序调整 data = point_df, proj4string = crs(dem) ) # 调用函数 lang_coord_sp_200000 <- lcsa_subr(dem, lang_coord_sp_fixed, 400000, 24)
5. 排查函数的参数细节
lcsa_subr可能是自定义或小众包的函数,直接查看源码确认要求:
- 运行
lcsa_subr命令查看函数代码,重点看输入矢量的处理逻辑,比如是否硬编码了XY列名、是否要求投影坐标(而非地理经纬度)。
内容的提问来源于stack exchange,提问作者user8044707
相关产品推荐
相关产品推荐

