一种改进后的turf.idw算法

turf 是Advanced geospatial analysis geojson data in javascript.

官网:http://turfjs.org/

针对github 中的源码。

记得在以前使用arcgis 的反距离插值的时候有搜索半径和剪切范围定义。

于是就增加了这两个参数。

可在浏览器端使用的IDW算法就优化到相对适合使用了。

  /**
     * idwPolygon - 反距离插值生成格网面集
     *
     * @param {type} controlPoints   离散点
     * @param {type} valueField      计算属性值z
     * @param {type} b               反距离幂值
     * @param {type} cellWidth       单元格宽
     * @param {type} SearchR         搜索半径
     * @param {type} units           单位km
     * @param {type} boundaryPolygon 剪裁范围
     *
     * @return {type} Description
     */
    var idwPolygon = function(controlPoints, valueField, b, cellWidth, SearchR, units, boundaryPolygon) {
        var distance = turf.distance;
        var squareGrid = turf.squareGrid;
        var centroid = turf.centroid;
        var bbox = turf.bbox;
        var inside = turf.inside;
        var featureCollection = turf.featureCollection;
        // check if field containing data exists..
        var filtered = controlPoints.features.filter(function(feature) {
            return feature.properties &&
                feature.properties.hasOwnProperty(valueField);
        });
        if (filtered.length !== 0) {
            // create a sample square grid
            // compared to a point grid helps visualizing the output (like a raster..)
            var resultGrid = [];
            var bbbox = boundaryPolygon ? bbox(boundaryPolygon) : bbox(controlPoints);//剪切范围增加
            var samplingGrid = squareGrid(bbbox, cellWidth, units);
            var N = samplingGrid.features.length;
            for (var i = 0; i < N; i++) {
                var cpointi = centroid(samplingGrid.features[i]);
                if (!inside(cpointi, boundaryPolygon)) { //如果在面外,不参与计算
                    continue;
                }
                var zw = 0;
                var sw = 0;
                // calculate the distance from each control point to cell‘s centroid
                for (var j = 0; j < controlPoints.features.length; j++) {
                    var d = distance(cpointi, controlPoints.features[j], units);
                    if (d > SearchR) {
                        continue;
                    }
                    if (d === 0) {
                        zw = controlPoints.features[j].properties[valueField];
                    }
                    var w = 1.0 / Math.pow(d, b);
                    sw += w;
                    zw += w * controlPoints.features[j].properties[valueField];
                }
                // write IDW value for each grid cell
                var zvalue = zw / sw; //如果都在影响半径外,那么可能为非数字,赋值为0
                samplingGrid.features[i].properties.z = zvalue ? zvalue : 0;

                resultGrid.push(samplingGrid.features[i]);
            }
            return featureCollection(resultGrid);
        } else {
            console.log(‘Specified Data Field is Missing‘);
        }
    };

  

效果图:

时间: 2024-12-13 02:59:06

一种改进后的turf.idw算法的相关文章

opencv实现一种改进的Fast特征检测算法

引言 之前了解了Fast算法之后使用opencv自己实现了下,具体见http://www.cnblogs.com/Wiley-hiking/p/6898049.html.不过算法也有缺点,主要就是对边缘点和噪点的抗干扰能力不强.在<基于FAST改进的快速角点探测算法>文章中作者提出一种改进的Fast角点算法,提高算法的稳定性和抗干扰能力.自己读完后使用opencv实现了该算法,这里将学习过程进行一个记录. 1.原始Fast检测算法 有关原始Fast检测算法,自己写的小结在http://www.

两种改进的模拟退火算法求解大值域约束满足问题2.0

2    两种改进的模拟退火算法 模拟退火算法(Simulatedannealing algorithm)是一种通用的概率算法,其思想源于固体退火过程:当固体物质温度很高时,固体内部粒子运动杂乱无序:而当温度逐渐降低时粒子又渐渐趋于有序运动.模拟退火算法往往用来求解优化问题的最小值问题,算法过程中会不断地对变量的当前赋值进行扰动,以产生新的赋值.如果新的赋值使得目标函数值变小,则接受新的赋值为当前赋值.反之,则以概率接受新的赋值,其中T是当前温度,为新赋值目标函数值,为当前赋值目标函数值,重复上

两种改进的模拟退火算法求解大值域约束满足问题1.0

0引言 约束满足问题(Constraint Satisfaction Problem,CSP)是人工智能研究领域中一个非常重要的分支,现已成为理论计算机科学.数学和统计物理学等交叉学科研究中的热点问题.人工智能.计算机科学和自动控制等领域中的许多问题都可以归结为约束满足问题.同时,约束满足问题在实际问题如模式识别.决策支持.物流调度及资源分配等领域也有着非常广泛的应用. CSP由一个变量集合和一个约束集合组成.每个变量都有一个非空的可能值域,每个约束描述了一个变量子集与子集内各变量的相容赋值,所

菜鸟学算法----改进后的欧几里得算法

对于正整数 a和b  利用欧几里得算法可以得出 一个最大公因数 ,  改进后的算法满足  最大公因数 q=xa+yb   ; 那么我们如何求出 a和b呢 . 书上是这么写的 那么我们用代码把他实现出来, 向大家推荐一本书<The Art Of Computer.Programmer>   第一篇的数学部分   真心的枯燥 我选择的方式 是 适当的囫囵吞枣 对于这一样 ,但是对于其中讲述的算法 还是要仔细的去看滴 . 对于算法的分析  我直接上原书图 #include "stdafx.

VLBP基本算法和一种改进的算法IVLBP

VLBP ——variable learning rate 可变学习速率的BP VLBP算法基本思想 一种改进的可变学习速率的BP神经网络算法IVLBP https://wenku.baidu.com/view/c4723e3043323968011c9283.html 原文地址:https://www.cnblogs.com/rinroll/p/12167071.html

总结5种比较高效常用的排序算法

1 概述 本文对比较常用且比较高效的排序算法进行了总结和解析,并贴出了比较精简的实现代码,包括选择排序.插入排序.归并排序.希尔排序.快速排序等.算法性能比较如下图所示: 2 选择排序 选择排序的第一趟处理是从数据序列所有n个数据中选择一个最小的数据作为有序序列中的第1个元素并将它定位在第一号存储位置,第二趟处理从数据序列的n-1个数据中选择一个第二小的元素作为有序序列中的第2个元素并将它定位在第二号存储位置,依此类推,当第n-1趟处理从数据序列的剩下的2个元素中选择一个较小的元素作为有序序列中

浅识——后向投影成像算法(BackProjection,BP) 【MATLAB代码分析】

一.什么是BP算法 由来:BP算法最初是McCorkle受计算机层析技术的启发推导而来,所谓的计算机层析:就是CT(Computer Tomograpy),这是在医院中再普遍不过的技术了. BP算法的原理:BP算法参考了"时延-叠加"的思想,在雷达应用中,其对雷达接收天线接收到的回波信号进行距离向匹配率,获取回波数据中包含的相幅信息,再通过IFFT进行逆傅里叶变换,获取收发天线组合的时延,最后累积信号相干相加得到目标函数. 1.1  BP算法 回波信号与参与电信号进行匹配滤波后,获得的

HMM的应用与前向、后向、Viterbi算法

在上一篇文章机器学习中的隐马尔科夫模型(HMM)详解中,我们已经向大家介绍了HMM的基本概念.本文将通过几个例子来演示HMM可以帮我们做些什么事情.特别地,在这个过程中,我们还将向你介绍HMM中非常重要的前向(Forward)算法以及(基于动态规划思想设计的)维特比(Viterbi)算法. 一个引子 前向(Forward)算法 维特比(Viterbi)算法 HMM在自然语言处理中的应用举例 欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公式.

改进的二值图像像素标记算法及程序实现(含代码)

笔者实现了一个论文里面的算法程序,论文(可以网上搜索到,实在搜不到可以联系笔者或留下邮箱发给你)讲解比较到位,按照作者的思路写完了代码,测试效果很好,在此分享一下算法思路及实现代码. 此算法优于一般的像素标记算法,只需扫描一遍就可以得出图像边界.面积等等,大大减少了计算量. 算法描述: 一.全图扫描 对二值图像全图扫描,左到右,上到下,一遇到像素边界就进行判断.像素边界指当前像素灰度为1,其他8领域至少有一个灰度值为0. 1.先依次判断当前像素(i,j)的左侧.左上侧.上侧像素和右上侧像素是否被