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. C#代码整洁之道读后总结与感想

    1. 基本信息 C#代码整洁之道:代码重构与性能提升 ,英文名为Clean Code in C#. 作者:[英] 詹森·奥尔斯(Jason Alls) 著,刘夏 译 机械工业出版社,2022年4月出版 ...

  2. 【随笔记】NDK 编译开源库 SQLite3

    NDK 编译环境搭建请参考:[工作笔记]NDK 编译开源库 nghttp2/openssl/curl_lovemengx的博客-CSDN博客 一.下载源代码 wget https://github.c ...

  3. docker搭建maven私服(nexus3),整合springboot上传下载依赖

    一.前言 我们在JavaWeb开发中必不可少的就是jar包管理-maven,在没有maven之前,都是自己手动下载jar包导入到项目中,非常的繁琐. maven出现之后,又迎来新的问题,对于仓库里人家 ...

  4. SpringBoot实现电子文件签字+合同系统

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  5. OPENMP FOR CONSTRUCT GUIDED 调度方式实现原理和源码分析

    OPENMP FOR CONSTRUCT GUIDED 调度方式实现原理和源码分析 前言 在本篇文章当中主要给大家介绍在 OpenMP 当中 guided 调度方式的实现原理.这个调度方式其实和 dy ...

  6. easyUI实现查询条件传递给后端并自动刷新表格的两种方法

    easyUI实现查询条件传递给后端并自动刷新表格的两种方法 用ajax的post函数传递参数,再通过loadData方法将数据初始化到表格中 js代码: //根据id搜索 $("#stand ...

  7. LeetCode 周赛 333,你管这叫 Medium 难度?

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周是 LeetCode 第 333 场周赛,你参加了吗?这场周赛质量很高,但难度标得不 ...

  8. Cesium 椭球大地测量EllipsoidGeodesic(十二)

    首先发现一个问题,这段代码会报错,原因是"DeveloperError: Expected value to be greater than or equal to0.0125, actua ...

  9. Vladik and fractions

    题目大意 给出 \(n\),求一组 \(x,y,z\) 满足 \(\frac 1x + \frac 1y + \frac 1z = \frac 2n\) 若不存在合法的解,输出 \(-1\) 其中 \ ...

  10. JZOJ 3528. 【NOIP2013模拟11.7A组】图书馆(library)

    题目 解析 看到这题,没想到 \(dp\) 果断打了暴力 暴力理应只有 \(30\) 左右的样子 然而我加上了些奇技淫巧竟然有 \(80\) 分! 惊到我了! 我 \(80\) 分的暴力: 很容易想到 ...