一种基于GIS的离散站点分级显示的方法及装置
技术领域
本发明涉及地理信息系统的页面显示领域,尤其涉及一种基于GIS的离散站点分级显示的方法及装置。
背景技术
在地理信息系统(Geographic Information System,GIS)页面展示数据点,一般是把所有点叠加到当前页面区域,点数量过多的话,会影响页面加载效率,并且在观察上不容易分辨整体的点的分布。因此,在一个GIS地图区域展示大量点,一个屏幕显示点过于密集,不容易识别点,显示效果也不好。
应该注意,上面对技术背景的介绍只是为了方便对本发明的技术方案进行清楚、完整的说明,并方便本领域技术人员的理解而阐述的。不能仅仅因为这些方案在本发明的背景技术部分进行了阐述而认为上述技术方案为本领域技术人员所公知。
发明内容
本发明为了解决现有的页面显示效率低,且不容易分辨的问题,提出一种基于GIS的离散站点分级显示的方法及装置。
为了达到上述目的,本发明实施例提供一种基于GIS的离散站点分级显示的方法,包括:步骤S1,根据输入的经纬度点数组和加载的地图级别,获取当前的地图范围;步骤S2,根据所述地图级别将所述地图范围内的区域切分成网格,并根据经度步长、纬度步长以及所述地图范围的经纬度数据,计算经度间隔和纬度间隔;步骤S3,根据所述地图范围以及所述经度间隔、纬度间隔,建立切分成的网格的地图范围的二维数组;步骤S4,将当前的分组设定成N组,并根据所述经度步长、纬度步长、分组以及所述二维数组,对所述输入的经纬度点数组进行不同级别的遍历分组;步骤S5,将分组完成的经纬度点数组对应当前的级别,进行分组分级别展示。
为了达到上述目的,本发明实施例提供一种基于GIS的离散站点分级显示的装置,包括:地图范围获取模块,用于根据输入的经纬度点数组和加载的地图级别,获取当前的地图范围;经纬度间隔计算模块,用于根据所述地图级别将所述地图范围内的区域切分成网格,并根据经度步长、纬度步长以及所述地图范围的经纬度数据,计算经度间隔和纬度间隔;二维数组建立模块,用于根据所述地图范围以及所述经度间隔、纬度间隔,建立切分成的网格的地图范围的二维数组;遍历分组模块,用于将当前的分组设定成N组,并根据所述经度步长、纬度步长、分组以及所述二维数组,对所述输入的经纬度点数组进行不同级别的遍历分组;分级展示模块,用于将分组完成的经纬度点数组对应当前的级别,进行分组分级别展示。
本发明实施例的基于GIS的离散站点分级显示的方法及装置,实现了对离散站点的根据点位置进行分级展示,每一级别在空间的位置上均匀分布,合理分配,提高了显示效果以及页面加载效率。-
参照后文的说明和附图,详细公开了本发明的特定实施方式,指明了本发明的原理可以被采用的方式。应该理解,本发明的实施方式在范围上并不因而受到限制。在所附权利要求的精神和条款的范围内,本发明的实施方式包括许多改变、修改和等同。
针对一种实施方式描述和/或示出的特征可以以相同或类似的方式在一个或更多个其它实施方式中使用,与其它实施方式中的特征相组合,或替代其它实施方式中的特征。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的基于GIS的离散站点分级显示的方法的处理流程图;
图2为本发明实施例的一种基于GIS的离散站点分级显示的装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
应该强调,术语“包括/包含”在本文使用时指特征、整件、步骤或组件的存在,但并不排除一个或更多个其它特征、整件、步骤或组件的存在或附加。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
本发明的创新点就是在GIS页面进行显示的时候,根据点位置进行分级展示,将每一级别在空间的位置上均匀分布,合理分配。例如:在项目之中做数据展示的时候,因为某个省或者市的建设雨量站点密度较大,在较低级别的时候,点全部覆盖到一起,展示上不容易接受,并且在屏幕上同时显示数量较大的信息,浏览器性能降低,影响页面渲染。也就是说,利用现有的显示方式,把全部点都一次展示出来的方式不满足实际的展示效果。
图1为本发明实施例的基于GIS的离散站点分级显示的方法的处理流程图。如图所示,包括:步骤S1,根据输入的经纬度点数组和加载的地图级别,获取当前的地图范围;步骤S2,根据所述地图级别将所述地图范围内的区域切分成网格,并根据经度步长、纬度步长以及所述地图范围的经纬度数据,计算经度间隔和纬度间隔;步骤S3,根据所述地图范围以及所述经度间隔、纬度间隔,建立切分成的网格的地图范围的二维数组;步骤S4,将当前的分组设定成N组,并根据所述经度步长、纬度步长、分组以及所述二维数组,对所述输入的经纬度点数组进行不同级别的遍历分组;步骤S5,将分组完成的经纬度点数组对应当前的级别,进行分组分级别展示。
在本实施例中,经纬度点数组就是一组由点组成经纬度数据,例如数据格式一般为[{经度:119.1,纬度:36.5},{经度:119.2,纬度:36.15}]。在输入数据时,可以根据需求来采集,比如可以获取某省的雨量站的数据的站点经纬度数组,共有几千个。
地图级别,即在浏览地图的时候当前查看地图的比例级别,根据用户放大缩小地图的时候,地图级别不一样,类似于比例尺级别。地图级别一般包括1-20级,当前查看的地图级别在这个范围内,可以用数字表示,比如:12。
地图范围,就是一个矩形图形范围,在位置上能包含住上边的经纬度点数组,通常用左下角和右上角的经纬度数据来表示,即格式一般是:
extent={xmin:112,ymin:33,xmax:114,ymax:37}。
在本实施例的步骤S2中,根据所述地图级别将所述地图范围内的区域切分成网格,具体包括:将所述地图范围内的区域,在经度和纬度上均划分为与所述地图级别对应的网格的数量;即,所述经度步长为在经度上划分的每一格的经度范围;所述纬度步长为在纬度上划分的每一格的纬度范围。
也就是说,在一个矩形区域也就是地图范围内,根据地图级别,比如初始化的时候地图级别10,那么就把这个地图范围切成10*10的小方格,即经度步长和纬度步长就是10,这样就能得出,每个小格子之间的经纬度的间隔。
所述经度间隔xCell等于地图范围extent右上角经度extent.xmax减去地图范围左下角经度extent.xmin的值除以经度步长xstep,即计算公式为:
xCell=(extent.xmax-extent.xmin)/xstep;
所述纬度间隔yCell等于地图范围extent右上角纬度extent.ymax减去地图范围左下角纬度extent.ymin的值除以纬度步长ystep,即计算公式为:
yCell=(extent.ymax-extent.ymin)/ystep。
在本实施例的步骤S3中,根据所述地图范围以及所述经度间隔和纬度间隔,建立网格的范围的二维数组cellXY。
根据所述经度间隔xCell、纬度间隔yCell,外层从左到右作为主遍历,循环长度为所述经度步长xstep,索引值为i,初始值为0;内部从下到上进行遍历,循环长度为所述纬度步长ystep,索引值为j,初始值为0;
即,二维数组cellXY[i][j]的范围组成包括:
左下角经度xmin等于地图范围extent的左下角经度extent.xmin加上经度步长xstep乘以当前索引i,即:xmin=extent.xmin+xstep*i;
左下角纬度ymin等于地图范围extent的左下角纬度extent.ymin加上纬度步长ystep乘以当前索引j,即:ymin=extent.ymin+ystep*j;
右上角经度xmax等于地图范围extent的右上角经度extent.xmax加上经度步长xstep乘以当前索引i加1,即:xmax=extent.xmax+xstep*(i+1);
右上角纬度ymax等于地图范围extent的右上角纬度extent.ymax加上纬度步长ystep乘以当前索引j加1,即:ymax=extent.ymax+ystep*(j+1)。
在本实施例的步骤S4中,将当前的分组设定成N组,并根据所述经度步长、纬度步长、分组以及所述二维数组,对所述输入的经纬度点数组进行不同级别的遍历分组,具体包括:循环遍历所述二维数组和所述经纬度点数组,判断所述经纬度点数组中的点的经纬度范围是否在所述二维数组中的数据的包络范围之内,如果在,则作为该次遍历分组中的数据,循环遍历N-1次,将剩余的数据都作为第N组的数据。
在本实施例中,可根据经验设定分组数目为5组,这样的话运算消耗运算资源不大,时间比较快。
将分组设定完毕后,进行遍历分组,其具体实现步骤如下:
步骤S41,第一层循环从左到右遍历经度步长xstep,索引值为i1,初始值为0,遍历循环间隔是2;
步骤S42,第二层循环从下到上遍历纬度步长ystep,索引值为j1,初始值为0,遍历循环间隔是2;
步骤S43,根据步骤S41和步骤S42的索引,获取二维数组cellXY当前的内容项ex,ex等于cellXY在当前索引的值,该值作为判断参数;
计算公式:ex=cellXY[i1][j1];
步骤S44,第三层倒序循环步骤S1中的输入的经纬度点数组list,索引值为k,初始值为数组长度;
步骤S45,第三层的循环根据索引的到的当前数据项point,point等于经纬度的点数组list在当前索引对应的值;
计算公式:point=list[k];
步骤S46,将步骤S45以及步骤S43的两个值进行比较判断,步骤S45的点的经纬度范围是否在步骤S43的包络范围之内,具体描述为;
对比经纬度点数组list根据索引顺序获取的点point,这个点有经纬度,和当前的二维数组的小格子范围进行比较,判断当前站点的经纬度数据是否在这个小格子里面,如果在这个里面这个点在属于这个组,在当前级别显示。
其判断方法为:比较步骤S45的点point的经度是否大于等于步骤S43的ex左下角经度,同时步骤S45的点point的经度是否小于等于步骤S43的ex右上角经度,步骤S45的点point的纬度是否大于等于步骤S43的ex左下角纬度,同时步骤S45的点point的纬度是否小于等于步骤S43的ex右上角纬度,作为判断条件,如果成功的话,把当前点point作为第一个分组,然后转入下一个判断循环。
在第一次循环时,当经纬度点数组list中的某一点属于二维数组的某个数据范围时,则确定该点属于第一组,所有在该次循环中符合判断条件的点的集合,作为第一组显示的数据集合;第一遍数据遍历后,将第一组的数据除去,再进行第二遍循环遍历,同样,当经纬度点数组list中的某一点属于二维数组的某个数据范围时,则确定该点属于第二组,所有在该次循环中符合判断条件的点的集合,作为第二组显示的数据集合,同样进行第三组第四组的循环遍历,当第四组的数据遍历后,将剩余的所有的点数据归为第五组数据。
这样的话,在进行显示的时候,可以根据第一组、第二组、第三组、第四组、第五组的顺序依次显示。
在本实施例的步骤S5中,将分组完成的经纬度点数组对应当前的级别,进行分组分级别展示。
应当注意,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
在介绍了本发明示例性实施方式的方法之后,接下来,参考图2对本发明示例性实施方式的基于GIS的离散站点分级显示的装置进行介绍。该装置的实施可以参见上述方法的实施,重复之处不再赘述。以下所使用的术语“模块”和“单元”,可以是实现预定功能的软件和/或硬件。尽管以下实施例所描述的模块较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图2为本发明实施例的一种基于GIS的离散站点分级显示的装置的结构示意图。
如图2所示,包括:
地图范围获取模块101,用于根据输入的经纬度点数组和加载的地图级别,获取当前的地图范围;
经纬度间隔计算模块102,用于根据所述地图级别将所述地图范围内的区域切分成网格,并根据经度步长、纬度步长以及所述地图范围的经纬度数据,计算经度间隔和纬度间隔;
二维数组建立模块103,用于根据所述地图范围以及所述经度间隔、纬度间隔,建立切分成的网格的地图范围的二维数组;
遍历分组模块104,用于将当前的分组设定成N组,并根据所述经度步长、纬度步长、分组以及所述二维数组,对所述输入的经纬度点数组进行不同级别的遍历分组;
分级展示模块105,用于将分组完成的经纬度点数组对应当前的级别,进行分组分级别展示。
在本实施例中,所述经纬度间隔计算模块102用于根据所述地图级别将所述地图范围内的区域切分成网格,具体包括:
将所述地图范围内的区域,在经度和纬度上均划分为与所述地图级别对应的网格的数量;则
所述经度步长为在经度上划分的每一格的经度范围;
所述纬度步长为在纬度上划分的每一格的纬度范围。
在本实施例中,所述经纬度间隔计算模块102用于根据经度步长、纬度步长以及所述地图范围的经纬度数据,计算经度间隔和纬度间隔,具体包括:
所述经度间隔xCell等于地图范围extent右上角经度extent.xmax减去地图范围左下角经度extent.xmin的值除以经度步长xstep,即计算公式为:
xCell=(extent.xmax-extent.xmin)/xstep;
所述纬度间隔yCell等于地图范围extent右上角纬度extent.ymax减去地图范围左下角纬度extent.ymin的值除以纬度步长ystep,即计算公式为:
yCell=(extent.ymax-extent.ymin)/ystep。
在本实施例中,所述二维数组建立模块103用于根据所述地图范围以及所述经度间隔、纬度间隔,建立切分成的网格的地图范围的二维数组,具体包括:
根据所述经度间隔xCell、纬度间隔yCell,外层从左到右作为主遍历,循环长度为所述经度步长xstep,索引值为i,初始值为0;内部从下到上进行遍历,循环长度为所述纬度步长ystep,索引值为j,初始值为0;
即,二维数组cellXY[i][j]的范围组成包括:
左下角经度xmin等于地图范围extent的左下角经度extent.xmin加上经度步长xstep乘以当前索引i,即:xmin=extent.xmin+xstep*i;
左下角纬度ymin等于地图范围extent的左下角纬度extent.ymin加上纬度步长yCell乘以当前索引j,即:ymin=extent.ymin+ystep*j;
右上角经度xmax等于地图范围extent的右上角经度extent.xmax加上经度步长xstep乘以当前索引i加1,即:xmax=extent.xmax+xstep*(i+1);
右上角纬度ymax等于地图范围extent的右上角纬度extent.ymax加上纬度步长yCell乘以当前索引j加1,即:ymax=extent.ymax+ystep*(j+1)。
在本实施例中,所述遍历分组模块104用于将当前的分组设定成N组,并根据所述经度步长、纬度步长、分组以及所述二维数组,对所述输入的经纬度点数组进行不同级别的遍历分组,具体包括:
循环遍历所述二维数组和所述经纬度点数组,判断所述经纬度点数组中的点的经纬度范围是否在所述二维数组中的数据的包络范围之内,如果在,则作为该次遍历分组中的数据,循环遍历N-1次,将剩余的数据都作为第N组的数据。
本发明实施例的基于GIS的离散站点分级显示的方法及装置,实现了对离散站点的根据点位置进行分级展示,每一级别在空间的位置上均匀分布,合理分配,提高了显示效果以及页面加载效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。