R语言学习记录:关于矢量和栅格的坐标系|如何定义投影和重投影
https://spatialreference.org/
https://epsg.io/
这两个网站可以查找CRS字符串(proj4、WKT、EPSG)
https://products.aspose.app/gis/transformation
这个网站可以在线转换WGS和UTM
1.查看CRS的方法
矢量:
栅格:
2.定义CRS的方法
(注意是定义CRS,原来没CRS,现在要赋予一个CRS)
2.1矢量:
法1:指定epsg代码
法2:指定proj4字符串
2.2栅格:
3.重投影
(注意与定义投影的区别,原来有CRS,现在更换CRS)
3.1矢量重投影
3.1.1 sf包重投影
法1:sf包指定epsg代码
法2:sf包指定proj4字符串
法3:sf包用一个对象的crs(有的教程里说需要添加“asText=T”,这样才能作为字符串输出并作为新的输入,但是我自己测试了一下,好像不用也可以)
3.1.2 terra包重投影
和下面的terra包栅格投影是一样的,看完后面就懂了。
3.2栅格重投影
3.2.1raster包重投影

法1:raster包指定EPSG代码
法2:raster包指定proj4字符串
法3:raster包用另一个对象的crs
3.2.2terra包重投影

法1:用另一个对象的CRS作为参考
法2:指定EPSG代码
法3:指定proj4字符串或者WKT字符串
别用字符串重投影,真的太麻烦了!
4.学习过程中遇到的问题
太长不看版总结:不能用定义投影的函数去重投影。
用投影坐标系转地理坐标系进行测试:
crs函数结果显示proj4和WKT2,节选proj4的部分如下:
用crs函数试图将投影坐标系转为地理坐标系:
函数能运行,看看crs的结果
结果表明虽然代码能运行,但是用plot函数查看,会发现还是投影坐标系的坐标

把它写出来导到arcmap里看看能不能运行

然后用projectRaster函数重投影
但是出来一个警告信息

警告说:前后crs一致。那么说明前面的用定义投影的函数是运行过的。
此时再plot一下重投影之后的栅格b
plot的结果和上面“舔狗之怒”一样,坐标单位仍然是m
写出来再导到arcmap看看

这个时候就可以初步下结论了:用定义投影的函数作用于一个已经有投影的栅格后,再用重投影函数也还是不起作用。
为了验证这个结论,进行如下操作:
把变量清空,重新导入原始栅格,直接用projectRaster函数重投影
查看此时b的crs结果
此时的crs结果和刚开始一样,plot之后坐标会改变吗?try it

再写出来导到arcmap,观察结果如何

arcmap可以显示并且坐标变成了经纬度。
总结:不仅不能用定义投影的函数去重投影,而且在错误使用该函数后再用重投影函数也还是会报错。只能一开始就用重投影函数。