学习记录二:地理/投影坐标系统解读 + 定义/转换投影
MODIS数据下载:此前根据王老师的教学视频学习下载了部分ET/NDVI数据(tif格式),现对所获数据进行初步处理,需要用研究区的矢量数据对栅格数据进行裁剪,以提取出所需研究区域数据。



使用矢量数据对栅格数据进行裁剪时,可以使用切片crop()或掩膜mask()操作。切片与掩膜操作要求两个对象的投影信息一致,否则会报错。
查看矢量 / 栅格数据的坐标系是否一致
得出二者坐标系不一致,矢量数据的坐标系为Clarke66 1866,栅格数据的坐标系为WGS1984。故需根据栅格数据投影信息对研究区矢量范围数据进行投影转换,使二者保持一致,方便后续处理。为更好的理解掌握坐标系的定义/投影转换相关知识,本篇进行系统学习。
一、地理坐标系和投影坐标系的解读
1.地理坐标系:地理坐标系是以椭球体面为参考面,以法线为依据,用经纬度表示地面点在椭球表面的位置的坐标系统。简单点来说,地理坐标系是用经纬度来表示地球表面物体的位置。
不同的地理坐标系的区别就在于用于拟合地球大地水准面的椭球大小和位置有关。我国常用的地理坐标系有GCS_Beijing_1954, GCS_Xian_1980,CS_WGS_1984,GCS_CN_2000)
地理坐标系由三个参数来定义:角度单位(Angular Unit)、本初子午线(Prime Meridian)和大地测量系统(Datum)。
2.投影坐标系:将球面坐标转为平面坐标的过程为投影。投影坐标系的实质是平面坐标系统,地图单位通常为(米)。投影坐标系=地理坐标系+投影函数算法。投影坐标系通俗来讲就是把地球椭球展平在地图上画出来,既然已经有地理坐标系能够准确表达物体位置了,为啥还需要投影坐标系呢?主要是制图需要,还可以进行长度和面积的量测等。
3.二者之间的联系:
地理坐标系进行地图投影后就变成了投影坐标系。坐标系是数据或地图的属性,而投影是坐标系的属性。一个数据或一张地图一定有坐标系,而一个坐标系可以有投影也可以没投影。只有投影坐标系才有投影,地理坐标系是没有投影的。因此,一个数据或一张地图亦是可以有投影也可以没投影的。当然,非要较真,把具有地理坐标系的数据显示在平面地图上肯定也有一个投影的过程。
总结:地理坐标系经过投影后变成投影坐标系,投影坐标系因此由地理坐标系和投影组成,投影坐标系必然包括有一个地理坐标系。下图概括了两种坐标系的联系:

4.投影坐标系示例:WGS_1984_UTM_Zone_49N

该投影坐标系由两部分组成:名为“通用横轴墨卡托(Universal Transverse Mercator,UTM)的“投影”和名为“GCS_WGS_1984”的“地理坐标系”。
UTM_Zone_49N:通用横轴墨卡托投影,投影带为北半球第49带
WKID:该坐标系的编号为32649
ESPG:是“European Petroleum Survey Group”的缩写,表示其由“欧洲石油调查组织”发布,WGS 1984地理坐标系统的ESPG编码值是:4326
二、ArcGIS Pro 中转换投影坐标
投影变换可以理解为不同坐标系之间的转换,按照坐标系的不同可以分为:
输入和输出的地理坐标系不同:先转换地理坐标系,再转换为投影坐标系
输入和输出的地理坐标系相同:直接转换投影坐标系
1.矢量数据——投影和变换



2.栅格数据——投影栅格

三、R语言中定义+转换投影坐标
sf 是一个读取、写入、操纵、计算simple features对象的工具包。raster是基于rgdal底层库编写的地理数据处理包,包括图像的创建、读取、运算、可视化。本篇使用sf/raster工具包中的相关函数创建空间矢量/栅格对象,以及设置和转换矢量/栅格对象的投影坐标信息。
1.定义CRS:定义过的坐标系统能够赋予空间对象。它可以赋给没有坐标参考系的对象,也可以覆盖已存在的坐标系统(后者只有在能确定对象原有的坐标系统是错误的情况下才会使用)。
定义坐标系统有两种方法:①使用EPSG代码(https://spatialreference.org/ref/epsg/);②使用Proj4格式化的字符串(https://proj.org/apps/proj.html)。这两种方法在sf和raster工具包中都可以使用。
(1)矢量数据
假设s.sf原本不存在坐标参考系CRS,使用st_set_crs()函数进行手动指定
如果s.sf原本有CRS,定义时会有如下提示:

①使用EPSG代码
②使用proj4字符串
(2)栅格数据
①使用EPSG代码
②使用proj4字符串
2.CRS转换:将空间对象的坐标映射到其他坐标系统上去,这个过程会产生新的坐标取值。
(1)矢量数据
矢量投影转换使用的函数是st_transform(),语法结构如下:
①使用EPSG代码
②使用proj4字符串
③使用包含目标投影方式的对象作为模板
(2)栅格数据
栅格投影转换使用的函数是projectRaster(),语法结构如下:
projectRaster()函数有两种方式进行投影:
* 指定目标投影方式的WKT文本,即参数crs
* 指定包含目标投影方式的栅格对象作为模板,即参数to
①使用EPSG代码
②使用proj4字符串
③使用包含目标投影方式的对象作为模板
根据王老师的文章,还可以用terra包重投影,能看懂,累了,不想学了~~~
四、保存数据到本地
1.将矢量数据以shp格式保存在本地,可以使用sf中的st_write()函数或它的别名函数wrtite_sf()
2.将栅格数据以tif格式保存在本地

附1:查看proj4参数的方法
提取WKID/EPSG代码(ArcGIS)—将数字放到网站http://spatialreference.org/ref/上进行检索



附2:学习参考文章
bilibili:

CSDN:
文章1:sf | 创建空间矢量对象及其投影设置
https://blog.csdn.net/weixin_54000907/article/details/114529757
文章2:raster | R语言中的空间栅格对象及其基本处理方法(Ⅰ)
https://blog.csdn.net/weixin_54000907/article/details/118919732
文章3:R语言中的地理/投影坐标系统(上)
https://blog.csdn.net/weixin_54000907/article/details/124977348
文章4:R语言中的地理/投影坐标系统(下)
https://blog.csdn.net/weixin_54000907/article/details/125026119
知乎:
文章1:R语言Raster包和Terra包栅格读写、计算和一些使用经验分享
https://zhuanlan.zhihu.com/p/438070027
文章2:raster | R语言中的空间栅格对象及其基本处理方法(Ⅱ):投影、属性提取
https://zhuanlan.zhihu.com/p/395603299

基础过于薄弱,学起来太费劲了,简单的内容也要花好久理解~~~


