本文主要是介绍Geotrellis学(踩)习(坑)笔记(一)——核密度分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在geotrellis环境下成功运行了helloworld之后,我第一个尝试的核密度计算~整个过程还是挺艰难的。。。因为对scala非常地不熟,基本属于边写边学的状态T^T
嗯。。首先 核密度分析是什么???
官方文档里对核密度分析有一段这样的介绍:
Kernel density is one way to convert a set of points (an instance of vector data) into a raster. In this process, at every point in the point set, 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应该不是瓦片的意思
这篇关于Geotrellis学(踩)习(坑)笔记(一)——核密度分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!