后升级版SF工具包采用新PROJ6.0C及更先进软件库技术,显著扩宽我们的学习及运用领域。值得注意的是,虽然PROJ与R中的proj4均基于PROJC库,但两者间具备各自的特点并且可以独立运行。
借助Proj6.0C库中的最新科技成果(特别是WellKnownText,简称WKT以及升级版WKT2),我们得以实现全新的地球参考球体数据输入方式,显著提高坐标系的精度和稳定性,使之具备更强的扩展能力。这类创新性的格式设计以标志性的特殊字符标记为特点,使编码过程更加直观明确,从而全面提升了我们的坐标系统性能。
load(url("https://github.com/mgimond/Spatial/raw/main/Data/Sample1.RData"))
rm(list=c("inter.sf", "p.sf", "rail.sf"))
sf对象的坐标系统提取
library(sf)
新版本sf工具包提供了便捷的空间参考系统信息获取渠道,只需运用st_crs()函数,即可瞬息之间获取所需信息。不需要复杂的编码过程,只需简单操作,犹如当代神探,瞬间掌握特定位置详尽数据资讯。特别的是,这一功能甚至也支持自定义EPSG码输出或者根据大地基准面和投影法生成字符串,从而做到数据个性化识别。
sf_extSoftVersion()[1:3]
## GEOS GDAL proj.4
## "3.9.1" "3.2.1" "7.2.1"
栅格对象的坐标系统提取
st_crs(s.sf)
## Coordinate Reference System:
## User input: EPSG:26919
## wkt:
## PROJCRS["NAD83 / UTM zone 19N",
## BASEGEOGCRS["NAD83",
## DATUM["North American Datum 1983",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## ID["EPSG",4269]],
## CONVERSION["UTM zone 19N",
## METHOD["Transverse Mercator",
## ID["EPSG",9807]],
## PARAMETER["Latitude of natural origin",0,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8801]],
## PARAMETER["Longitude of natural origin",-69,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8802]],
## PARAMETER["Scale factor at natural origin",0.9996,
## SCALEUNIT["unity",1],
## ID["EPSG",8805]],
## PARAMETER["False easting",500000,
## LENGTHUNIT["metre",1],
## ID["EPSG",8806]],
## PARAMETER["False northing",0,
## LENGTHUNIT["metre",1],
## ID["EPSG",8807]]],
## CS[Cartesian,2],
## AXIS["(E)",east,
## ORDER[1],
## LENGTHUNIT["metre",1]],
## AXIS["(N)",north,
## ORDER[2],
## LENGTHUNIT["metre",1]],
## USAGE[
## SCOPE["Engineering survey, topographic mapping."],
## AREA["North America - between 72°W and 66°W - onshore and offshore. Canada - Labrador; New Brunswick; Nova Scotia; Nunavut; Quebec. Puerto Rico. United States (USA) - Connecticut; Maine; Massachusetts; New Hampshire; New York (Long Island); Rhode Island; Vermont."],
## BBOX[14.92,-72,84,-66]],
## ID["EPSG",26919]]
对于高精度网格对象采用Raster工具箱的CRS()函数进行细粒度分析,以获取更加精准的结果。然而,由于现阶段软件暂无生成规范化WKT字符串的功能,可能会对使用体验产生一定影响。不过无需担忧,通常我们可以采取指定EPSG编码来建立全球性的坐标系统,以此确保数据在全球范围内的准确性和精度。这种方法简单而有效,是解决类似问题的理想方式。
EPSG代码与WKT字符串的对决
PROJC最新功能提供两种设置坐标系方式:直接输入EPSG编号及运用WKT字符串进行精密定义。前者简便快捷,而后者则能更精确自如应对各类复杂环境。例如,elev.r所用坐标系统采用广泛使用的通用墨卡托投影第十九分带,参照NAM1983大地基准进行定位,保证在球体范围内的精准数据定位。
library(raster)
crs(elev.r)
## CRS arguments:
## +proj=utm +zone=19 +datum=NAD83 +units=m +no_defs +ellps=GRS80
## +towgs84=0,0,0
手动指定坐标系统的魅力
在处理无原始坐标的数据时,利用ST_Set_Crs()函数手动设置坐标参考系统是理想之选。虽然WKT字符串中的PROJCRS和BASEGEOGCRS参数可能存在波动,但不会影响数据的精准定位。在方便之时,引用EPSG代码进行赋值更具有效性。
栅格数据的投影定义
除了SF元素,通过使用PROJ4格式化字符串来设置栅格数据的投影参数同样是非常有效的方法。这种方式操作简便,只需要运用CRS()函数就能完成。然而,当空间对象本身缺少精确的坐标数据时,就必须依靠定期更新的EPSG编码,以此快速确认栅格坐标系统,从而保证数据在地球表面的准确定位,避免不必要的误差。
重现软件中已定义坐标系统的参数
s.sf <- st_set_crs(s.sf, "+proj=utm +zone=19 +ellps=GRS80 +datum=NAD83")
为了保证数据维度的精准定位,我们首先需要选择具有内置地理位置系统参数的修复软件,如ArcGIS,从中获得WKID/EPSG编码并上传至网络服务器以便后续查询。例如,当使用ArcGIS时,只需通过坐标系属性便可轻松获取所需的WKID编码。虽然这一过程相对繁琐,但却能够确保我们的数据在世界各地的精确查找。
st_crs(s.sf)
## Coordinate Reference System:
## User input: +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83
## wkt:
## PROJCRS["unknown",
## BASEGEOGCRS["unknown",
## DATUM["North American Datum 1983",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]],
## ID["EPSG",6269]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8901]]],
## CONVERSION["UTM zone 19N",
## METHOD["Transverse Mercator",
## ID["EPSG",9807]],
## PARAMETER["Latitude of natural origin",0,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8801]],
## PARAMETER["Longitude of natural origin",-69,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8802]],
## PARAMETER["Scale factor at natural origin",0.9996,
## SCALEUNIT["unity",1],
## ID["EPSG",8805]],
## PARAMETER["False easting",500000,
## LENGTHUNIT["metre",1],
## ID["EPSG",8806]],
## PARAMETER["False northing",0,
## LENGTHUNIT["metre",1],
## ID["EPSG",8807]],
## ID["EPSG",16019]],
## CS[Cartesian,2],
## AXIS["(E)",east,
## ORDER[1],
## LENGTHUNIT["metre",1,
## ID["EPSG",9001]]],
## AXIS["(N)",north,
## ORDER[2],
## LENGTHUNIT["metre",1,
## ID["EPSG",9001]]]]
总结:sf工具包的未来
借助最新版的SF工具包和PROJ6.0C库,我们得以充分利用其强大的综合性能。不论是获取地理信息的单位,或者是转换栅格数据的投影格式,均能够通过这两者达到高效率的流程简化。尽管应用过程中可能遇到挑战,但只要合理运用相关技巧,即可轻松应对。在此,我想请教大家一个问题:关于未来工作中的坐标系统设定,您更倾向于采用EPSG码还是WKT字符串作为定义方式呢?期待您在评论区留下宝贵意见并分享您的实践经验。
s.sf <- st_set_crs(s.sf, 26919)