R语言sp包创建SpatialPoints报错:UTM投影带参数无效
问题解决:UTM坐标系统格式错误导致CRS创建失败
报错原因
R/RStudio更新后,底层依赖的PROJ库版本升级,对UTM投影的参数格式要求更严格。原代码中+zone=37N的写法不再被支持,必须将带号与南北半球分开指定,或改用EPSG代码来定义坐标系统。
修复方案
提供两种可靠的修复方式:
方式1:修正PROJ4字符串格式
将+zone=37N拆分为+zone=37 +north,明确指定北半球属性,同时建议补充基准面参数以保证兼容性:
sps.37N <- SpatialPoints(dd3.full[,c("longitude", "latitude")], proj4string = CRS("+proj=utm +zone=37 +north +datum=WGS84")) spst.37N <- spTransform(sps.37N, CRS("+proj=longlat +datum=WGS84")) dd3.full[, c("long", "lat")] <- coordinates(spst.37N)
方式2:使用EPSG代码(推荐)
UTM 37N对应的EPSG代码为32637,WGS84经纬度对应的EPSG代码为4326。直接使用EPSG代码可避免PROJ字符串格式问题,兼容性更强:
sps.37N <- SpatialPoints(dd3.full[,c("longitude", "latitude")], proj4string = CRS(SRS_string = "EPSG:32637")) spst.37N <- spTransform(sps.37N, CRS(SRS_string = "EPSG:4326")) dd3.full[, c("long", "lat")] <- coordinates(spst.37N)
验证说明
从提供的示例数据来看,longitude和latitude数值符合UTM 37N坐标特征,上述两种方式均可正确创建SpatialPoints并完成坐标转换。
内容的提问来源于stack exchange,提问作者bellbyrne
相关产品推荐
相关产品推荐

