Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用像素计数法获得R区土地覆盖栅格面积估计的有效方法吗?

用像素计数法获得R区土地覆盖栅格面积估计的有效方法吗?
EN

Stack Overflow用户
提问于 2018-05-15 02:49:23
回答 1查看 645关注 0票数 2

我想用像素计数法得到每个多边形的面积估计。最初的陆地覆盖图是栅格数据,并为每个像素(地物图图例)分配了一个独特的类。然而,用像素计数来获得区域估计对我来说是不直观的。也许,我能做的第一件事就是提取每个多边形的所有像素,这些像素表示每个多边形内土地覆盖等级的分布信息。在此基础上,采用像素计数法对城市、农业各多边形的土地/土壤覆盖面积进行估算和汇总。对我来说,用像素计数来获得区域估计并不简单,也不知道如何在R中完成这一任务。

请注意,原始的陆地覆盖图相当大(约92mb),很难为地物光栅提供可复制的例子,所以请原谅我的这种不便。以下是获取地物栅格的R脚本:

代码语言:javascript
运行
AI代码解释
复制
library(raster)
library(R.utils)

url = "https://cidportal.jrc.ec.europa.eu/ftp/jrc-opendata/LUISA/PrimaryOutput/Europe/REF-2014/JRC_LUISA_Input_Corine_land_cover_2006_r_ref_2014.zip"
download.file(url, basename(url))
gunzip(basename(url))
rname <- list.files(getwd(), "tif$")
land_cover <- raster::raster("~/LUISA_CLC_land_coverage/clc06_r.tif")

我想聚合每个多边形的所有土地/土壤覆盖信息(总共403个要聚合的土地覆盖信息多边形);下面是用于面积估计的多边形:带有多边形的shapefile可免费使用。

我把原始的地物栅格剪成如下:

代码语言:javascript
运行
AI代码解释
复制
deu_shp = maptools::readShapePoly("~/adm2.shp",
                                  proj4string=crswgs84,verbose=TRUE)
deu_proj <- spTransform(deu_shp, CRSobj = land_cover@crs)
land_cover_deu <- crop(land_cover, deu_proj )

为了理解像素计数的面积估计,我搜索了相关的文章,发现:利用遥感技术估测作物面积和本文中提出的思想与我的兴趣是一致的,但实现所提出的方法纯粹是理论上的,在R中很难做到。我很好,如果有任何快速和肮脏的方法得到面积估计与像素计数,其中土地/土壤覆盖信息(如城市,森林,农业用地)必须聚合到每个多边形(带有多边形的shapefile可免费使用。)。

对于像素提取,我可以使用raster::extract,如下所示(下面的代码是试用的):

代码语言:javascript
运行
AI代码解释
复制
lapply(deu_proj, function(x) {
    pixel_extract = raster::extract(land_cover_deu, deu_proj[x,])
    pixel_extract= as.data.frame(pixel_extract)
})

以上简单的像素提取对于原始的土地覆盖栅格并不是很有效。我不知道如何对每个多边形中提取的像素进行像素计数,并得到相应的面积估计(如城市、森林、农业面积等)。

有什么办法在R里实现吗?对于给定的土地覆盖栅格,如何利用像素计数方法进行面积估计?是否有可能将土地/土壤覆盖信息聚合到每个多边形?提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-15 04:44:25

下面是一个按多边形(一种称为表格区域的操作)获取每个土地覆盖类像素数的工作流。其想法是利用分辨率和土地覆盖栅格的范围,对shapefile进行栅格化。然后,使用一个基于data.table的非常有效的函数计算表面积,该函数计算每个多边形中每个类的像素数。

代码语言:javascript
运行
AI代码解释
复制
# add ID field to the shapefile
deu_proj@data$ID <- 1:nrow(deu_proj@data)

# extract extent and resolution of land cover raster
ext <- extent(land_cover_deu)
ext <- paste(ext[1], ext[3], ext[2], ext[4])
res <- paste(res(land_cover_deu)[1], res(land_cover_deu)[2])

# rasterize shapefile using gdal (more efficent than rasterize from raster package)
# you can change GDAL_CACHEMAX according to your RAM
system(paste0("gdal_rasterize --config GDAL_CACHEMAX 8000 -a ID -te ",
               ext," -tr ", res,
               " -ot Int16 /home/deu_proj.shp /home/zones.tif"))

# load raster
zones <- raster("/home/zones.tif")

# zonal stats using myZonal function
Zstat <- myZonal(land_cover_deu, zones)

# reshape output    
results <- data.table::dcast(Zstat, z ~ vals)
colnames(results)[1] <- "ID"

# merge data
deu_proj@data <- plyr::join(deu_proj@data, results, by="ID")

# show results
head(deu_proj@data[, c(8, 17:ncol(deu_proj@data))])

NAME\_2 0 1 2 3 4 5 6 7 8 9 10 11 12 15 16 18 20 21 22 23 24 25 26 1 Alb-Donau-Kreis NA 241 4504 781 1317 NA NA 357 NA NA NA 133 57460 NA NA 7212 19899 1627 NA 16403 6628 15248 135 2 Böblingen NA 369 4947 1599 1140 NA NA 149 87 116 98 438 17845 NA 1712 1717 4742 3079 NA 3988 2286 14557 NA 3 Baden-Baden NA 45 791 150 306 NA 83 33 NA NA 38 41 695 338 602 721 468 92 NA 1090 2272 4401 NA 4 Biberach NA 201 4681 462 1264 NA 152 312 NA 48 NA 131 46163 NA 29 23780 19126 920 NA 2291 28679 5140 NA 5 Bodenseekreis NA 268 3219 561 814 7 169 81 NA NA NA 76 9482 418 5403 4750 19105 804 NA 96 9151 8797 NA 6 Bodensee NA NA 13 1 NA 9 NA NA NA NA NA 3 NA NA NA 1 2 NA NA NA NA 4 NA 27 29 30 31 32 34 35 36 37 39 40 41 42 43 45 46 128 1 NA 581 NA NA NA NA 104 NA NA NA NA 397 NA NA 2643 40 NA 2 NA 801 NA NA NA NA NA NA NA NA NA NA NA NA 2001 58 NA 3 NA 1117 NA NA NA NA 157 NA NA NA NA 79 NA NA 486 1 NA 4 NA 2063 NA NA NA NA 1105 273 NA NA NA 384 NA NA 3760 25 NA 5 NA 240 NA NA NA NA 299 NA NA NA NA 193 NA NA 2476 66 45 6 NA NA NA NA NA NA 4 NA NA NA NA 415 NA NA 20 1 27563

纬向统计函数(改编自这里)

代码语言:javascript
运行
AI代码解释
复制
myZonal <- function (x, z, digits = 0, na.rm = TRUE) { 
  vals <- raster::getValues(x) 
  zones <- round(raster::getValues(z), digits = digits) 
  rDT <- data.table::data.table(vals, z = zones) 
  plyr::count(rDT) }

样本数据

代码语言:javascript
运行
AI代码解释
复制
# I have loaded the shapefile using getData but you can use your own shp.
# The only difference will be in the column numbers of "show results" step.
deu_shp <- getData("GADM", country="DEU", level=2)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50348320

复制
相关文章
Facebook 推送通知 Linkshim 绕过
在浏览和查找facebook漏洞时,我不小心发现了这个 facebook 推送通知链接
Khan安全团队
2022/01/21
1.2K0
Element NavMenu 默认展示一个菜单的子菜单,点击其它菜单会折叠的解决方法
遇到一个问题:NavMenu设置默认展开一个菜单,但是点击另一个菜单的子菜单赋值时会折叠起来 。
tianyawhl
2020/03/03
6.8K0
实现一个简单的类似不蒜子的PV统计器
内部的放到gitlab pages的博客,需要统计PV,不蒜子不能准确统计,原因在于gitlab的host设置了strict-origin-when-cross-origin, 导致不蒜子不能正确获取referer,从而PV只能统计到网站的PV。
JadePeng
2021/12/04
5660
mybatis中的动态sql表现为_MybatisPlus
Mybatis如何分页查询?Mysql中可以使用limit语句,但limit并不是标准SQL中的,如果是其它的数据库,则需要使用其它语句。MyBatis提供了RowBounds类,用于实现分页查询。RowBounds中有两个数字,offset和limit。
全栈程序员站长
2022/11/09
1.1K0
mybatis中的动态sql表现为_MybatisPlus
在鼠标点击的位置 ,添加一个div ,类似手表右键菜单
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> New Document </title> <script src="styles/default/js/jquery-2.1.0.min.js"></script> </head> <style type="text/css"> .modle { width: 100px; cursor: pointer;
用户7705674
2021/09/23
1.6K0
Ant Design Pro 中 点击子菜单的时候,其他菜单不自动收起来
记录一波自己在这段时间碰到的一个Ant Design Pro 的坑:  每次点击菜单都会将其他菜单自动收起来,导致一系列的用户体验不佳。
TimothyJia
2022/12/10
1.6K0
Android-SubMenu选项菜单和子菜单
简介: SubMenu:代表一个子菜单,包含1~N个MenuItem 实现效果: 具体实现方法: 主活动 MainActivity: public class MainActivity extends AppCompatActivity { //定义 “字体大小” 菜单项的标识 final int FONT_10 = 0x111; final int FONT_12 = 0x112; final int FONT_14 = 0x113; final int FON
圆号本昊
2021/09/24
1.3K0
Android-SubMenu选项菜单和子菜单
Jump Start Bootstrap 第3章
在这一章,我们将开始使用Bootstrap的一些非常有用的HTML组件。诸如按钮、标题(headers)、导航菜单和评论系统的组件经常被用在网站上。通过组件,Bootstrap可以简单和快速的帮我们在网站上添加这些功能。
Remember_Ray
2018/12/20
14.1K0
Jump Start Bootstrap 第3章
Facebook、苹果积极引导,AR市场形势乐观
近日,VR基金公布了第二季度的AR市场情况,该研究显示,共有150家公司致力于研究AR技术。 风险投资基金共募集了5000万美元投资于AR初创企业,与第一季度相比,重点关注AR的公司数量增长了60%。
VRPinea
2018/05/16
6010
CSS中的计数器
     <p>Place the flour in a large bowl, make a well in the centre and pour in the milk and eggs. Give the liquid mixture a quick whisk before incorporating the flour. Continue to whisk until you have a smooth batter.</p>
大江小浪
2018/07/25
1.4K0
五年五个头显的Facebook,下一站将走向何处?
(VRPinea 4月8日讯)自Facebook的第一款消费级VR头显问世之日起,已过去了5年的时间。作为一种媒介,VR依然处于非常早期的发展阶段,现在的从业者正在为将来的交互编写语法。五年前是这样,现在依然是这样。
VRPinea
2021/04/09
4760
五年五个头显的Facebook,下一站将走向何处?
实现一个栈类,类似STL中的栈
Christal_R
2017/12/25
1.1K0
实现一个栈类,类似STL中的栈
速读原著-GRUB_多系统引导(菜单命令)
菜单命令只能用于grub配置文件的全局配置部分,不能用在grub命令行交互界面,菜单命令在配置文件中应放在其它命令之前。 1、default //设置默认启动的菜单项 2、fallback //设置启动某菜单项失败后反回的菜单项 3、hiddenmenu //隐藏菜单界面 4、timeout //设置菜单自动启动的延时时间 5、title //开始一个菜单项
cwl_java
2020/02/14
9580
【说站】python PyQt子菜单的使用
以上就是python PyQt子菜单的使用,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/24
8780
android 软软的动画弹出菜单,基于Facebook的Rebuond
︿( ̄︶ ̄)︿我是路过的DEMO : https://github.com/CarGuo/AnimationMenu
GSYTech
2018/08/22
9450
android 软软的动画弹出菜单,基于Facebook的Rebuond
如何将深度学习研究论文实现为代码的几个要点
正如我所说的,能够将一篇论文转换成代码绝对是一种超超能力,尤其是在像机器学习这样每天都在快速发展的领域。
AiCharm
2023/05/15
2800
如何将深度学习研究论文实现为代码的几个要点
将新建文档添加回Ubuntu 18.04中的右键菜单
当我最近转移到Ubuntu 18.04时,我注意到Nautilus的右键菜单中没有选项来创建一个空文本文件。 当然,我可以使用命令行快速创建新文档,甚至可以使用文本编辑器创建新文件,但这不是我想要的。 我还在寻找旧样式的右键单击菜单,它可以帮助我创建一个新的文本文件,只需点击一两下即可。
知忆
2021/06/12
7740
windows&Ubuntu双系统修改启动菜单引导顺序
我的第三个是win11,所以修改成2,大家自己研究第一个为啥是0,第3个为啥是2。作为写代码的你,这还能难道你吗。
手撕代码八百里
2022/05/25
1.7K0
点击加载更多

相似问题

引导Navbar折叠下拉子菜单

10

引导3-带有子菜单的Navbar菜单

15

将资料UI菜单呈现为<nav>,其子菜单呈现为<a>?

13

Navbar没有显示子菜单。

13

引导活动菜单更改Navbar高度

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档