r - 将缺少的 CRS 添加到 R 简单功能中的 sf 对象
问题描述
有没有办法添加缺少的 CRS?我得到了一些旧的 Esri shapefile,其中很大一部分有CRS: NA
,我希望能够批量设置缺少的 CRS。我可以在导入 QGIS 时手动设置它,但似乎无法使用 R 进行设置。我尝试过st_transform()
,但如果一开始没有设置 CRS,它似乎不起作用。
解决方案
感谢您的评论。我尝试过st_crs <-
,st_set_crs()
但似乎仍然无法正确设置或绘制 shapefile。我注意到那些缺少.prj
文件的是那些没有 CRS 的文件,这是有道理的。所以我写了一个块来为目录中的每个shapefile创建一个proj文件,如果一个不存在的话。有点破解,但它的工作原理:)
编辑:添加了一个粗略的日志系统来跟踪更改
p = "/path/to/shape/files"
proj_str_bng = 'PROJCS["British_National_Grid",GEOGCS["GCS_OSGB_1936",DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",400000.0],PARAMETER["False_Northing",-100000.0],PARAMETER["Central_Meridian",-2.0],PARAMETER["Scale_Factor",0.999601272],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]'
proj_str_wgs84 = 'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]'
shp_to_prj <- list.files(paste0(wd, p), pattern = "\\.shp$")
if (!file.exists(paste0(wd,p,"prj_log"))){
write("file, dt", file = paste0(wd,p,"prj_log"))
}
for (i in 1:length(shp_to_prj)) {
shp_to_prj[[i]] <- paste0(wd, p, str_remove_all(shp_to_prj[[i]], ".shp"), ".prj")
if(file.exists(shp_to_prj[[i]])) {
next
}
write(proj_str_bng, file = shp_to_prj[[i]])
write(paste0( shp_to_prj[[i]], ",",Sys.time()), file = paste0(wd,p,"prj_log"), append=TRUE)
}
write(paste0( "^===============================================================^", ",",Sys.time()), file = paste0(wd,p,"prj_log"), append=TRUE)
推荐阅读
- excel - 如何在excel中重复一个数字序列
- php - 使用范围的 IP 白名单
- ios - 键盘出现时移动文本字段解决方案不起作用
- flutter - 在颤动中触发通知的最佳方法
- json - 解析期间的 Angular Http 失败
- oracle - 在 oracle plsql 程序中,如果我们的程序具有“Pragma 自治事务”,我们可以使用 out 参数吗?
- google-cloud-automl - 我应该训练一天的 autoML 模型吗?
- javascript - 图片上传功能在 Angular 6 中不起作用
- python - 如何减小 PyCharm 的 content.dat.storageData 缓存的大小?
- c# - 在 Azure 中嵌入控制台应用程序和调度