本发明属于地理信息技术领域,尤其涉及一种在webgis环境下动态图例的高效显示方法及装置。
背景技术
在地理信息系统中,图例是系统中不可或缺的一部分重要元素,用于对地图上所显示出来的图形进行集中式的描述,让观看者可以便捷地了解图形符号的含义。
图例一般在地图制作过程中就已经明确下来数量和样式,在系统中调用图例功能时,会直接显示所有图例,当图例较多时,图例界面会显得比较杂乱无序。在现有技术方案中,已经有人提出采用动态显示的方法,根据当前地图视野内的所显示出来的实际要素,实时判别需要显示出来的图例,将不需要的图例隐藏起来,可有效改善图例杂乱,干扰使用者视觉识别的体验,一定程度上提升了图例的显示效果。
现有的技术方案中,采用的策略是每次地图漫游范围改变时,获取当前的地图范围,对范围内的地图数据进行空间查询,对查询出来的数据按属性字段进行图例匹配,进而确定要显示的图例的序列,并显示在图例区域中。
上述技术方案的主要缺点是,采用实时的空间查询,当地图范围内数据量较大的情况下,容易因为计算速度慢,引起用户界面上的图例刷新延迟,引起用户体验不佳。
技术实现要素:
鉴于上述问题,本发明的目的在于提供一种在webgis环境下动态图例的高效显示方法及装置,旨在解决采用现有技术方案时,当地图范围内数据量较大的情况下,容易因为计算速度慢,引起用户界面上的图例刷新延迟,引起用户体验不佳等技术问题。
本发明采用如下技术方案:
所述在webgis环境下动态图例的高效显示方法包括如下步骤:
步骤s1、将整个地图按照级别进行分层,且针对每个图层进行格网划分,存储格网内的图例信息至当前格网内,最终得到含有图例信息的全格网数据;
步骤s2、当地图范围改变时,根据当前地图范围和级别,获取与当前地图范围产生交集的全部格网,剔除获取到全部格网内的重复图例信息;
步骤s3、在用户界面上显示最终的图例信息。
进一步的,所述步骤s1具体包括如下步骤:
将整个地图按四叉树的模式划分为若干级别的金字塔,每级金字塔划分为横纵排列的若干格网,每一个格网通过级别、行号、列号进行表示,每一个格网表示为一个固定的地图范围;
以图层为单位,计算图层落在每个格网中的要素,并按预设的符号化规则记录下落到格网中要素的符号id并删除重复的符号id,所述符号化规则为符号图例映射关系,每条映射关系包括符号id、图例名称和图例图片,其中所述图例名称和图例图片构成一条图例信息。
进一步的,所述步骤s2具体包括如下步骤:
当地图范围改变时,获取地图当前比例尺和具体地图范围,通过当前比例尺计算出最近一级的金字塔级别号;
获取该金字塔级别号相应层的格网中与地图范围产生交集的全部格网;
获取所述全部格网内的所有符号id,剔除重复的符号id,得到剩余的符号id;
根据所述符号化规则获取剩余符号id对应的图例信息,即图例名称和图例图片。
进一步的,所述获取该金字塔级别号相应层的格网中与地图范围产生交集的全部格网步骤,具体如下:
每个格网具有横坐标最小值xmin,纵坐标最小值ymin,横坐标最大值xmax,纵坐标最大值ymax,获取格网级别与该金字塔级别号一致的所有格网,称之为目标格网g(n);
对于当前的地图范围m(xmin,ymin,xmax,ymax),遍历每一个目标格网g(n),满足g(n)xmin<=mxmin<=g(n)xmax公式的目标格网的列号标记为cmin,满足g(n)xmin<=mxmax<=g(n)xmax公式的目标格网的列号标记为cmax,满足g(n)ymin<=mymin<=g(n)ymax公式的目标格网的行号标记为rmin,满足g(n)ymin<=mymax<=g(n)ymax公式的目标格网的行号标记为rmax,其中g(n)xmin和g(n)xmax分别是目标格网g(n)的横坐标最小值和横坐标最大值,g(n)ymin和g(n)ymax分别是目标格网g(n)的纵坐标最小值和纵坐标最大值,,mxmin和mxmax分别是当前地图范围的横坐标最小值和横坐标最大值,mymin和mymax分别是当前地图范围的纵坐标最小值和坐标最大值;
根据rmin、rmax、cmin、cmax得到目标格网与当前地图范围产生交集的全部格网g(r,c),其中r为行号,c为列号,满足rmin<=r<=rmax,cmin<=c<=cmax。
另一方面,所述在webgis环境下动态图例的高效显示装置,包括如下单元:
格网数据获取单元:用于将图例信息储存到格网数据中;
信息净化单元:当地图范围改变时,用于获取与当前地图范围产生交集的全部格网,并且去除全部格网内的重复图例信息;
界面显示单元:用于显示最终的图例信息。
本发明的有益效果是:本发明主要思路是,将图例信息储存到划分好的格网中,最终得到含有图例信息的全格网数据;当动态显示地图图例时,根据当前地图范围和级别,获取与当前地图范围产生交集的全部格网,剔除获取到全部格网内的重复图例信息;最终在用户界面上显示最终的图例信息。通过以上预处理过程,所有格网中都包含了地图中每个图层的符号信息,有效的提升了在地图范围内数据量过大的情况下,动态图例计算的性能,减少了对数据本身的读写访问,提高了系统的整体性能。
附图说明
图1是本发明实施例提供的一种在webgis环境下动态图例的高效显示方法的流程图;
图2是本发明实施例提供的网格的图例信息计算方法事例图;
图3是本发明实施例提供的计算地图格网过程事例图;
图4是本发明实施例提供的一种在webgis环境下动态图例的高效显示装置图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
如图1所示,本发明实施例提供的在webgis环境下动态图例的高效显示方法包括如下步骤:
步骤s1、将整个地图按照级别进行分层,且针对每个图层进行格网划分,存储格网内的图例信息至当前格网内,最终得到含有图例信息的全格网数据。
目前地图都为层次结构,不同层次级别对应不同比例尺,本步骤的目的是将各图层进行格网划分并在格网内存储图例信息,具体的,本步骤具体实现过程如下:
s11、将整个地图按四叉树的模式划分为若干级别的金字塔,每级金字塔即为一个图层,每级金字塔划分为横纵排列的若干格网,每一个格网通过级别、行号、列号进行表示,每一个格网表示为一个固定的地图范围;
s12、以图层为单位,计算图层落在每个格网中的要素,并按预设的符号化规则记录下落到格网中要素的符号id并删除重复的符号id,所述符号化规则为符号图例映射关系,每条映射关系包括符号id、图例名称和图例图片,其中所述图例名称和图例图片构成一条图例信息。
以上过程属于预处理过程,可以按任务量大小划分为多线程任务,以加快任务处理的效率。
在本发明实施例中,每个格网通过级别、行号、列号进行标识,分别用l、r、c表示,每个格网表示为一个固定的地图范围,g(n)表示为目标格网,以图2为例,图2中包含一个正六边形和一个梯形,其中正六边形图形的符号表示为dotred,梯形图形的符号表示为dotblue,正六边形图形落入到g(l、r+1、c+1)格网中,梯形图形落入到g(l、r+1、c+1)、g(l、r+1、c+2)目标格网中因此,计算出来的格网的图例信息为:
g(l、r、c)=>无信息
g(l、r、c+1)=>无信息
g(l、r、c+2)=>无信息
g(l、r+1、c)=>无信息
g(l、r+1、c+1)=>dotred、dotblue
g(l、r+1、c+2)=>dotblue
g(l、r+2、c)=>无信息
g(l、r+2、c+1)=>无信息
g(l、r+2、c+2)=>无信息。
本发明主要思路是采用基于比例尺格网的缓存技术,将图例信息存储到含有图层格网中,通过计算得到图例信息。
步骤s2、当地图范围改变时,根据当前地图范围和级别,获取与当前地图范围产生交集的全部格网,剔除获取到全部格网内的重复图例信息。
在一个地图级别时,如果进行地图缩放,地图范围发生变化,继续缩放会切换到下一级别。本步骤直接获取在当前级别内与地图范围产生交集的全部格网,产出全部格网内的重复图例信息,剩下的图例信息就是需要显示的图例信息。为了便于处理,本实施例对图例信息进行符号化处理。具体包括下述步骤:
s21、当地图范围改变时,获取地图当前比例尺和具体地图范围,通过当前比例尺计算出最近一级的金字塔级别号;
s22、获取该金字塔级别号相应层的格网中与地图范围产生交集的全部格网;
s23、获取所述全部格网内的所有符号id,剔除重复的符号id,得到剩余的符号id;
s24、根据所述符号化规则获取剩余符号id对应的图例信息,即图例名称和图例图片。
上述步骤s22用于获取与地图范围产生交集的全部格网,具体实现过程如下:
每个格网具有横坐标最小值xmin,纵坐标最小值ymin,横坐标最大值xmax,纵坐标最大值ymax,获取格网级别与该金字塔级别号一致的所有格网,称之为目标格网g(n);
对于当前的地图范围m(xmin,ymin,xmax,ymax),遍历每一个目标格网g(n),满足g(n)xmin<=mxmin<=g(n)xmax公式的目标格网的列号标记为cmin,满足g(n)xmin<=mxmax<=g(n)xmax公式的目标格网的列号标记为cmax,满足g(n)ymin<=mymin<=g(n)ymax公式的目标格网的行号标记为rmin,满足g(n)ymin<=mymax<=g(n)ymax公式的目标格网的行号标记为rmax,其中g(n)xmin和g(n)xmax分别是目标格网g(n)的横坐标最小值和横坐标最大值,g(n)ymin和g(n)ymax分别是目标格网g(n)的纵坐标最小值和纵坐标最大值,,mxmin和mxmax分别是当前地图范围的横坐标最小值和横坐标最大值,mymin和mymax分别是当前地图范围的纵坐标最小值和坐标最大值;
根据rmin、rmax、cmin、cmax得到目标格网与当前地图范围产生交集的全部格网g(r,c),其中r为行号,c为列号,满足rmin<=r<=rmax,cmin<=c<=cmax。
在本实施例中,如图3所示,其中虚线内属于地图范围,通过上述计算方法,9个格网与地图范围产生交集,然后将这9个格网内的符号id进行统计,删除重复的符号id,将剩余符号id对应的图例信息进行显示即可。通过这种计算方式,有效的避免了每次地图范围发生变化的时候,实时进行空间查询所带来的性能影响,技能满足动态图例的功能要求,又能满足在web环境下图例计算过程的性能要求。
步骤s3、在用户界面上显示最终的图例信息。
实施例二:
如图4所示,本发明提供一种在webgis环境下动态图例的高效显示装置,用于完成本发明提供的在webgis环境下动态图例的高效显示方法,所述在webgis环境下动态图例的高效显示装置包括
预处理单元:用于将图例信息储存到格网数据中;
图例实时调用单元:当地图范围改变时,用于获取与当前地图范围产生交集的全部格网,并且去除全部格网内的重复图例信息;
界面显示单元:用于显示最终的图例信息。
作为所述预处理单元的一种具体结构,包括:
格网划分模块,用于将整个地图按四叉树的模式划分为若干级别的金字塔,每级金字塔即为一个图层,每级金字塔划分为横纵排列的若干格网,每一个格网通过级别、行号、列号进行表示,每一个格网表示为一个固定的地图范围;
符号化模块,用于以图层为单位,计算图层落在每个格网中的要素,并按预设的符号化规则记录下落到格网中要素的符号id并删除重复的符号id,所述符号化规则为符号图例映射关系,每条映射关系包括符号id、图例名称和图例图片,其中所述图例名称和图例图片构成一条图例信息。
作为所述图例实时调用单元的一种具体结构,包括:
级别号获取模块,用于当地图范围改变时,获取地图当前比例尺和具体地图范围,通过当前比例尺计算出最近一级的金字塔级别号;
格网获取模块,用于获取该金字塔级别号相应层的格网中与地图范围产生交集的全部格网;
符号处理模块,用于获取所述全部格网内的所有符号id,剔除重复的符号id,得到剩余的符号id;
图例获取模块,用于根据所述符号化规则获取剩余符号id对应的图例信息,即图例名称和图例图片。
其中所述格网获取模块包括:
格网筛选单元,用于获取格网级别与该金字塔级别号一致的所有格网,称之为目标格网g(n),每个格网具有横坐标最小值xmin,纵坐标最小值ymin,横坐标最大值xmax,纵坐标最大值ymax;
格网计算单元,用于对于当前的地图范围m(xmin,ymin,xmax,ymax),遍历每一个目标格网g(n),满足g(n)xmin<=mxmin<=g(n)xmax公式的目标格网的列号标记为cmin,满足g(n)xmin<=mxmax<=g(n)xmax公式的目标格网的列号标记为cmax,满足g(n)ymin<=mymin<=g(n)ymax公式的目标格网的行号标记为rmin,满足g(n)ymin<=mymax<=g(n)ymax公式的目标格网的行号标记为rmax,其中g(n)xmin和g(n)xmax分别是目标格网g(n)的横坐标最小值和横坐标最大值,g(n)ymin和g(n)ymax分别是目标格网g(n)的纵坐标最小值和纵坐标最大值,,mxmin和mxmax分别是当前地图范围的横坐标最小值和横坐标最大值,mymin和mymax分别是当前地图范围的纵坐标最小值和坐标最大值;
格网处理单元,用于根据rmin、rmax、cmin、cmax得到目标格网与当前地图范围产生交集的全部格网g(r,c),其中r为行号,c为列号,满足rmin<=r<=rmax,cmin<=c<=cmax。
上述各个功能模块、功能单元对应实现了实施例一中各步骤,具体实现过程这里不再赘述。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。