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

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

参考这位仁兄的思路。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. 洛谷p2669

    #include<bits/stdc++.h> using namespace std; int main() { int k,m=0,p=1;//p:给j个金币的第p天(1~j循环变化) ...

  2. Snipaste下载安装(使用教程)

    ## Snipaste下载安装(使用教程)**一 简单介绍** Snipaste 是一个免费简单但强大的截图工具,也可以让你将截图贴回到屏幕上!下载并打开 Snipaste,按下 F1 来开始截图,再 ...

  3. *未解决 javaweb登录+验证码 bug存留

    参考:https://www.cnblogs.com/ajing2018/p/15917166.html 感谢大佬指路 虽然还是没跑起来quq ## 案例:验证码    1. 案例需求:       ...

  4. WAVE音频文件格式及其64位扩展格式的简要介绍

    正文 关于 WAVE 文件格式,网上有不少介绍,但关于WAVE 64位扩展格式的介绍却是几乎没有. 所以本文的目的是简要介绍标准的 WAVE 格式,以及两种主要的扩展格式. 文中所有代码都用C语言来描 ...

  5. rt-thread模糊到清晰系列: irq.c

    #include <rthw.h> #include <rtthread.h> // 进入离开中断的钩子函数 #ifdef RT_USING_HOOK static void ...

  6. P3387 缩点

    \(Tarjan\) 模板 #include<cstdio> #include<queue> #include<iostream> #define re regis ...

  7. 如何获取win10用户最高权限

    第五步,在(输入对象名称)方框中输入"System Managed Accounts Group",再点击"检查名称" 转载: 百度经验:     https: ...

  8. 流量加密之:使用Openssl反弹加密shell

    流量加密之:使用Openssl反弹加密shell 目录 流量加密之:使用Openssl反弹加密shell 1 背景 2 生成SSL证书 3 Linux平台下 3.1 在Kali上使用 OpenSSL ...

  9. 基于Linux编译JDK18

    1.概述 JDK都没手动编译过,敢说自己是Java程序员吗?(By 羊哥--JDK都没手动编译过,敢说自己是Java程序员吗?实战编译Java源码(JDK源码,JVM)视频教程_哔哩哔哩_bilibi ...

  10. PostgreSQL 按拼音排序 - convert to GBK/EUC_CN coding

    背景 国内的应用,在文本排序上基本都是按照拼音来进行排序的. 在不同的字符集中,汉字的编码可能不一样,比如UTF8和GBK,其中GBK是按拼音的顺序进行编码的,而UTF8则不是. 所以如果你的数据库使 ...