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

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

参考这位仁兄的思路。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. 【大型软件开发】浅谈大型Qt软件开发(三)QtActive Server如何通过COM口传递自定义结构体?如何通过一个COM口来获得所有COM接口?

    前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...

  2. vue学习笔记(一) ---- vue指令(总体大纲)

    一.什么是Vue 官方文档:https://cn.vuejs.org/v2/guide/ 关键字: 渐进式框架 自底向上增量开发 视图层 单文件组件 复杂的单页应用 复杂的单页应用: 顾名思义,单页应 ...

  3. 解决:ChatGPT too many requests in 1 hour.Try again later 怎么办?OpenAI 提示

    ChatGPT 提示: Too many requests in 1 hour. Try again later. 如下图,我多次访问也出现同样的问题.中文意思是太多的请求数量在当前 1 个小时内,请 ...

  4. C-05\函数的底层原理

    一.程序运行时内存四大区 wres(内存属性): w:write(可写) r:read(可读) e:execute(可执行) s:share(可共享) 任何操作系统(windows.liunx.安卓. ...

  5. Zstack 鼎阳SDS6204示波器和Archiver Appliance的重度测试2

    https://blog.csdn.net/weixin_43767046/article/details/113748775 https://blog.csdn.net/weixin_4376704 ...

  6. python压缩解压文件

    转载CSDN坏菠萝:https://blog.csdn.net/abcwanglinyong/article/details/80840813

  7. Vulhub 漏洞学习之:Adobe ColdFusion

    Vulhub 漏洞学习之:Adobe ColdFusion 目录 Vulhub 漏洞学习之:Adobe ColdFusion 1 Adobe ColdFusion 文件读取漏洞(CVE-2010-28 ...

  8. 代码随想录算法训练营day03 | LeetCode 203/707/206

    基础知识 数据结构初始化 // 链表节点定义 public class ListNode { // 结点的值 int val; // 下一个结点 ListNode next; // 节点的构造函数(无 ...

  9. 通过反射机制简化 JDBC ResultSet 实体类的注入

    提出问题 查询完某个表之后,一般都是把结果的每一个字段注入到一个实体类中.比如,数据库 users 表,查询出来的结果注入到 User 实体类中. 通过 while 遍历 ResultSet,把字段对 ...

  10. Spring Boot 整合 Logback 日志

    Spring Boot 支持 Java Util Logging,Log4J,Log4J2 和 Logback 等日志框架,默认采用 Logback 日志. 在实际 Spring Boot 项目中使用 ...