基于Geojson的点集的抽稀Js实现
由于要进行反距离插值,离散点太多肯定会影响插值的效率。
为了提升插值速度,就有了这个点的抽稀。
参考这位仁兄的思路。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实现的更多相关文章
- 基于jplayer实现歌词同步的JS音乐播放器效果
分享一款基于jplayer实现歌词同步的JS音乐播放器效果.这是一款基于jQuery实现的音乐播放器功能代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <textare ...
- 基于Bootstrap Ace模板+bootstrap.addtabs.js的菜单
这几天研究了基于bootstrap Ace模板+bootstra.addtabs.js实现菜单的效果 参考了这个人的博客 https://www.cnblogs.com/landeanfen/p/76 ...
- EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。
EpiiAdmin EpiiAdmin php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js, 让复杂的交互变得更简单!Phper快速搭建交互性平台的 ...
- 基于 Markdown 的开源的 Node.js 知识库平台
Raneto 是一个免费,开源的 Node.js 知识库平台,基于静态 Markdown 文件实现. Raneto 可以被称为静态网站生成器,因为它并不需要数据库支持.所有的内容都存储在 Markdo ...
- 基于ThinkPHP 5.0与Vue.JS 2.x的前后端开源开发框架VueThink
VueThink 项目介绍 VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的 ...
- 基于promise用于浏览器和node.js的http客户端的axios
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支 ...
- 基于V8引擎的C++和JS的相互交互
基于什么原因略! 1. 脚本引擎的基本功能 V8只是一个JS引擎.去除它的特点功能出处,它必须要实现JS引擎的几个基础功能: 脚本执行:脚本可能是一个表达式:一段js代码:或者一个文件执行表达式返回j ...
- 基于Unix Socket的可靠Node.js HTTP代理实现(支持WebSocket协议)
实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端.而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源服务是由代理服务fork出的业务服务(如 ...
- 基于CSS的幻灯片工具 reveal.js
官网:http://lab.hakim.se/reveal-js/#/ github https://github.com/hakimel/reveal.js 更多资源:6个最好的 HTML5/CS ...
- 我和我的小伙伴们都惊呆了!基于Canvas的第三方库Three.js
What is Three.js three + js 表示运行在浏览器上的3D程序 javascript的计算能力因为google的V8引擎得到了迅猛提升 做服务器都没问题了 更别说3D了 哈哈 ...
随机推荐
- C#反射运行该类下的方法
Text:反射的类名 s:方法名 data:参数 如果无参则: (string)method.Invoke(obj, null); Type type = typeof(Text); MethodIn ...
- nexus私服搭建的上传和下载
下载 方法1 下载应该先在nexus中创建相关的库(宿主库.代理库.仓库组),也可以使用原有的库 随后在pom文件中增加以下代码,即可从私服中下载相关的依赖包(注:依赖包的下载首先基于本地库,本地库没 ...
- concurrent.futures之ThreadPoolExecutor python线程池代码实现方法
from concurrent.futures import ThreadPoolExecutor def main(i): print(i) THREAD_NUM = 20 # 线程数 with T ...
- Docker安装SqlServer、Mysql、MariaDB
一.Docker 安装SqlServer 说明 1. 拉取镜像 docker pull mcr.microsoft.com/mssql/server:2019-latest 2.运行 docker r ...
- Mockito单元测试 初试
Mockito单元测试相对于Spring Boot 自带的好处理在于,单元测试不需要加载注入Spring Boot 启动项目. 1.需要注入的东西如下,@InjectMocks是注入需要测试的类,@S ...
- Spark系列 - (3) Spark SQL
3. Spark SQL 3.1 Hive.Shark和Sparksql Hive:Hadoop刚开始出来的时候,使用的是hadoop自带的分布式计算系统 MapReduce,但是MapReduce的 ...
- vue还可以这样写
1.这两种写法都可以: var vm = new Vue({ data(){ return { scaleFlag:'big', } }, //data:{}, created: function ( ...
- ERROR: Functions in index expression must be marked IMMUTABLE
在创建函数索引时遇到报错,报错信息即为标题,下面是详细信息. 1 表定义 1234567 skytf=> \d test_39; Table "skytf.test_39" ...
- nginx中多ip多域名多端口配置
1.Nginx中多IP配置: server { listen 80; server_name 192.168.15.7; location / { root /opt/Super_Marie; ind ...
- 微信轰炸Python脚本
1 import time 2 3 from pynput.keyboard import Key,Controller 4 5 keyboard = Controller() 6 7 a = inp ...