大数据量点的地图展示,借助PostGIS实现动态点抽稀/聚合效果
需求场景
Web端通过地图范围变化事件,动态请求加载空间数据库中的点数据进行展示,指定的屏幕像素范围内,在不同的地图缩放级别显示不同数量的点(大比例尺下展示较多的点,表比例尺下加载一些特征点展示),从而使Web页面能够更为美观的展示数据。
技术点
聚合算法,屏幕像素转地图距离、PostGIS、查询优化、存储过程
接口参数
在此需求下,前端要调用服务接口,需要传入指定的像素celCount,当前地图分辨率mapResolution,当前地图比例尺mapScale,要查询的数据库表名tableName。考虑到查询返回一些点并不在当前屏幕显示的地图范围内,为避免显示这些多余的点而造成浏览器压力,可将当前地图范围作为查询条件,因此,还需要传入一个当前地图范围参数mapExtent。
实现流程
获取数据表的空间范围tableExtent——》与mapExtent求交得到tempExtent——》获取tempExtent的空间矩形范围showExtent——》根据celCount,mapResolution和mapScale计算屏幕像素对应的地图距离showLen——》格网化分,根据showExtent和showLen计算横向和纵向格网数量——》双层for循环,用个网作为查询条件查询数据库在格网范围内的点集合,求取距离集合质心点最近的点返回——》最终返回一个点集合
缺陷
使用格网将要查询的数据范围showExtent进行分割,在计算每个格网最终要显示的点时都需要调用一个数据库请求,在数据量大,像素数小的情况下,将显示范围在横向和纵向进行分割,最终的格网数量很多,反复调用数据库请求会造成该应用接口的性能很低,在控制器设置超时时间的情况下,后台没有返回数据,造成请求超时,后台出错的假象,最终的计算结果也展示不出来。
优化
为了减少数据库请求的次数,使用存储过程!将格网的横向距离和纵向距离、横向数量和纵向数量、showExtent的左上坐标、数据表名作为存储过程的参数。存储过程的核心实现如图:
效果展示:
小比例尺下展示效果
大比例尺下展示效果
性能测试
100,0000数据量的动态查询性能测试结果,时间:秒
层级(比例尺) |
10(像素) |
20(像素) |
40(像素) |
60(像素) |
4508.93552506767 |
0.669 |
0.218 |
0.103 |
0.078 |
9017.87105013534 |
0.794 |
0.328 |
0.152 |
0.087 |
18035.7421002707 |
1.071 |
0.390 |
0.150 |
0.096 |
36071.4842005414 |
1.466 |
0.488 |
0.166 |
0.113 |
72142.9684010827 |
1.608 |
0.563 |
0.194 |
0.129 |
144285.936802165 |
1.711 |
0.587 |
0.211 |
0.163 |
288571.873604331 |
1.665 |
0.565 |
0.239 |
0.205 |
577143.7364428712 |
1.549 |
0.539 |
0.301 |
0.220 |
1154287.4728857423 |
1.728 |
0.737 |
0.387 |
0.337 |
2308574.9457714846 |
2.149 |
1.185 |
0.846 |
0.846 |
总结
在考虑实现该需求的时候,一直都在考虑这个功能是点抽稀的效果还是点聚合的效果。最终的结果说不上是抽稀结果也谈不上聚合效果,但最终的结果实实在在的高效地实现了动态筛选数据并加载显示在Web端。在参考了高德和Wish3D做的聚合标注效果之后,搜索了一些点抽稀和点聚合的相关算法,觉得两者的实现和使用场景是有很大区别的。
首先,点抽稀的特征抽稀结果是较少点的数量,最终保留的点的坐标值仍然是原来的值。以地形高程采样点为例,矢量化原始采样点数据,在一些区域存在密集程度较高的采样点,统计该区域内的采样点的高程值,若该区域密集点的高程值在高程差范围内,在该比例尺该区域内则没有必要保留所有的采样点,需要对该区域内的高程点进行抽稀,通常会根据一些运算规则指定优先级,依据该优先级对高程差范围内的采样点进行抽稀,最终在能够表现该区域地形形态的基础上均匀地保留一些采样点,以便于高效的进行差值运算获得等高线、TIN和数字高程模型,最终能够保证通过地形分析获得最终想要的结果。
点的聚合在地图点的展示形态上和点抽稀直观的表现类似,大量的点在地图上能够动态且美观的展示的实现,其实是聚合的实现效果。
聚合结果要展示聚合区域内数据最全面的信息,而且又不产生重叠覆盖,动态比例尺下展示数据不仅需要保证地图展示效果,而且展示出的点位又说明了点位数据的空间分布特性,并且,最终的聚合点并不一定是原来数据中的点,有可能是通过聚合算法计算出的一个位置,这是与 点抽稀一个显著的差别!!!!
试想,如果在筛选外业测量的地形数据点时,使用了聚合算法,就很有可能造成接下来差值结果与真是结果相差甚远,接下来的地形分析也很有可能是错误的,这样产生的最终决策也就不具备的参考价值。
本博客为原创博客,拥有绝对版权,转载请标明源地址:https://blog.csdn.net/luojingweikai/article/details/88401201
参考:https://blog.csdn.net/yaoxiaochuang/article/details/50571957
http://www.cnblogs.com/LBSer/p/4417127.html
大数据量点的地图展示,借助PostGIS实现动态点抽稀/聚合效果相关推荐
- BigData:基于python编程—根据中国各个城市地理坐标+人口、GDP大数据进行标记中国地图、热点图、动态图
BigData:基于python编程-根据中国各个城市地理坐标+人口.GDP大数据进行标记中国地图.热点图.动态图 目录 输出结果 1.地理坐标图 2.GDP热点图 3.人口热力图 输出结果 1.地理 ...
- 数据库查询经常卡死?面对亿级大数据量,我是这么展示分析的
建议你们看到文末,不会亏待你们 日常一提数据分析和可视化,就想到这个工具操作要多简单易用,图表要多美多炫,然而总是忽略背后的数据支撑. excel 几十万行数据就卡死崩,谈何数据透视表.可视化? 近千 ...
- echarts框架下大数据量展示的解决方案
echarts+大数据量.这是个无解的问题! 大数据量,什么样的数据才算大呢?在echart 4.5.0版本中,画折线图,数据线一共1001000条,每条数据5002200个数据点,即最小数据5000 ...
- web 折线图大数据量拉取展示方案_【第2010期】QQ音乐Android客户端Web页面通用性能优化实践...
前言 今日早读文章由QQ音乐客户端开发工程师@关岳分享,公号:云加社区(ID:QcloudCommunity,腾讯云官方开发者社区)授权分享. 正文从这开始~~ QQ音乐 Android 客户端的 W ...
- 大数据量树形数据表格展示, 虚拟表格,el-table, umy-ui, 表格懒加载
1. 出现的问题 要展示树形数据表格,根据当前点击的表格行去请求新的数据并展示, 基于这种情况遇到以下问题 1). 当树形表格数据层级大于五级且数据量较多时, 浏览器崩溃 2). 当数据条数展示超出5 ...
- 上亿级的大数据量,如何高性能实现展示分析?
上亿级的大数据量,如何高性能实现展示分析? 日常一提数据分析和可视化,就想到这个工具操作要多简单易用,图表要多美多炫,然而总是忽略背后的数据支撑. excel 几十万行数据就卡死崩,谈何数据透视表.可 ...
- 数据可视化大屏电商数据展示平台开发实录(Echarts柱图曲线图、mysql筛选统计语句、时间计算、大数据量统计)
数据可视化大屏电商数据展示平台 一.前言 二.项目介绍 三.项目展示 四.项目经验分享 4.1 翻牌器 4.1.1 翻牌器-今日实时交易 4.1.2.翻牌器后端统计SUM函数的使用 4.2 不同时间指 ...
- EasyExcel 低内存导出大数据量的Excel方案探索 50万行 50列 (附:实现代码)
文章目录 1.前言 2.准备工作 3.导出测试 3.1.单次查询.全量导出 3.2. 多次查询,多个文件,单次写入 3.3.多次查询,多个文件,多次写入 3.4.多线程导出探索 3.5.文件打包成ZI ...
- MySQL数据库如何解决大数据量存储问题
FROM http://blog.csdn.net/likika2012/article/details/38816037 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存 ...
- 面试精讲之面试考点及大厂真题 - 分布式专栏 17 ElasticSearch解决大数据量检索难题
17 ElasticSearch解决大数据量检索难题 理想的书籍是智慧的钥匙. --列夫·托尔斯泰 引言 如果你的项目里有超过千万上亿级别的数据,且数据日增量较大需要高性能检索时,如订单数据,你该怎么 ...
最新文章
- IOS 内存管理小结
- windows无法连接到打印机 操作失败,错误为0x00000002 解决方案
- new Map的妙用
- spring中的JdbcTemplate——JdbcTemplate的最基本用法
- python图像复制、显示、保存
- Tiling_easy version
- Java IO流学习总结七:Commons IO 2.5-FileUtils
- 诗词歌赋,样样精通!诗词古语小程序带你领略魅力古风丨实战
- java成绩前五名的代码_java 如何选出成绩排前5名的学生呢
- CI框架 -- URL
- 通信原理实验(〇):音频信号的播放蒙特卡洛模拟
- 微软小冰迎来了一个新姐妹:“欣小然”
- Himall商城普通帮助类(一)
- xy转utm坐标(个人推算)
- Unity3D中Grid Layout Group组件一键实现自动排版Image
- html 苹果微信录音js,基于JS开发微信网页录音功能的实例代码
- 大数据(3i)Sqoop安装和操作
- JavaScript基础小节——手写重点整理02
- Ubuntu 16.04无线网卡RTL8723BE频繁掉线及信号不足解决办法
- cad镜像后标注尺寸数字反了_CAD中文字镜像后倒过来了,怎么办?仅修改一个参数值就搞定了...
热门文章
- TensorFlow Serving 入门教程(Windows)
- android7.1刷supersu,Android怎么刷SuperSU 安卓系统刷SuperSU Pro教程
- oracle01004,Oracle goldengate的OGG-01004 OGG-1296错误
- JAVA基础之HttpServletResponse响应
- AIX 6:新特性概述
- MIT | 数据分析、信号处理和机器学习中的矩阵方法 笔记系列: Lecture 8 Norms of Vectors and Matrices
- 《预告 》 明天(9月19日),中国科学院自动化研究所首届智能决策论坛即将开幕!(附带10+位作者演讲主题及摘要)...
- 浅读《图解密码技术》--学习笔记
- 一个敷衍的开头。。。
- win7 定时开关机命令