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');
}
};

  

效果图:

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

  1. GIS矢量数据化简:一种改进的道格拉斯-普克算法以及C++实现

    GIS领域的同志都知道,传统的道格拉斯-普克算法都是递归实现.然而有时候递归的层次太深的话会出现栈溢出的情况.在此,介绍一种非递归的算法. 要将递归算法改为非递归算法,一般情况下分为两种场景.第一种是 ...

  2. 机器翻译评测——BLEU改进后的NIST算法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7765345.html 上一节介绍了BLEU算的缺陷.NIS ...

  3. Python实现改进后的Bi-RRT算法实例

    Python实现改进后的Bi-RRT算法实例 1.背景说明 以下代码是参照上海交通大学海洋工程国家重点实验室<基于改进双向RRT的无人艇局部路径规划算法研究>的算法思想实现的. 2.算法流 ...

  4. SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。

    这是一篇2010年比较古老的文章了,是在QQ群里一位群友提到的,无聊下载看了下,其实也没有啥高深的理论,抽空实现了下,虽然不高大上,还是花了点时间和心思优化了代码,既然这样,就顺便分享下优化的思路和经 ...

  5. 两种方法实现Python二分查找算法

    两种方法实现Python二分查找算法   一. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 arr=[1,3,6,9,10,20,30] def findnumber( ...

  6. [小专题]另一种字符串匹配的思路——Shift-And算法

    吐槽:前两天打组队赛遇到一个字符串的题考了这个(见:http://acm.hdu.edu.cn/showproblem.php?pid=5972 ) 当时写了个KMP瞎搞然后TLE了(害),赛后去查了 ...

  7. K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

      一.概述 在本篇文章中将对四种聚类算法(K-means,K-means++,ISODATA和Kernel K-means)进行详细介绍,并利用数据集来真实地反映这四种算法之间的区别. 首先需要明确 ...

  8. KMP算法(改进后的字符串匹配算法)

    转载:http://blog.csdn.net/liu88010988/article/details/50789960 kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O ...

  9. 串的两种模式匹配方式(BF/KMP算法)

    前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最重要的操作之一,而不同的算法实现有着不同的 ...

  10. 算法:Astar寻路算法改进,双向A*寻路算法

    早前写了一篇关于A*算法的文章:<算法:Astar寻路算法改进> 最近在写个js的UI框架,顺便实现了一个js版本的A*算法,与之前不同的是,该A*算法是个双向A*. 双向A*有什么好处呢 ...

随机推荐

  1. 读Java8函数式编程笔记02_流

    1. 外部迭代 1.1. for循环是一个封装了迭代的语法糖 1.1.1. 本质上来讲是一种串行化操作 1.2. 很难抽象出不同操作 2. 内部迭代 2.1. 内部迭代中的相应接口:Stream 2. ...

  2. Idea的jdbc中的查询与增删该

    在上一篇的折磨中 终于写好了代码 来总结一下其中的奥妙 (相同部分:)1.有mysql并且与主机建立连接 2.有jar包并且复制到自己创建的libs文件下,右键add 3.需要写main方法 4.需要 ...

  3. SQLSERVER 语句交错引发的死锁研究

    一:背景 1. 讲故事 相信大家在使用 SQLSERVER 的过程中经常会遇到 阻塞 和 死锁,尤其是 死锁,比如下面的输出: (1 row affected) Msg 1205, Level 13, ...

  4. 0x05_My-OS显示字符串和任意参数

    先看看效果: 要解决两个问题,第一个如何显示字符串,printf?我之前已经说了所有的头文件都要自己写,printf是stdio里的可是我们没有stdio 我们要通过画像素点的方式显示字符串,有点像我 ...

  5. 【KAWAKO】模型的压缩、扩张,计算模型的各种成本

    目录 模型压缩 量化 稀疏化训练 剪枝 知识蒸馏 自蒸馏 集成 使用精细化模型结构 模型扩张 深度 宽度 输入图像的分辨率 深度.宽度.分辨率联合扩张 使用精细化模型结构 计算模型的各种成本 参数量 ...

  6. JZOJ 3213. 【SDOI2013】直径

    题目 思路 树的直径很好求,两遍 \(dfs\),记下两个端点 然后很显然所有直径经过的边必然在我们求出的这条直线上 那么我们只要判断一下一条直径上的边是不是答案 假设当前边为 \(i\) 那么把 \ ...

  7. 使用JsonTextReader提高Json.NET反序列化的性能

    一.碰到的问题 在服务器的文件系统上有一个业务生成的BigTable.json文件,其可能包含的JSON字符串很大,同时里边的集合会包含很多的记录:我们使用以下的代码来反序列化,虽然使用了异步的Rea ...

  8. Eureka高可用集群服务端和客户端配置

    微服务应用中,生产环境一般都需要保障服务注册中心的高可用!高可用也分好几个等级,例如:同数据中心(可用Zone区)高可用-->同地域(Region)跨数据中心(可用Zone区)高可用--> ...

  9. 超声能指导持续临床缓解的长病程RA患者减停TNF抑制剂吗

    标签:类风湿关节炎; TNF拮抗剂; 超声缓解; TNFi减停 超声能指导持续临床缓解的长病程RA患者减停TNF抑制剂吗 电邮发布日期: 2016年2月25日 截至目前,针对类风湿关节炎(RA),尚未 ...

  10. ERROR: Functions in index expression must be marked IMMUTABLE

    在创建函数索引时遇到报错,报错信息即为标题,下面是详细信息. 1 表定义 1234567 skytf=> \d test_39; Table "skytf.test_39" ...