前端基于Canvas生成等值面的方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
1.背景
在之前的项目中,我们做过基于PM2.5的站点监测数据对全区域进行插值渲染来可视化预测,其实现方案为后台工具进行定时生成插值栅格图,对应文章为:《WebGIS中等值面展示的相关方案简析》(http://www.cnblogs.com/naaoveGIS/p/6145339.html)。但是该方案依赖AE,且为定时生成等值面(也可以改造为实时,但是因为是工具类型,对并发支持有瓶颈)。
随后,我又研究了基于前端库Turf.js将等值面转移到前端生成,基本逻辑为先将插值范围格网化,分别对每个格子的中心点进行克里金插值,最后利用turf生成等值面,然后等值面和插值范围做拓扑相交判断获取相交面。该方案对应的文章为:《WebGIS中前端JS生成等值面方法探讨》(http://www.cnblogs.com/naaoveGIS/p/7346299.html)。但是,由于turf内部存在bug,当等值面非常复杂比如包含多个内环等情况时,其生成的等值面有误。
基于此,我们着手开始研究新的等值面生成方案。经搜寻资料,一种是可以基于wcontour在服务端生成,另一种是在博友GIS之家中发现的开源库krigingjs来生成。考虑到预报的实时性,以及对服务器压力的减轻,我们选用了采用krigingjs前端生成方案。
2.集成和优化
2.1集成
在集成中,我们重点需要解决的是地理坐标与屏幕坐标的转换,以及根据地图的缩放等作出相应的重绘,这里不做详细描述。
2.2优化
我们实际试用中发现有如下问题:
a.我们的区域边界比较复杂,每次裁剪绘制时效率很低,容易出现卡顿。
b无法对等值面进行阈值指定颜色的设置。
c.插值间隔参数对插值效率和效果影响很大。如果设置小了,在地图分辨率很高时,将直接导致绘制效率下降卡顿。如果设置大了,容易出现绘制锯齿状。
针对以上问题,我们分别做了优化,基本重写了krigingjs中的绘制代码:
a采用多线程进行插值计算,不影响前端其他操作。
b.点面判断不再通过矢量拓扑关系去判断,而是改成预先给canvas进行二值化赋值,区域内是1,非区域内是0,在逐像素计算绘制时通过此二值来判断是否进行透明设置。
c.插值大小采用地图各级别中的居中分辨率来计算。
3.成果展示

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

前端基于Canvas生成等值面的方案的更多相关文章
- 前端使用canvas生成盲水印的加密解密
为了保障信息安全,防止重大信息泄露,并且能够锁定泄露用户,需要对页面展示的图片加入当前用户信息的盲水印,即最终图片外观看起来和原图一样,但是经过解码以后可以识别出水印信息,并且在截图后仍能进行较好的识 ...
- 基于canvas的二维码邀请函生成插件
去年是最忙碌的一年,实在没时间写博客了,看着互联网行业中一个又一个人的倒下,奉劝大家,健康要放在首位,保重身体.好了,言归正传,这是17年的第一篇博文,话说这天又是产品同学跑过来问我说:hi,lenn ...
- 基于SqlSugar的开发框架循序渐进介绍(15)-- 整合代码生成工具进行前端界面的生成
在前面随笔<基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理>中我们已经介绍过,对于相关的业务表的界面代码,我们已经尽可能把不同的业务逻辑 ...
- C#开发微信门户及应用(47) - 整合Web API、微信后台管理及前端微信小程序的应用方案
在微信开发中,我一直强调需要建立一个比较统一的Web API接口体系,以便实现数据的集中化,这样我们在常规的Web业务系统,Winform业务系统.微信应用.微信小程序.APP等方面,都可以直接调用基 ...
- WebGIS中使用ZRender实现前端动态播放轨迹特效的方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在地图上以时间轴方式播放人员.车辆在地图上的历史行进 ...
- captcha.js一个生成验证码的插件,使用js和canvas生成
一.captcha`captcha.js`是一个生成验证码的插件,使用js和canvas生成的,确保后端服务被暴力攻击,简单判断人机以及系统的安全性,体积小,功能多,支持配置. 验证码插件内容,包含1 ...
- redis生成分布式id方案
分布式Id - redis方式 本篇分享内容是关于生成分布式Id的其中之一方案,除了redis方案之外还有如:数据库,雪花算法,mogodb(object_id也是数据库)等方案,对于redis来 ...
- 基于Ruby的watir-webdriver自动化测试方案与实施(三)
接着基于Ruby的watir-webdriver自动化测试方案与实施(二) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 编写脚本 ...
- 基于Ruby的watir-webdriver自动化测试方案与实施(二)
接着基于Ruby的watir-webdriver自动化测试方案与实施(一) http://www.cnblogs.com/Javame/p/4159360.html 继续 ... ... 回顾 软 ...
随机推荐
- PAT1065: A+B and C (64bit)
1065. A+B and C (64bit) (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HOU, Qiming G ...
- linux简单内核链表排序
#include <stdio.h> #include <stdlib.h> #define container_of(ptr, type, mem)(type *)((uns ...
- datePicker.js 应用
var calendar2 = new datePicker();calendar.init({ 'trigger': '#datetime-picker-start', /*选择器,触发弹出插件*/ ...
- 许式伟:我与Go语言的这十年[转]
2017-12-18 许式伟 Go中国 2007 年 9 月 20 日,关于设计一门全新语言的讨论正式开始,这门全新的语言,就是后来的 Go.时至今日,Go 语言已经发布到 1.9 版本,走过了整整十 ...
- 《Spring Cloud与Docker微服务架构实战》配套代码
不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将 ...
- remove方法
1.jQuery的remove()方法 http://www.365mini.com/page/jquery-remove.htm ①返回值是jquery对象本身 所以可以做删除再添加的操作 // 移 ...
- 超实用的JavaScript代码段 Item5 --图片滑动效果实现
先上图 鼠标滑过那张图,显示完整的哪张图,移除则复位: 简单的CSS加JS操作DOM实现: <!doctype html> <html> <head> <me ...
- toString()方法详解
在类型转换中,经常用到方法valueOf()和toString(),上一篇讲了valueOf()方法,这一篇来说说toString()方法.toSting()方法返回返回对象的字符串表现. [1]基本 ...
- 常见js特效的思路
1.焦点轮播路 1.布局:父容器用overflow:hidden隐藏多余的图片 2:通过ID获取到重要的元素(父容器.图片列表.左右切换按钮等) 给左右按钮加上点击事件,通过JS更新图片的位置,判断边 ...
- WIN10怎么安装SQL server2000数据库
怎样在win10下安装sql2000数据库 1.安装之前先确认自己的Windows10是64位的还是32位的 2.替换对应的系统文件SQLUNIRL.dll 此时你可能会遇到,没有权限替换文件或重命名 ...