由于要进行反距离插值,离散点太多肯定会影响插值的效率。

为了提升插值速度,就有了这个点的抽稀。

参考这位仁兄的思路。http://blog.csdn.net/cdl2008sky/article/details/8281316

抽稀前:3087个点

simplifyMutiPoints.getProcessPoints(IsolinePoints.features,0.1,"z");

抽稀处理,

对密集的点抽稀,保持点的关键属性z值的均匀分布:剩余1682个。

可以看都左侧的大量相同权重的点被抽稀了。

最后附上代码:

/// <summary>抽稀处理,对密集的点抽稀,保持点的均匀分布。</summary>
/// <param name="points" type="Array">待抽稀的数组 features Array</param>
/// <param name="tolerance" type="Float">取样临界值</param>
/// <param name="indicator" type="string">关键属性</param>
var simplifyMutiPoints = {
// dis: 1000,
// degToMeter: Math.PI * 6378137 / 180.0, //6378137赤道半径,一度对应赤道上的一米
// buf: parseInt(this.dis * 1.0e7 / degToMeter), //1公里对应多少度
getProcessPoints: function(points, tolerance, indicator) {
if (points.length < 3) return points; //小于3个点时不抽稀,因为1个或2个点无法进行抽稀
var IndexsToReduce = this.reduce(points, tolerance, indicator); //抽稀 //保存需要点下标的数组
var resultPoints = []; //返回的点数组
for (var i = 0; i < points.length; i++) {
if (IndexsToReduce.indexOf(i) < 0) {
resultPoints.push(points[i]);
}
}
return resultPoints;
},
reduce: function(points, tolerance, indicator) { //遍历抽稀,删除相同权重的点
// var IndexsToKeep = [];
var IndexsToReduce = [];
for (var i = 0; i < points.length; i++) {
var k = i + 1;
if (IndexsToReduce.indexOf(i) >= 0) { //如果是已删除的点,跳出
continue;
}
var p1 = points[i];
while (k < points.length) {
var p2 = points[k];
var ToReduce = this.CheckPointEqualInBuffer(p1, p2, tolerance, indicator);
if (ToReduce) {
IndexsToReduce.push(k);
}
k++;
}
}
return IndexsToReduce;
},
//判断在抽稀中是否等值(依据缓冲范围以及关键属性)
CheckPointEqualInBuffer: function(point1, point2, buffer /*缓冲相等*/ , indicator /*属性相等*/ ) {
var x1=point1.geometry.coordinates[0],
y1=point1.geometry.coordinates[1],
x2=point2.geometry.coordinates[0],
y2=point2.geometry.coordinates[1];
var inbuffer = (Math.abs(x1 - x2) <= buffer && Math.abs(y1 - y2) <= buffer);
var iszEqual = true;
if (indicator) {
iszEqual = point1.properties[indicator] == point2.properties[indicator];
}
return inbuffer && iszEqual;
}
};

  

基于Geojson的点集的抽稀Js实现的更多相关文章

  1. 基于jplayer实现歌词同步的JS音乐播放器效果

    分享一款基于jplayer实现歌词同步的JS音乐播放器效果.这是一款基于jQuery实现的音乐播放器功能代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <textare ...

  2. 基于Bootstrap Ace模板+bootstrap.addtabs.js的菜单

    这几天研究了基于bootstrap Ace模板+bootstra.addtabs.js实现菜单的效果 参考了这个人的博客 https://www.cnblogs.com/landeanfen/p/76 ...

  3. EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。

    EpiiAdmin EpiiAdmin php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js, 让复杂的交互变得更简单!Phper快速搭建交互性平台的 ...

  4. 基于 Markdown 的开源的 Node.js 知识库平台

    Raneto 是一个免费,开源的 Node.js 知识库平台,基于静态 Markdown 文件实现. Raneto 可以被称为静态网站生成器,因为它并不需要数据库支持.所有的内容都存储在 Markdo ...

  5. 基于ThinkPHP 5.0与Vue.JS 2.x的前后端开源开发框架VueThink

    VueThink 项目介绍 VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的 ...

  6. 基于promise用于浏览器和node.js的http客户端的axios

    axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支 ...

  7. 基于V8引擎的C++和JS的相互交互

    基于什么原因略! 1. 脚本引擎的基本功能 V8只是一个JS引擎.去除它的特点功能出处,它必须要实现JS引擎的几个基础功能: 脚本执行:脚本可能是一个表达式:一段js代码:或者一个文件执行表达式返回j ...

  8. 基于Unix Socket的可靠Node.js HTTP代理实现(支持WebSocket协议)

    实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端.而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源服务是由代理服务fork出的业务服务(如 ...

  9. 基于CSS的幻灯片工具 reveal.js

    官网:http://lab.hakim.se/reveal-js/#/ github  https://github.com/hakimel/reveal.js 更多资源:6个最好的 HTML5/CS ...

  10. 我和我的小伙伴们都惊呆了!基于Canvas的第三方库Three.js

    What is Three.js three + js 表示运行在浏览器上的3D程序 javascript的计算能力因为google的V8引擎得到了迅猛提升 做服务器都没问题了 更别说3D了 哈哈  ...

随机推荐

  1. Pytest插件pytest-repeat重复执行

    Pytest插件pytest-repeat重复执行 安装 pip install pytest-repeat doc https://pypi.org/project/pytest-repeat/ h ...

  2. python实现通用excel导入到mysql

    { "file": "OrderDetail-2020-06-03.xls", "startRow": 1, "table&quo ...

  3. 【转载】JAVA - 解决:Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

    抄:https://www.cnblogs.com/sunylat/p/13339507.html 问题原因: 高版本的JDK中不包含javax.xml.bind包了! 解决方法: 1,如果是mave ...

  4. JZOJ 3737. 【NOI2014模拟7.11】挖宝藏

    \(\text{Solution}\) 当 \(h=1\) 时显然是斯坦纳树板子,最方案必然是树形的 \(h > 1\) 时,考虑在每一层新建一个状态表示上一层宝藏全部挖完到这层某个点的答案 同 ...

  5. JZOJ 1040. 【GDOI2007】夏娜的菠萝包

    状压玩疯了 \(Code\) #include<cstdio> #include<iostream> #include<cstring> using namespa ...

  6. cpu功耗排行_常见NAS CPU处理器性能排行榜(简单天梯图)

    转载csdn: (35条消息) cpu功耗排行_常见NAS CPU处理器性能排行榜(简单天梯图)_weixin_39618173的博客-CSDN博客

  7. python 依据IP查找其所属网段

    # coding = 'utf-8' # 依据excel表格中所提供的IP,在另一张表中查找其所属网段 import pandas as pd import IPy df = pd.read_exce ...

  8. 代码随想录算法训练营day22 | leetcode 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

    LeetCode 235. 二叉搜索树的最近公共祖先 分析1.0  二叉搜索树根节点元素值大小介于子树之间,所以只要找到第一个介于他俩之间的节点就行 class Solution { public T ...

  9. Oracle中的sql脚本语言中的循环语句介绍

    --sql脚本语言的循环介绍:--1.goto循环点.declare  x number;begin  x:=0;--变量初始化:  <<repeat_loop>>--设置循环 ...

  10. listview自定义适配器

    class FruitAdapter(activity: Activity ,val id:Int,data:List<Fruit>):ArrayAdapter<Fruit>( ...