Geotrellis学习笔记(一)——核密度分析

更新时间:2023-07-31 06:37:37 阅读: 评论:0

Geotrellis学习笔记(⼀)——核密度分析
大自然的神奇现象
在geotrellis环境下成功运⾏了helloworld之后,我第⼀个尝试的核密度计算~整个过程还是挺艰难的。。。因为对scala⾮常地不熟,基本属于边写边学的状态T^T
嗯。。⾸先 核密度分析是什么
官⽅⽂档⾥对核密度分析有⼀段这样的介绍:
Kernel density is one way to convert a t of points (an instance of vector data) into a raster. In this process, at every point in the point t, the contents of what is effectively a small Tile (called a Kernel) containing a predefined pattern are added to the grid cells surrounding the point in question (i.e., the kernel is centered on the tile cell containing the point and then added to the Tile). This is an example of a local map algebra operation. Assuming that the points were sampled according to a probability density function, and if the kernel is derived from a Gaussian function, this can develop a smooth approximation to the density function that the points were sampled from. (Alternatively, each point can be given a weight, and the kernel values can be scaled by that weight before being applied to the tile, which we will do below.)
孕妇打喷嚏—
—⾸先,核密度分析是⼀种将点要素的集合(⽮量数据)转换为栅格数据的⼀种⼿段。在这个例⼦⾥,对于每⼀个点来说,其实是⼀块⼩⽡⽚(被称为核)
核密度的作⽤是:“ 使⽤核函数根据点或折线要素计算每单位⾯积的量值以将各个点或折线拟合为光滑锥状表⾯。”
嗷懂了~做核密度分析就好⽐把离散的点想成⼀个个的⼭顶,然后我们要利⽤这些⼭顶的位置还原出⼀个地表⾯(差不多是这样吧。。)
离婚协议书范文为了进⾏核密度分析,⾸先要⽣成⼀批点数据:
Scala中的yield的主要作⽤是记住每次迭代中的有关值,并逐⼀存⼊到⼀个数组中。
scala中的for循环是有返回值的,这⾥返回的就是 PointFeature[Double]
这样就⽣成了1000个带有权重的点要素,这⾥权重的范围为(0,32):
然后定义⼀个⾼斯核函数,并且⽤⾼斯核函数⽣成tile:
礼貌礼节
⽣成的kde结果如下:
array⾥⾯记录的就是280000个像素的值,这⾥的tile应该不是⽡⽚的意思,就是⼀张⼤图然后把这种图输出:
下⾯这张图就是输出的结果:
放⼤来看:
可以看到每⼀⼩块的边长都是9,这个边长就是前⾯的那个kernelWidth。 可以看到这⾥是⼀个离散点就对应了⼀个⽅块,⽅块⾥的值都是中⼼最⾼然后慢慢下降的,可以想象,当kernelWidth很⼤的时候,就会形成⼀张全覆盖的栅格图像,这就是上⾯概念⾥说的“光滑锥状表⾯”。
然后我们对这张⼤图进⾏分割:
将这张⼤图切成28块
然后我们可以计算出⼀个点对应的⽅块范围是多少:
也就是上图的这个范围。
然后我们考虑为图像编号,编号的⽅式为:(int,int),即(column,row):
然后我们就可以把所有点赋予⼀个空间索引,这段代码的作⽤是计算每⼀个点对应的空间格⽹的编号:
假设pts映射到格⽹的结果是
p1→grid1    p2→grid2    p3→grid2    将结果按照grid的编号进⾏groupby
groupby之后的结果:
猴哥儿
可以看到1000个点都被映射到了⼤格⽹下,我原以为这⾥⼤格⽹的个数是28个,但发现这⾥index是从0开始的,⼀共有40个⼤格⽹,1000点占了其中的37个
⼀开始我不是很懂的是为什么产⽣了8*5个格⼦,⽽不是7*4个,后⾯⼜是怎么变回7*4个的?
北京公租房申请条件嗯后来知道应该是因为这⾥计算的是9*9的⼩格⼦占的格⽹数,位于边缘处的点占的格⼦可能会超出范围
然后,将每⼀个⼤格⽹单独进⾏核密度分析:
最后:
注意,这⾥⽤了until,说明r和c都值遍历0~3 以及0~6,即遍历28遍
金砖会议
getOrEl() ⽅法: 可以使⽤ getOrEl() ⽅法来获取元组中存在的元素或者使⽤其默认的值
运⾏结果是28个100*100的⽡⽚:能量英语

本文发布于:2023-07-31 06:37:37,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1102802.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:编号   要素   密度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图