Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从光栅中提取面积加权和为R中的多边形?

如何从光栅中提取面积加权和为R中的多边形?
EN

Stack Overflow用户
提问于 2017-02-20 23:31:15
回答 1查看 1.9K关注 0票数 1

我有一个栅格(属于“RasterLayer”类),它可以计数人,N.我有代表管理边界的多边形(类"SpatialPolygonsDataFrame")。

我想从栅格层中提取值到多边形中,以一种按覆盖多边形的栅格瓷砖面积的比例来加权的方式。假设有四个栅格块,值(4、8、12、16)重叠在一个多边形上。如果每个栅格中有25%与多边形重叠,我预计它们在多边形总数中的贡献是(1,2,3,4),而提取到该多边形中的总加权和为10。

基本上,我想做到以下几点:

代码语言:javascript
运行
AI代码解释
复制
 some_polygons$n_people = extract(count_raster$n_people, 
                                   some_polygons, 
                                   fun=sum, 
                                   weights=T, 
                                   na.rm=T)

但是,当我在R中运行此命令时,我会收到以下命令:

“警告信息:在.local(x,y,.)中:”weights=TRUE“改为”weights=TRUE“;”weights=TRUE“时不能使用其他函数

当使用权重时,r强制更改为fun=mean。我需要使用权重,以说明栅格在多边形中的比例,但是一个平均值不会让我计算我想要的数量。我需要找到一种方法,把栅格中的计数N加起来,用位于多边形内的栅格面积来加权(加权和而不是加权平均值)。有人知道我怎么能做到这一点吗?

我很高兴尝试使用其他空间数据类来实现这一目标。我尝试将光栅表示为SpatialPixelsSpatialPointsSpatialGrid,并使用sp::over()函数,但无法计算出所需的加权和。帮助是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-21 00:30:30

首先,请举出一个可复制的例子,这将有助于我们帮助你;)

*编辑--这对于版本raster v2.5-8有效,但不适用于raster v2.3-12__!

weights的解释如下:

如果为TRUE和normalizeWeights=FALSE,则该函数为每个多边形返回一个矩阵,该矩阵包含单元格值和每个单元格被多边形覆盖的近似分数(四舍五入为1/100)。如果为TRUE和normalizeWeights=TRUE,则对权重进行规范化,使它们相加为1。权重可用于平均;参见示例。如果多边形相对于Raster*对象的单元格大小很小,则此选项可能有用(但速度慢)。

所以你可以用它来计算加权和:

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

# Reproducible example
set.seed(13)
N = raster(nrows=4, ncol=4, xmn=0, xmx=4, ymn=0, ymx=4)
N[] = runif(16, 50, 100)

Ps1 = Polygons(list(Polygon(cbind(c(0.5,2.8,3.7,1.2,0.5), c(2,3.4,1.2,1.1,2)))), 
               ID = "a")
SPs = SpatialPolygons(list(Ps1))
poly = SpatialPolygonsDataFrame(SPs, data.frame(onecol = c("one"), 
                                                row.names = c("a")))
# See plot below
plot(N)
plot(poly, add=T, border='red')

# Extract with the arguments to get the appropriate weights 
# Check the version of your raster package for normalizeWeights!
myextr = as.data.frame(extract(N, poly, weights=T, normalizeWeights=F))
#      value weight
# 1 69.48172   0.16
# 2 98.10323   0.08
# 3 50.54667   0.61
# 4 78.71476   0.99
# 5 88.21990   0.17
# 6 93.66912   0.17
# 7 52.05317   0.87
# 8 83.05608   0.85
# 9 93.91854   0.43

# compute your weighted sum
mywsum = sum(myextr$value * myextr$weight)
# [1] 314.9164

*在编辑之前

raster v2.3-12中,论点normalizeWeights显然不存在,因此我不得不手动完成这项工作,并对光栅相对于多边形大小的分辨率提出警告(即需要一个完全封闭的单元格,否则就需要进行调整)。因此,这个答案下面的两个第一个评论。

代码语言:javascript
运行
AI代码解释
复制
Ps2 = Polygons(list(Polygon(cbind(c(0.5,2.8,3.7,1.2,0.5), c(2,3.4,1.2,0.2,2)))), 
               ID = "a")
SPs2 = SpatialPolygons(list(Ps2))
poly2 = SpatialPolygonsDataFrame(SPs2, data.frame(onecol = c("one"),
                                                  row.names = c("a")))
plot(poly2, add=T, border='blue', lty=3)

myextr2 = as.data.frame(extract(N, poly2, weights=T))

# compute the weight (cells fully enclosed = 1)
myextr2$weight2 = myextr2$weight/max(myextr2$weight)
#       value      weight weight2
# 1  69.48172 0.027777778    0.16
# 2  98.10323 0.013888889    0.08
# 3  50.54667 0.105902778    0.61
# 4  78.71476 0.171875000    0.99
# 5  88.21990 0.029513889    0.17
# 6  93.66912 0.052083333    0.30
# 7  52.05317 0.173611111    1.00
# 8  83.05608 0.173611111    1.00
# 9  93.91854 0.090277778    0.52
# 10 94.52795 0.003472222    0.02
# 11 78.31402 0.107638889    0.62
# 12 79.67737 0.048611111    0.28
# 13 68.22573 0.001736111    0.01

mywsum2 = sum(myextr2$value * myextr2$weight2)
# [1] 428.2086

这表明raster包已经很棒了,但仍在改进:-D

警告:尝试将normalizeWeightsraster v2.3-12一起使用时,它不会崩溃,也不会抛出错误,但不会执行任务,所以请注意并更新您的raster版本!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42361158

复制
相关文章
R中实现面积图 (Area plot)
面积图是一种基于折线图的图形,可以通过图中的面积来表示数据的大小情况,比如下面两种都是面积图:
生信编程日常
2020/05/26
1.4K0
python:如何从 URL 中快速提取域名?
有时候,我们要从一段很长的 URL 里面提取出域名。例如从https://www.kingname.info/2020/10/02/copy-from-ssh/,我需要获取的是kingname.info。
王图思睿
2021/06/16
9.6K0
如何从内存提取LastPass中的账号密码
简介 首先必须要说,这并不是LastPass的exp或者漏洞,这仅仅是通过取证方法提取仍旧保留在内存中数据的方法。之前我阅读《内存取证的艺术》(The Art of Memory Forensics)时,其中有一章节就有讨论从浏览器提取密码的方法。当你使用标准的用户名/密码方式登录一个网页,通常会发送一个包含了你的用户名及密码的post请求,这些都是以明文方式发送(这里不过多讨论SSL,在SSL内部也是明文发送的)。 本文描述如何找到这些post请求并提取信息,当然如果你捕获到浏览器登录,这些方法就很实用。
FB客服
2018/02/09
6K0
如何从内存提取LastPass中的账号密码
集成光路中的光栅
所谓光栅,就是通过一定的微加工手段,使得材料的折射率满足一定的分布,从而实现对光操控的一类光器件。典型的光栅结构,示意图如下,
光学小豆芽
2020/08/14
2.3K0
python计算多边形面积
本文提供一个简单的方法计算多边形面积,参考维基百科 实现代码: def polygon_area(polygon): """ compute polygon area polygon: list with shape [n, 2], n is the number of polygon points """ area = 0 q = polygon[-1] for p in polygon: area += p[0] * q[1]
DoubleV
2021/12/06
1.7K0
python计算多边形面积
如何从 Debian 系统中的 DEB 包中提取文件?
DEB 包是 Debian 系统中常见的软件包格式,用于安装和管理软件。有时候,您可能需要从 DEB 包中提取特定的文件,以便查看其内容、修改或进行其他操作。本文将详细介绍如何从 Debian 系统中的 DEB 包中提取文件,并提供相应的示例。
网络技术联盟站
2023/06/08
3.9K0
如何从 Debian 系统中的 DEB 包中提取文件?
Python中的加权随机
我们平时比较多会遇到的一种情景是从一堆的数据中随机选择一个, 大多数我们使用random就够了, 但是假如我们要选取的这堆数据分别有自己的权重, 也就是他们被选择的概率是不一样的, 在这种情况下, 就需要使用加权随机来处理这些数据
py3study
2020/01/06
2.2K0
光栅图形学的中的算法
——对《计算机图形学基础教程》胡事民等著 的补充
种花家的奋斗兔
2020/11/13
1.2K0
光栅图形学的中的算法
R语言提取PDF文件中的文本内容
综上步骤,我们便可以随便获取任意章节的任意内容。那么接下来就是对这些文字的应用,各位集思广益吧。
一粒沙
2019/07/31
10K1
首次在观测中证实霍金黑洞面积定理!他们从引力波中算出黑洞真实面积
通过一道黑洞合并后发出的引力波,麻省理工的科学家们推算出了黑洞合并前和合并后的面积。
量子位
2021/07/19
5280
如何提取PPT中的所有图片
1、 首先,我们打开一个含有图片的PPT,点菜单“文件”--“另存为”;在“另存为”对话框中,选择保存类型为“网页”,点保存; 2、打开我们保存文件的目录,会发现一个带有“******.files”的文件夹; 3、双击该文件夹,里面的文件类型很多,再按文件类型排一下序,看一下,是不是所有的图片都在里面了,一般图片为jpg格式的;
P轴
2022/11/18
7.2K0
访问和提取DataFrame中的元素
访问元素和提取子集是数据框的基本操作,在pandas中,提供了多种方式。对于一个数据框而言,既有从0开始的整数下标索引,也有行列的标签索引
生信修炼手册
2020/06/24
4.6K0
利用向量积(叉积)计算三角形的面积和多边形的面积
利用向量积(叉积)计算三角形的面积和多边形的面积: 向量的数量积和向量积: (1)  向量的数量积 (1)  向量的向量积 两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角
Angel_Kitty
2018/04/08
6.3K0
利用向量积(叉积)计算三角形的面积和多边形的面积
[WIS22] 从 R 中调用 Wolfram 语言
本文译自 Wolfram 2022 印度冬令营文章系列之一:https://community.wolfram.com/groups/-/m/t/2446943
WolframChina
2022/03/29
9340
[WIS22] 从 R 中调用 Wolfram 语言
从ceph对象中提取RBD中的指定文件
之前有个想法,是不是有办法找到rbd中的文件与对象的关系,想了很久但是一直觉得文件系统比较复杂,在fs 层的东西对ceph来说是透明的,并且对象大小是4M,而文件很小,可能在fs层进行了合并,应该很难找到对应关系,最近看到小胖有提出这个问题,那么就再次尝试了,现在就是把这个实现方法记录下来 这个提取的作用个人觉得最大的好处就是一个rbd设备,在文件系统层被破坏以后,还能够从rbd提取出文件,我们知道很多情况下设备的文件系统一旦破坏,无法挂载,数据也就无法读取,而如果能从rbd中提取出文件,这就是保证了即使文件系统损坏的情况下,数据至少不丢失
用户2772802
2018/08/06
5.2K0
HDOJ 2036 改革春风吹满地(多边形的面积)
Problem Description “ 改革春风吹满地, 不会AC没关系; 实在不行回老家, 还有一亩三分地。 谢谢!(乐队奏乐)”
谙忆
2021/01/20
2850
「R」从gtf文件中抽取基因id和name
参考文章http://www.bioinfo-scrounger.com/archives/342计算FPKM值,发现计算完每个基因下所有外显子的总长度后,记录的都是ENSEMBL gene id,而我需要的是symbol。奇怪的是GenomicFeatures既然把GTF文件读取进去了还抽取基因id了,但它就是不提供抽gene symbol的功能。
王诗翔呀
2020/07/03
4.9K2
如何更优雅的提取网页中的颜色?
估计每个做 Web 开发的同学都有自己的颜色选择器,因为我们经常会想要提取网页中的颜色。
ConardLi
2021/11/05
1.9K0
技巧 | OpenCV中如何绘制与填充多边形
很多人都问过我这个问题,OpenCV中是怎么绘制与填充多边形的,特别是填充多边形的。因为根据OpenCV中的多边形绘制函数,他们发现这是一个无解的问题。其实我在2017底做一个项目的时候当时会对得到的一个多边形边缘轮廓进行填充,我就发现OpenCV中的多边形绘制函数无法填充,但是其实换个函数就会顺利搞定,只是大家被OpenCV官方的教程误导思维定势,没有想到而已。下面我们就来详细说一下,OpenCV中的多边形绘制与填充问题。
OpenCV学堂
2020/08/11
3.6K0
技巧 | OpenCV中如何绘制与填充多边形
求解任意多边形的面积(平面内)
  平面内多边形的计算,也就是平面坐标系内多边形的计算,已知各定点坐标,有顺序的,逆时针或者顺时针。根据给出坐标求面积。
用户2038589
2018/09/06
8090

相似问题

R光栅包中的提取和重采样函数:面积加权值

29

如何从光栅中提取多边形?

12

多边形的面积加权空间连接

10

如何从光栅堆栈R中提取光栅层名称?

12

R光栅从点的xy坐标中提取多边形ID

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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