vector = st_transform(vector,projection(raster))
NA
raster_masked= mask(raster,as(vector,'Spatial')
vector$feature=raster::extract(raster,as(vector,'Spatial')
vector$buffer_feature=raster::extract(raster,vector,dist=n)#提取点的n米缓冲区内栅格数值
line_list=raster::extrac(raster,as(line,'Spatial'),along=T,cellnumbers=T)
#返回的对象是一个包裹在list对象里的矩阵,矩阵共两列,一列为raster对象的cellID,另一列为每个cell的值
line_df=map_dfr(zion_line$elev,as_data_frame,.id='ID') #提取栅格值矩阵
line_coords = xyFromCell(raster, line_df$cell) #根据cellID提取每个栅格的坐标
line_df$dist = c(0, cumsum(geosphere::distGeo(line_coords))) #计算累积点距离
最后形成的结果可以用来绘制沿线高程图。
polygon_raster_values=raster::extract(raster,as(polygon,'Spatial'),df=T)#返回对象为一个数据框,ID列为面对象的ID,数值列为ID所对应的面对象内的栅格值
dplyr::select(polygon_raster_values,ID,levels) %>%
gather(key,value,-ID) %>% group_by(ID,key,value)%>%
tally() %>%
spread(value,n,fill=0)#统计面对象内部不同类型栅格数量
首先,建立一个栅格模板
raster_template= raster(extent(vector),resolution,
crs=st_crs(vector)$proj4string)
利用栅格模板对sf对象进行栅格化
vector_raster = raster(vector,raster_template,parameter)
raster函数具有很强的灵活性
vector_raster_1= raster(vector,raster_template,field='ID',fun='count'or'sum',etc.)
#field参数选择为每个观测值都各不相同的列,则单个cell的数值如果为1的话,即表示该栅格不空;否则表明该栅格为空,此种类型的地理要素并不存在于此单元格中。
#fun函数为多个汇总函数,包括count\sum\min\max等,对于spatialLine对象,length函数也可以使用
线对象也可以进行栅格化,
line_raster= rasterize (as(line,'Spatial'),raster_template)
raster
函数的问题在于它比较慢,可以用fasterize::fasterize函数取代(不过目前支持面对象的栅格化)。
此外,gdalUtils::gdal_rasterize
函数可以处理更多类型的矢量数据,
point_vector = rasterToPoints(raster,spatial=T) %>% st_as_sf
#spatial=T 目的是为了保证转换后的对象是空间对象而非矩阵
raster::rasterToContour
,而仅用于等值线可视化的话常用的一些函数主要有basic::contour
rasterVis::contourPlot
tmap::tm_iso
。tm_shape(raster) +tm_raster() +tm_shape(rasterToContour(raster))+tm_iso()
#tmap包的用法似乎比较繁琐
raster::rasterToPolygons
,栅格值会被存在column 列中。另外一个更为高效的函数是spex:polygonize
,且该函数返回对象为sf类型。