其他
rgee矢量提取栅格像元值——全球水库数据高程值是如何提取的
rgee矢量提取像元值——全球水库数据高程值是如何提取的
前面给大家分享了一个全球水库分布数据,原始数据是没有水库所在地高程信息的,我补充了高程信息,下面讲讲具体做法。
全球水库高程值提取思路
提取水库点要素所在地高程值很简单,在ArcGIS中使用Extract value from points工具即可实现从DEM(栅格数据)到水库点(矢量数据)的信息提取,关键是如何获取全球范围的呢?如果想获取比较高精度的高程,肯定是DEM分辨率高一些比较好,一般常用的是30m分辨率DEM,但是全球数据量很大,在本地处理很困难,Google Earth Engine给我们提供了新的全球海量数据处理手段。
要想获取全球水库高程值,最方便就是使用Google Earth Engine来提取高程信息了,具体怎么做呢?
rgee矢量提取栅格信息
rgee
中有ee_extract
函数来提取信息,可以实现类似ArcGIS Extract value from points的功能。
read_sf
读取SHP矢量sf_as_ee
将SF对象转化为谷歌矢量对象ee_extract
使用矢量提取栅格值x:ee$Image 栅格 y: ee$Geometry 矢量 scale:尺度,确定使用多大分辨率数据来进行提取 fun:需要使用 Reducer
函数,确定提取方法,参考:rgee学习笔记之rgee get startedsf = T,输出sf对象,即R语言中的矢量
library(rgee)
library(sf)
ee_Initialize()
#获取水坝数据
Gdam = read_sf("./Gdam/dam5k.shp")%>%
sf_as_ee()
NASADEM = ee$Image("NASA/NASADEM_HGT/001")
#提取高程值
dam1 = ee_extract(NASADEM, Gdam, scale = 30, fun = ee$Reducer$first(), sf=T)
st_write(dam1, "dam2.shp")
需要注意的是,受GEE限制,矢量一次只能处理5000个,而全球大坝数据总共超7K个,怎么办呢?需要先在QGIS里把数据分成小份,然后再使用rgee
进行计算。
QGIS中的处理
为了满足rgee
矢量数据限制,需要进行以下处理:
把全球大坝数据属性表先删除,只保留ID用于挂接 大坝数据属性表内容很多,数据量很大,直接在 rgee
中调用会报错
打开属性表,Select by Expression,把ID<5000的选中
另存这4999个点,然后属性表中反选,另存剩下的点 使用rgee对这些点提取高程值 给原始的大坝SHP数据挂接提取后的高程SHP
字段计算,即可得到带有高程的大坝点数据
参考文献
rgee学习笔记之rgee get started 【更新】rgee: An R package for interacting with Google Earth Engine GIS数据读取与转换 GIS基础之GIS属性表操作 https://r-spatial.github.io/rgee//reference/ee_extract.html
点击阅读原文参加视频课程学习