本发明涉及一种基于地图的海量数据聚合显示方法,属于地图的海量数据聚合显示技术领域。
背景技术:
互联网技术飞速发展带来的各类信息化产品越来越多,特别近两年大数据技术的慢慢成熟为大型政企的管理提供了更精细化的数据支持,如基于海量数据地图展示的指挥管理及调度系统应用也越来越多。
海量数据的前端显示与传统的显示技术最大的区别就是数据量变的很大,由于传统的地图引擎大多是基于关系型数据库的,其数据量到百万级查询速度就已经很慢了,在地图上展现效率更是低下,而基于大数据的系统往往数据量都在数十亿条以上,相应需要展示的数据量也随之很大,所以急需一种为海量数据提供基于地图的展示方法。
当前一些类似应用中,为了解决该问题,大多采用将数据结合进地图后将地图进行切片,再由前端展现,该方法虽然可以解决显示效率问题,但无法展现实时变化的数据。而在实际应用中经常会碰到例如地图上车辆位置展示、天气实况展示、设备地域分布展示等等情况,该方法则无法满足需求。
技术实现要素:
针对上述现有技术存在的问题,本发明提供一种基于地图的海量数据聚合显示方法,可解决现有技术中海量数据在地图上展示的性能问题。
为了实现上述目的,本发明采用的一种基于地图的海量数据聚合显示方法,其具体步骤如下:
步骤1、调用任一地图作为底图;
步骤2、在调用的地图上添加网格覆盖物层,网格覆盖物层中的网格数为当前要显示的数据数;
步骤3、从服务端获取需要展示的数据,遍历数据与每个网格所包含的经纬度范围进行比较,将落入同一网格内的数据进行聚合,聚合方式可根据需求而定;
步骤4、通过前三步得到当前屏幕要展示的聚合后数据,将所有数据定位到其对应的网格经纬度并渲染到地图中,即达到数据聚合展示的目的。
当地图层级变化时,即地图放大或缩小时,只需重复执行步骤2至步骤4即可。
上述步骤1中调用的地图是百度在线地图、高德在线地图或各种离线地图。
上述步骤3中的聚合方式取同一网格内数据的平均值,或者取同一网格内数据的数量。
本发明使用聚合显示方法,通过地图显示级别,将地理位置相近的数据聚合为一个数据点,以按当前屏幕经纬度范围来获取数据展示,以达到地图标注数据高速显示的目的,解决了现有技术中海量数据在地图上展示的性能问题。
附图说明
图1为本发明的流程示意图;
图2为本发明在底图上添加网格覆盖物层后的示意图;
图3为本发明经过前四个步骤后的数据渲染示意图;
图4为本发明地图放大后的数据渲染示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明。该实施例用于举例说明,并不用于限制本发明,如聚合的方式可灵活修改。
以基于web地图的气象格点图为例,具体按以下步骤实施:
步骤1、调用百度在线地图做为底图。
步骤2、在地图上添加网格覆盖物层,覆盖物层以当前间隔尺度(interval)为栅格格点单位均匀的分布在地图上,间隔尺度是地图上每个网格的长宽,即取当前屏幕长(像素)和宽(像素)除以需要显示的网格数,该网格数即为当前要显示的气象要素数。如图2所示,在底图上添加网格,网格的长宽根据当前需要显示的聚合后的数据数量而定。
步骤3、通过当前屏幕的地图最大经纬度和最小经纬度从服务端获取需要展示的数据,遍历数据,将数据的经纬度属性与网格覆盖物层中每个网格所包含的经纬度范围进行比较,将落入同一网格内的数据进行聚合,并记录下对应网格中心点的经纬度,聚合的方式可根据需求而定,在这里采用求平均值的方式,即将落入同一网格内的要素值求和后除以同一网格内的要素数量得到平均值。
步骤4、通过前三步得到当前屏幕要展示的聚合后要素值,将所有要素定位到其对应的网格经纬度并渲染到web地图中,即达到数据聚合展示的目的。
如图3为渲染后的地图数据格点展示效果,该图展示的是采用平均值方式聚合后的要素值渲染效果。
而当地图层级变化时,即地图放大或缩小时,只要重复执行步骤2至步骤4即可。如图4为地图放大后格点渲染的效果,屏幕中显示的格点数没有改变,但展示的数据粒度更细。
上述步骤1中调用的地图也可以是高德在线地图或各种离线地图。
上述步骤3中的聚合方式是取同一网格内数据的平均值。此外,也可取同一网格内数据的数量。
实施例一:
以气象精细化预报格点数据为例,以高德地图为底图,先通过当前屏幕显示范围的坐标取最小坐标与最大坐标,定义间隔尺度,生成方格,将预报格点数值依次判断其坐标落点,将落入同一方格的数据进行平均值计算得出一系列代表点,同时记下屏幕范围内代表点的最大值与最小值并取整,根据预先定义好的图例色阶计算每个颜色所对应的数值范围。
调用高德地图polygon类循环画出覆盖物,根计算据代表点的经度long、纬度lat计算生成轮廓线的节点坐标数组:[newamap.lnglat((long,lat)),newamap.lnglat((long+interval/1000,lat)),newamap.lnglat((ong+interval/1000,lat-interval/1000)),newamap.lnglat((long,lat-interval/1000))],该格点的颜色由当前的值去映射关系中获取,循环结束,画出格点层;在格点上展示平均值时,可以调用marker类循环添加marker层,marker的显示位置为代表点的经度long、纬度lat,marker的内容是代表点的平均值。
最后通过调用地图api和预先计算好图例数值将图例画出。
综上所述,通过本发明算法可将几十甚至上百万预报格点数据快速的展示到地图上,从而达到让预报员更加直观的了解天气情况。
实施例二:
以车辆监控系统为例,以高德地图为底图,取当前屏幕坐标最小与最大值,定义间隔尺度,生成方格,取出所有要显示的车辆信息,循环取出车辆当前坐标,将落入同一方格的车辆数据累加,得出同一区域内聚合了多少辆车,并将方格坐标做为代表点。
调用高德地图的marker类循环添加marker层的图标,marker的显示位置为代表点的坐标位置,marker的显示内容为代表点的车辆数量总和。
综上所述,通过聚合算法实现大量的车辆数据高速高效的同时在地图上展示,用户可一目了然的查看车辆数量和位置。