WebGIS中前端JS生成等值面方法探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
1.背景
在之前的博文《WebGIS中等值面展示的相关方案简析》中我提到了两种生成等值面的方法:
a.使用GP服务发布等值面生成服务,前端调用该服务生成等值面图片然后叠加至地图上。
b.使用AE开发等值面生成工具,将等值面图片瓦片化后叠加至地图上。

从实现方式上来说,这两种方案均是通过后台生成等值面图片,前端进行图片叠加展示。
如果项目中我们的观察值频繁变化,比如五分钟变化一次,那么我们的等值面应该及时同步变化。但是如果利用后台服务来实现,则更新频次对后台服务存在一定压力,主要体现在插值图片频繁切图等。并且由于前端展示的仅仅是图片,无法在前端实现与等值面的交互。
这里,我们探讨一种真正的在前端实现插值等值面的方法。
2.插值探讨
等值面生成的核心原理是插值。我们常用的插值算法有反距离加权法(IDW)、样条插值法、克里金法、离散平滑插值、趋势面光滑插值等。这里我们采用克里金插值。
克里金方法最早是由法国地理学家Matheron和南非矿山工程师Krige提出的,用于矿山勘探。这种方法认为在空间连续变化的属性是非常不规则的,用简单的平滑函数进行模拟将出现误差,用随机表面函数给予描述会比较恰当 (克里金中包括几个因子:变化图模型、漂移类型和矿块效应) 。
克里金方法的关键在于权重系数的确定,该方法在插值过程中根据某种优化准则函数来动态地决定变量的数值,从而使内插函数处于最佳状态。克里金方法考虑了观测的点和被估计点的位置关系,并且也考虑各观测点之间的相对位置关系,在点稀少时插值效果比反距离权重等方法要好。所以利用克里金方法进行空间数据插值往往取得理想的效果。
在地质统计学中,根据应用目标的区别,发展了多种克里格方法如:
a.简单克里格(Simple-Kriging)
b.普通克里格(Ordinary-Kriging)
c.泛克里格(Universal-Kriging)
d.对数正态克里格(Log-Normal Kriging)
e.协同克里格(Cokriging)
f.拟协克里格(Pseudo-Kriging)
g.指示克里格(Indicator-Kriging)
h.离析克里格(Disjunctive-Kriging)
在三维地质建模过程中,克里格被作为插值方法,能过最大的程度的保证地质界面与原始数据的吻合,且不依赖于网络。
3.格网化插值的实现
a.我们首先需要将待插值的范围划分成若干格网,格网的数目会影响插值的效果。
b.针对每个格网进行插值计算。
c.所有格网基于插值数值进行配色渲染。

4.获取真正的等值面
格网化插值展示结果已经是趋于等值面展示了,并且随着格网粒度进一步变小,展示结果将更趋于平滑,但是随之的性能开销将越来越大,而且无法规避渐变处的锯齿情况。
所以我们还得研究如何根据已有插值格网获取等值面。
这个研究类似与栅格数据转矢量数据的研究,该类型算法网上有比较多的介绍,这里我直接给出优化后的结果:

-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

WebGIS中前端JS生成等值面方法探讨的更多相关文章
- Centos7 中 Node.js安装简单方法
最近,我一直对学习Node.js比较感兴趣.下面是小编给大家带来的Centos7 中 Node.js安装简单方法,在此记录一下,方便自己也方便大家,一起看看吧! 安装node.js 登陆Centos ...
- 前端Js跨域方法汇总—剪不断,理还乱,是跨域
1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...
- 可前端解密的加密方法探讨和str_replace和preg_replace分析
目的: 对字符串‘123456’进行后端加密,前端js可解密出真实字符 测试代码php: static $hashMap = array( '0' => '4', '1' => '9', ...
- 【工作细节记录】维护项目中前端JS组件丢失后,应如何维护开发之启发
事因: 我所维护的项目为旧项目,接手项目后并没有什么开发文档留下,导致很多时候一出现问题就需要自己去研究整个过程. 项目中一直使用一个"$.download()"的方法进行文件下载 ...
- iOS——浅谈iOS中三种生成随机数方法
ios 有如下三种随机数方法:
- JS生成GUID方法
function GUID() { this.date = new Date(); /* 判断是否初始化过,如果初始化过以下代码,则以下代码将不再执行,实际中只执行一次 */ if (typeof t ...
- thinkphp中url的生成U()方法
为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响.U方法的定 ...
- iOS-浅谈iOS中三种生成随机数方法
ios 有如下三种随机数方法:
- RN47 中通过 JS 调用 Native 方法
每一个模块.方法都有一个 ID,通过 ID 来调用. m_registry->callNativeMethod(call.moduleId, call.methodId, std::move(c ...
随机推荐
- 【笔记】记一次.net语法await和async的异步编程实验与笔记。
1.实践代码全记录: using System; using System.Collections.Generic; using System.Diagnostics; using System.Li ...
- openssl ca(签署和自建CA)
用于签署证书请求.生成吊销列表CRL以及维护已颁发证书列表和这些证书状态的数据库.因为一般人无需管理crl,所以本文只介绍openssl ca关于证书管理方面的功能. 证书请求文件使用CA的私钥签署之 ...
- 网页在ios下点击无效的原因
之前在做一个项目的时候,发现元素在ios系统中点击无法触发效果,网上查了一下发现 ios下 如果不是button,input这类标签的话 ,如果有点击事件的话最好给加一个css样式cursor:p ...
- 伙计,给我来一杯package.json!不加糖
前言:夜深了,我熬了一锅热气腾腾的package.json,给大家端上来,希望大家喜欢 json和JS对象的区别 package.json,顾名思义,它是一个json文件,而不能写入JS对象. 所以我 ...
- Spring中获取对象
Spring是一个非常主流,而且是好用的框架.提供管理对象的容器,提供事务的支持,缓存,权限认证(往往不用).用来集成hibernate等.而管理对象的生命周期是其中一个非常重要的功能.在Spring ...
- Mifare l卡特性简介
电气特性 l 容量为8K位EEPrOM l 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 l 每个扇区有独立的一组密码及访问控制 l ...
- 【Vue】Vue的依赖追踪系统 ——搞懂methods watch和compute
从作用机制和性质上看待methods,watch和computed的关系 <他三个是啥子关系呢?> 首先要说,methods,watch和computed都是以函数为基础的,但各自却都不同 ...
- es6的新内容
前端学习总结(十八)ES6--新一代的javascript 发表于2016/6/11 21:44:27 2733人阅读 分类: javascript 简介 ECMAScript 6(以下简称ES6) ...
- C# datatable 去重
若检索出的datatab有重复行,而在绑定下拉列表时不希望有重复行,可使用以下代码将数据表去重: this.cmbE_NENRYOU_SBT.DataSource = dt.DefaultView.T ...
- 我JAVA修炼之路
今天起,我会不定期更新我的java修炼之路, 2017.7.10,星期一 我参见了河南青云的培训班,这一天是我们的开班典礼. 我会不定期的总结我的学习笔记,大家喜欢的可以看看,不喜勿喷. 写代码: 1 ...