CN110264542B - 在线绘制地图海量线的方法 - Google Patents
在线绘制地图海量线的方法 Download PDFInfo
- Publication number
- CN110264542B CN110264542B CN201910459982.3A CN201910459982A CN110264542B CN 110264542 B CN110264542 B CN 110264542B CN 201910459982 A CN201910459982 A CN 201910459982A CN 110264542 B CN110264542 B CN 110264542B
- Authority
- CN
- China
- Prior art keywords
- map
- broken line
- mass
- lines
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/203—Drawing of straight lines or curves
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/206—Drawing of charts or graphs
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种在线绘制地图海量线的方法,包括如下步骤:获取海量线数据,判断海量线是否具有权重,绘制海量线权重,海量线常规绘制。本发明具有能够实时获取海量线的数据,并将海量线在线绘制到地图上;能在用户查看地图时实时动态地绘制海量线,保证使用过程的流畅性;提升了用户体验,解决了底图发布成本高、数据更改不灵活的问题的特点。
Description
技术领域
本发明涉及在线绘制地图海量线技术领域,尤其是涉及一种实现在地图上实时动态地绘制海量线,并能够在绘制海量线的同时保证页面的流畅性的在线绘制地图海量线的方法。
背景技术
在移动应用中,主流的地图服务有高德地图、百度地图和ArcGis等,在地图展示过程中,实时的海量线绘制会造成地图页面卡顿,用户体验差。常规的做法是将海量线事先绘制到地图上,然后将绘制海量线的地图以底图的形式发布,当用户需要展示海量线时直接调用发布好的底图即可完成展示,这一方法很好的解决了卡顿的问题,且只需按照要展示的层级选择相应的海量线底图即可,对于地图开发人员来说使用简单,且展示效果好。
但上述解决方案通常都不是免费进行的,需要通过购买会员的形式获取底图发布功能;且发布底图仅仅适用于绘制的海量线是固定的情况下,若在海量线的数量或者坐标不确定,或无法事先获取的情况下,发布海量线底图的方式将无法解决问题。
发明内容
本发明的发明目的是为了克服现有技术在地图展示过程中实时的海量线绘制会造成地图页面卡顿的不足,提供了一种在地图上实时动态地绘制海量线,并能够在绘制海量线的同时保证页面的流畅性的在线绘制地图海量线的方法。
为了实现上述目的,本发明采用以下技术方案:
一种在线绘制地图海量线的方法,包括如下步骤:
(1-1)获取海量线数据;
(1-2)判断海量线是否具有权重;
当海量线存在权重且为规定内的数值时表明所述海量线有权重,进入(1-3);当海量线的权重为null或无权重参数时,表明海量线无权重,进入(1-4);
(1-3)绘制海量线权重;
(1-4)海量线常规绘制。
本发明摒弃了常规底图发布的方式,能够实时获取海量线的数据,并将海量线在线绘制到地图上;能在用户查看地图时实时动态地绘制海量线,并保证使用过程的流畅性;能够处理十万级的海量线,并保证地图页面流畅,大大提升了绘制海量线的效率,提升了用户体验,解决了底图发布成本高、数据更改不灵活的问题。
作为优选,步骤(1-3)包括如下步骤:
设定集合X为全体数据集合,以自定义折线对象的形式进行存储;
设定集合A为屏幕范围内展示的优先级最高的不超过Max条折线的集合,以地图折线对象形式进行存储;
设定集合B为缓存复用地图折线对象集合;
(2-1)初始化集合X、集合A和集合B;
(2-2)将海量线进行优先级排序,并按优先级从高到低存入集合X中;
(2-3)清除A中的不符合要求的折线,并初始化变量N=0;
(2-4)按优先级从高到低遍历X中的折线,取X中第N条折线数据,并做出判断;
当N小于X的长度或A的长度大于Max时,进入(2-5);
否则结束遍历,等待地图可视区域变化或地图层级改变;
(2-5)判断第N条折线的权重L是否小于当前地图层级L1;
若L小于L1,则使N值增加1,进入(2-4);
否则,进入(2-6);
(2-6)判断第N条折线是否在地图可视范围内;
若不在屏幕可视范围内,则使N值增加1,进入(2-4);
否则,进入(2-7);
(2-7)判断第N条折线是否已展示到地图上;
遍历A中的折线对象,查看第N条折线的数据,若第N条折线有折线对象,则表明该折线已展示到地图上,否则没有展示到地图上;
若已展示在地图上,则使N值增加1进入(2-4);
否则,遍历集合B中的地图折线对象,查看折线对象是否已经创建;
若折线对象已经创建,则获取B中已创建的地图折线对象T,添加T到地图组件中进行展示,并添加到A中,使N值增加1进入(2-4);
若折线对象没有创建,则重新创建地图折线对象T1,添加T1到地图组件中进行展示,并添加到A中,使N值增加1进入(2-4)。
作为优选,(2-3)包括如下步骤:
(3-1)遍历A中所有地图折线数据,并初始化变量M=0;
(3-2)判断M是否大于A的长度;
若大于,则遍历结束,进入(3-4);
否则,进入(3-3);
(3-3)判断M对应的地图折线对象Z中的权重是否小于当前地图的层级;
若小于当前地图的层级,则将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,使M值增加1进入(3-2)继续下一次遍历;
否则,进入(3-4);
(3-4)判断M对应的地图折线对象Z是否在地图可视范围内;
若在可视范围内,则使M值增加1进入(3-2),继续下一次遍历;
否则,则将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,使M值增加1进入(3-2)继续下一次遍历。
作为优选,NUM为临界值,MAX为折线集合数最大值,(1-4)包括如下步骤:
(4-1)初始化集合X、集合A和集合B;
(4-2)将海量线进行优先级排序,并按优先级从高到低存入集合X中;
(4-3)清除A中不符合要求的折线,并初始化变量N=0;
(4-3-1)遍历A中所有地图折线数据,并初始化变量M=0;
(4-3-2)判断M是否大于A的长度;
若大于A的长度,则遍历结束,进入(4-3-4);
否则,进入(4-3-3);
(4-3-3)判断M对应的地图折线对象Z是否在地图可视范围内;
若在可视范围内,则使M值增加1进入(4-3-2),继续下一次遍历;
否则,进入(4-3-4);
(4-3-4)判断第M条折线映射到屏幕上的长度是否大于NUM;
若大于,则使M值增加1进入(4-3-2),继续下一次遍历;
否则,将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,使M值增加1进入(4-3-2)继续下一次遍历;
(4-4)按优先级从高到低遍历X折线,取X中第N条折线数据,并做出判断;
当N小于X的长度或A的长度大于Max时,进入(4-5);
否则结束遍历,等待地图可视区域变化或地图层级改变;
(4-5)判断第N条折线是否在地图可视范围内;
若不在屏幕可视范围内,则N值增加1,进入(4-4);
否则,进入(4-6);
(4-6)判断第N条折线映射到屏幕上的长度是否大于NUM;
若小于,则使N增加1,进入(4-4),继续下一次遍历;
否则,进入(4-7);
(4-7)判断第N条折线是否已展示到地图上;
遍历A中的折线对象,查看第N条折线的数据,若第N条折线的数据有对应的折线对象,则表明该折线已展示到地图上,否则没有展示到地图上;
若已展示在地图上,则使N值增加1进入(4-4);
否则,遍历集合B中的地图折线对象,查看折线对象是否已经创建;
若折线对象已经创建,则获取B中已创建的地图折线对象T,添加T到地图组件中进行展示,并添加到A中,使N增加1进入(4-4);
若折线对象没有创建,则重新创建地图折线对象T1,添加T1到地图组件中进行展示,并添加到A中,使N增加1进入(4-4)。
作为优选,有权重的海量线优先级排序方法如下:
(5-1)获取每条折线的长度;
对于只有两点组成的折线,则两点之间的线段长度表示折线的长度,利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,计算出相邻两点的线段长度,然后选取最长的线段作为该折线的长度;
(5-2)对海量线进行排序,按照权重值从小到大的顺序进行排序,当两条折线权重相同时,按照长度从长到短的顺序进行排序;将排序结果存入集合X中;
在海量线展示过程中,权重值代表该折线所展示在地图上的最佳层级,权重值大于地图层级时按优先级进行展示,小于地图层级时不进行展示。
作为优选,无权重海量线优先级排序方法包括步骤如下:
(6-1)获取每条折线的长度;
对于只有两点组成的折线,则两点之间的线段长度则表示折线的长度,其计算方式是利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,计算出相邻两点的线段长度,然后选取最长的线段作为该折线的长度;
(6-2)比较所有折线的长度,并按从长到短的方式排序存入集合X中。
因此,本发明具有如下有益效果:能够实时获取海量线的数据,并将海量线在线绘制到地图上;能在用户查看地图时实时动态地绘制海量线,并保证使用过程的流畅性;能够处理十万级的海量线,并保证地图页面流畅,大大提升了绘制海量线的效率,提升了用户体验,解决了底图发布成本高、数据更改不灵活的问题。
附图说明
图1是本发明的一种海量线绘制总体流程图;
图2是本发明的一种海量线权重绘制流程图;
图3是本发明的一种海量线常规绘制流程图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步的描述。
如图1所示的实施例是一种在线绘制地图海量线的方法,包括如下步骤:
步骤一:获取海量线数据;
获取海量线是海量线绘制的前提,考虑到海量线数据庞大(本发明采用了十万级的折线,每个折线有至少两个点的经纬度坐标组成),本发明采用文件形式从服务器获取,并存储到终端。获取方式不受限制,开发人员可根据用户需求而自由选择。
针对于海量线的存储格式,本发明采用json数组的形式将每条折线的起点、中间点、终点对应的经纬度坐标以及权重值进行存储;
步骤二:判断海量线是否具有权重;
本发明从实际使用情况出发,针对常用海量线的特点提出了两种不同的解决方案:海量线权重绘制和海量线无权重(常规)绘制,下文称为海量线常规绘制。
海量线的权重是指海量线对应的地图显示层级,对于有权重需求的海量线,用户期望在地图到达某一层级时只有大于等于该层级的折线可以被显示出来,小于该层级的折线无需展示。离地图层级越近的权重,其对应的折线显示优先级越高。
对于没有层级概念的海量线,即无权重的海量线,则无论地图在哪个层级,所有折线都应被显示出来,无需根据层级来判断折线的优先级。
本发明根据json数组中权重值来判断该海量线有无权重,当权重值存在且为规定内的数值时表明该海量线有权重,进入步骤三;否则当权重值为null或无权重参数时表明该海量线无权重,进入步骤四;
通常情况下对于某一个应用,其海量线本身的特征是一致的,即要么是有权重的海量线,要么为无权重的海量线;因此步骤三和步骤四一般只会运行一个,因此对于集合X、集合A和集合B并不会既包含有权重的海量线信息又包含无权重的海量线信息;
步骤三:海量线权重绘制
该步骤流程图如图2所示,具体步骤如下:
第一步:初始化集合X、集合A和集合B;
第二步:将海量线按方法1进行优先级排序,并按优先级从高到低存入集合X中;
第三步:清除A中不符合要求的折线,并初始化变量N=0;
清除A中不符合要求的折线的步骤如下:
1.遍历A中所有地图折线数据,并初始化变量M=0;
2.判断M是否大于A的长度;
若大于,则遍历结束,跳转到第四步;
否则,进入第3步;
3.判断M对应的地图折线对象Z中的权重是否小于当前地图的层级;
若小于,则该折线不需要显示,则将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,M=M+1进入第2步继续下一次遍历;
否则,进入第4步;
4.根据方法6判断M对应的地图折线对象Z是否在地图可视范围内;
若在可视范围内,则M=M+1进入第2步,继续下一次遍历;
否则,则将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,M=M+1进入第2步继续下一次遍历;
第四步:按优先级从高到低遍历X中的折线,取X中第N条折线数据,并做出判断;
当N小于X的长度或A的长度大于Max时,进入第五步;
否则结束遍历,等待地图可视区域变化或地图层级改变;
第五步:判断第N条折线的权重L是否小于当前地图层级L1;
若小于,则N=N+1跳转到第四步;
否则,进入第六步;
第六步:根据方法6判断第N条折线是否在地图可视范围内;
若不在屏幕可视范围内,则N=N+1跳转到第四步;
否则,进入第七步;
第七步:判断第N条折线是否已展示到地图上;
遍历A中的折线对象,查看否有第N条折线的数据,有对应的折线对象,则表明该折线已展示到地图上,否则没有展示到地图上;
若已展示在地图上,则N=N+1跳转到第四步;
否则,遍历集合B中的地图折线对象,查看折线对象是否已经创建;
若已经创建,则获取B中已创建的地图折线对象T,添加T到地图组件中进行展示,并添加到A中。N=N+1跳转到第四步;
若没有创建,则重新创建地图折线对象T1,添加T1到地图组件中进行展示,并添加到A中。N=N+1跳转到第四步;
步骤四:海量线常规绘制
该步骤流程图如图3所示,具体步骤如下:
第一步:初始化集合X、集合A和集合B;
第二步:将海量线按方法2进行优先级排序,并按优先级从高到低存入集合X中;
第三步:清除A中不符合要求的折线,并初始化变量N=0;
清除A中不符合要求的折线的步骤如下:
1.遍历A中所有地图折线数据,并初始化变量M=0;
2.判断M是否大于A的长度;
若大于,则遍历结束,跳转到第四步;
否则,进入第3步;
3.根据方法6判断M对应的地图折线对象Z是否在地图可视范围内;
若在可视范围内,则M=M+1进入第2步,继续下一次遍历;
否则,进入第4步;
4.判断第M条折线映射到屏幕上的长度是否大于NUM;
若大于,则M=M+1进入第2步,继续下一次遍历;
否则,将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,M=M+1进入第2步继续下一次遍历;
第四步:按优先级从高到低遍历X中的折线,取X中第N条折线数据,并做出判断;
当N小于X的长度或A的长度大于Max时,进入第五步;
否则结束遍历,等待地图可视区域变化或地图层级改变;
第五步:根据方法6判断第N条折线是否在地图可视范围内;
若不在屏幕可视范围内,则N=N+1跳转到第四步;
否则,进入第六步;
第六步:利用方法4判断第N条折线映射到屏幕上的长度是否大于NUM;
若小于,则N=N+1进入第四步,继续下一次遍历;
否则,进入第七步;
第七步:判断第N条折线是否已展示到地图上;
遍历A中的折线对象,查看否有第N条折线的数据,有对应的折线对象,则表明该折线已展示到地图上,否则没有展示到地图上;
若已展示在地图上,则N=N+1跳转到第四步;
否则,遍历集合B中的地图折线对象,查看折线对象是否已经创建;
若已经创建,则获取B中已创建的地图折线对象T,添加T到地图组件中进行展示,并添加到A中。N=N+1跳转到第四步;
若没有创建,则重新创建地图折线对象T1,添加T1到地图组件中进行展示,并添加到A中。N=N+1跳转到第四步;
在地图中展示折线的实现方法,以高德地图为例:
Android:
AMap.addPolyline(new PolylineOptions().addAll(latLngs).width(10).color(Color.argb(255,1,1,1))),其中latLngs为折线点经纬度坐标数组;
iOS:
//构造折线对象
MAPolyline*commonPolyline=[MAPolyline polylineWithCoordinates:commonPolylineCoords count:4];
//在地图上添加折线对象
[_mapView addOverlay:commonPolyline];
commonPolylineCoords为折线点经纬度坐标数组
步骤五:若屏幕可视区域变化或地图层级改变时,会重新跳转到步骤三的第三步或步骤四的第三步,开启新一轮的折线清除和遍历;
以下为上文步骤中用到的集合和方法的详细说明和步骤介绍:
集合X:全体数据集合,按折线优先级从高到低进行排序,以自定义折线对象的形式进行存储;
集合A:屏幕范围内展示的优先级最高的不超过Max条折线集合,以地图折线对象形式进行存储;Max取值为400,此数量为本发明通过多款手机反复测量后得到的保证页面流畅性的最大极限值,技术人员可根据业务需要自主选择Max的值,本发明建议Max的取值不超过400;
集合B:缓存复用地图折线对象集合
方法1:有权重海量线优先级排序方法
有权重的海量线其组成部分包括点的经纬度坐标和权重两部分组成,本发明认为权重越小、长度越长的折线其优先级越高,有权重海量线优先级排序的步骤如下:
第一步:获取每条折线的长度;
对于只有两点组成的折线,则两点之间的线段长度则表示折线的长度,其计算方式是利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,本发明将计算出相邻两点的线段长度,然后选取最长的线段作为该折线的长度;
第二步:对海量线进行排序,按照权重值从小到大的顺序进行排序,当两条折线权重相同时,按照长度从长到短的顺序进行排序;将排序结果存入集合X中;
在海量线展示过程中,权重值代表该折线所展示在地图上的最佳层级,权重值大于地图层级时按优先级进行展示,小于地图层级时不进行展示。
方法2:无权重海量线优先级排序方法
无权重的海量线由不同的点组成的折线,本发明对于无权重海量线优先级排序方法的步骤如下:
第一步:获取每条折线的长度;
对于只有两点组成的折线,则两点之间的线段长度则表示折线的长度,其计算方式是利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,本发明计算出相邻两点的线段长度,然后选取最长的线段作为该折线的长度;
第二步:比较所有折线的长度,并按从长到短的方式排序存入集合X中;
本发明认为在海量线绘制过程中,长度越长的折线其权重值越大,因为用户视觉辨别度越大,对整体海量线展示布局影响越大。
方法3:屏幕1像素对应实际距离(单位:米)的方法
第一步:获取手机像素密度p,即一英寸对应像素个数,一英寸为0.0254米;
android系统对应为dpi,ios系统对应为ppi;
第二步:获取当前地图比例尺Scale,即屏幕1米表示实际距离Scale米;
第三步:根据公式计算屏幕1像素对应实际距离多少米;
d=(0.0254/p)*Scale表示屏幕1像素实际距离的米;
返回d;
方法4:线段映射到当前屏幕上的长度(单位:android为dp,iOS为pt);
Android系统:屏幕无关的单位为dp,其与像素px和像素密度dpi之间的关系为dp=px*(ppi/160);
iOS系统:屏幕无关的单位为pt,其与像素px和像素密度ppi之间的关系为pt=pixels*(ppi/163);
第一步:输入线段起止点;
第二步:计算线段实际距离d1;
第三步:根据公式计算线段映射到当前屏幕上的长度t;
通过方法3获取d,然后套用公式:
Android:(d1/d)*(p1/160),p1表示android系统的像素密度
iOS:(d1/d)*(p2/160),p2表示iOS系统的像素密度
利用上述公式可计算线段对应到当前地图屏幕上的dp或pt个数;
第四步:返回t;
本发明根据测试结果认为当t=8时是肉眼可识别时较为舒服的数值,故在线段判断时以t=8为临界值进行判断,当线段映射到当前屏幕上的长度小于8时隐藏对线段的展示,只有大于8时才会展示到地图上。故在步骤四中变量NUM等于8,用户也可根据自己的判断和业务需求对NUM值进行调整,本发明不限制NUM的取值,NUM值的改变并不影响整体海量线的绘制,只是对海量线的展示效果会稍有差异;
方法5:判断两点组成的线段是否在地图可视范围内
具体步骤如下:
第一步:输入某一线段的起点A1和终点坐标B1,点A1和点B1组成的线段为l;
第二步:获取地图中心点C1;该方法是在常用高德地图、百度地图等第三方地图中均有API提供,开发人员可自行查阅,本发明不再列举;
第二步:获取点D1,该点是点C1到线段l的垂足点;
高德地图可使用
Android:
calShortestDistancePoint(java.util.List<DPoint>points,DPoint point),其中points为点A和点B组成的数值,point为点C坐标;
iOS:MAGetNearestMapPointFromLine(MAMapPoint lineStart,MAMapPointlineEnd,MAMapPoint point),其中lineStart为A点坐标,lineEnd为B点坐标,point为C点坐标;
通过上述方法可直接获取D1点,
第三步:验证点D1是否在地图可视范围内;
高德地图使用
Android:polygon.contains(LatLng latLng),其中latLng为点D1,polygon为地图可视区域,该方法可判断点D1是否在地图可视范围内,该方法返回bool值;polygon通过aMap.getProjection().getVisibleRegion()方法获取;
iOS:MAMapRectContainsPoint(MAMapRect rect,MAMapPoint point);方法验证点D1是否在地图可视范围内;其中rect为可视区域,可通过visibleMapRect()方法获取;point为点D1,该方法返回bool值。
将获取到的bool直接作为方法5的返回值进行返回即可;
方法6:判断多点组成的折线是否在地图可视范围内
第一步:输入某一折线段数据;
第二步:遍历该折线段中的所有线段;
第三步:使用方法5判断某一线段是否在地图可视范围内;
若方法5返回true,则表示该线段在地图可视范围内,进而该折线在地图可视范围内,返回true,判断完毕;
若方法5返回false,表示该线段不在地图可视范围内,跳转到第二步进行下一个线段的判断;若该线段为折线的最后一条线段,则表明该折线包含的所有线段均不在地图可视范围内,即该折线不在地图可视范围内,返回false,判断完毕。
应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
Claims (4)
1.一种在线绘制地图海量线的方法,其特征是,包括如下步骤:
(1-1)获取海量线数据;
(1-2)判断海量线是否具有权重;
当海量线存在权重且为规定内的数值时表明所述海量线有权重,进入(1-3);当海量线的权重为null或无权重参数时,表明海量线无权重,进入(1-4)海量线常规绘制;
(1-3)绘制海量线权重,包括如下步骤:设定集合X为全体数据集合,以自定义折线对象的形式进行存储;设定集合A为屏幕范围内展示的优先级最高的不超过Max条折线的集合,以地图折线对象形式进行存储;设定集合B为缓存复用地图折线对象集合;
(2-1)初始化集合X、集合A和集合B;
(2-2)将海量线进行优先级排序,并按优先级从高到低存入集合X中;
(2-3)清除A中的不符合要求的折线,并初始化变量N=0;
(2-4)按优先级从高到低遍历X中的折线,取X中第N条折线数据,并做出判断;
当N小于X的长度或A的长度小于Max时,进入(2-5);否则结束遍历,等待地图可视区域变化或地图层级改变;
(2-5)判断第N条折线的权重L是否小于当前地图层级L1;
若L小于L1,则使N值增加1,进入(2-4);否则,进入(2-6);
(2-6)判断第N条折线是否在地图可视范围内;
若不在屏幕可视范围内,则使N值增加1,进入(2-4);否则,进入(2-7);
(2-7)判断第N条折线是否已展示到地图上;
遍历A中的折线对象,查看第N条折线的数据,若第N条折线有折线对象,则表明该折线已展示到地图上,否则没有展示到地图上;若已展示在地图上,则使N值增加1进入(2-4);否则,遍历集合B中的地图折线对象,查看折线对象是否已经创建;若折线对象已经创建,则获取B中已创建的地图折线对象T,添加T到地图组件中进行展示,并添加到A中,使N值增加1进入(2-4);若折线对象没有创建,则重新创建地图折线对象T1,添加T1到地图组件中进行展示,并添加到A中,使N值增加1进入(2-4);
(1-4)海量线常规绘制,NUM为临界值,MAX为折线集合数最大值,包括如下步骤:
(4-1)初始化集合X、集合A和集合B;
(4-2)将海量线进行优先级排序,并按优先级从高到低存入集合X中;
(4-3)清除A中不符合要求的折线,并初始化变量N=0;
(4-3-1)遍历A中所有地图折线数据,并初始化变量M=0;
(4-3-2)判断M是否大于A的长度;
若大于A的长度,则遍历结束,进入(4-3-4);否则,进入(4-3-3);
(4-3-3)判断M对应的地图折线对象Z是否在地图可视范围内;
若在可视范围内,则使M值增加1进入(4-3-2),继续下一次遍历;否则,进入(4-3-4);
(4-3-4)判断第M条折线映射到屏幕上的长度是否大于NUM;若大于,则使M值增加1进入(4-3-2),继续下一次遍历;否则,将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,使M值增加1进入(4-3-2)继续下一次遍历;
(4-4)按优先级从高到低遍历X折线,取X中第N条折线数据,并做出判断;当N小于X的长度或A的长度小于Max时,进入(4-5);否则结束遍历,等待地图可视区域变化或地图层级改变;
(4-5)判断第N条折线是否在地图可视范围内;若不在屏幕可视范围内,则N值增加1,进入(4-4);否则,进入(4-6);
(4-6)判断第N条折线映射到屏幕上的长度是否大于NUM;若小于,则使N增加1,进入(4-4),继续下一次遍历;否则,进入(4-7);
(4-7)判断第N条折线是否已展示到地图上;
遍历A中的折线对象,查看第N条折线的数据,若第N条折线的数据有对应的折线对象,则表明该折线已展示到地图上,否则没有展示到地图上;若已展示在地图上,则使N值增加1进入(4-4);否则,遍历集合B中的地图折线对象,查看折线对象是否已经创建;
若折线对象已经创建,则获取B中已创建的地图折线对象T,添加T到地图组件中进行展示,并添加到A中,使N增加1进入(4-4);
若折线对象没有创建,则重新创建地图折线对象T1,添加T1到地图组件中进行展示,并添加到A中,使N增加1进入(4-4)。
2.根据权利要求1所述的在线绘制地图海量线的方法,其特征是,(2-3)包括如下步骤:
(3-1)遍历A中所有地图折线数据,并初始化变量M=0;
(3-2)判断M是否大于A的长度;
若大于,则遍历结束,进入(3-4);
否则,进入(3-3);
(3-3)判断M对应的地图折线对象Z中的权重是否小于当前地图的层级;
若小于当前地图的层级,则将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,使M值增加1进入(3-2)继续下一次遍历;
否则,进入(3-4);
(3-4)判断M对应的地图折线对象Z是否在地图可视范围内;
若在可视范围内,则使M值增加1进入(3-2),继续下一次遍历;
否则,则将Z存入集合B中进行缓存,将Z从A中删除,并将Z从地图中移除,使M值增加1进入(3-2)继续下一次遍历。
3.根据权利要求2所述的在线绘制地图海量线的方法,其特征是,有权重的海量线优先级排序方法如下:
(5-1)获取每条折线的长度;
对于只有两点组成的折线,则两点之间的线段长度表示折线的长度,利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,计算出相邻两点的线段长度,然后选取最长的线段作为该折线的长度;
(5-2)对海量线进行排序,按照权重值从小到大的顺序进行排序,当两条折线权重相同时,按照长度从长到短的顺序进行排序;将排序结果存入集合X中;
在海量线展示过程中,权重值代表该折线所展示在地图上的最佳层级,权重值大于地图层级时按优先级进行展示,小于地图层级时不进行展示。
4.根据权利要求2所述的在线绘制地图海量线的方法,其特征是,无权重海量线优先级排序方法包括步骤如下:
(6-1)获取每条折线的长度;
对于只有两点组成的折线,则两点之间的线段长度则表示折线的长度,其计算方式是利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,计算出相邻两点的线段长度,然后选取最长的线段作为该折线的长度;
(6-2)比较所有折线的长度,并按从长到短的方式排序存入集合X中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910459982.3A CN110264542B (zh) | 2019-05-29 | 2019-05-29 | 在线绘制地图海量线的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910459982.3A CN110264542B (zh) | 2019-05-29 | 2019-05-29 | 在线绘制地图海量线的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110264542A CN110264542A (zh) | 2019-09-20 |
CN110264542B true CN110264542B (zh) | 2023-09-05 |
Family
ID=67915922
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910459982.3A Active CN110264542B (zh) | 2019-05-29 | 2019-05-29 | 在线绘制地图海量线的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110264542B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1338088A (zh) * | 1999-01-25 | 2002-02-27 | 善邻股份有限公司 | 以多角形表面的道路地图数据的制作和用于使用的装置和方法 |
CN103020544A (zh) * | 2013-01-04 | 2013-04-03 | 南京师范大学 | 一种shp线面图层数据层次加解密方法 |
CN105051787A (zh) * | 2013-03-21 | 2015-11-11 | 株式会社吉奥技术研究所 | 绘图数据生成装置和绘图装置 |
CN106156220A (zh) * | 2015-04-26 | 2016-11-23 | 上海为臻信息科技有限公司 | 海量地图数据在手机端的矢量实时绘制方法 |
CN108647336A (zh) * | 2018-05-14 | 2018-10-12 | 江西理工大学 | 一种利用关键比例尺以及类瓦片技术处理矢量图的方法 |
CN109363714A (zh) * | 2018-09-17 | 2019-02-22 | 深圳迈瑞生物医疗电子股份有限公司 | 一种超声成像设备及其超声成像方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7269801B2 (en) * | 2004-03-30 | 2007-09-11 | Autodesk, Inc. | System for managing the navigational usability of an interactive map |
EP3175331B1 (en) * | 2014-07-29 | 2021-01-27 | Google LLC | Presenting hierarchies of map data at different zoom levels |
-
2019
- 2019-05-29 CN CN201910459982.3A patent/CN110264542B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1338088A (zh) * | 1999-01-25 | 2002-02-27 | 善邻股份有限公司 | 以多角形表面的道路地图数据的制作和用于使用的装置和方法 |
CN103020544A (zh) * | 2013-01-04 | 2013-04-03 | 南京师范大学 | 一种shp线面图层数据层次加解密方法 |
CN105051787A (zh) * | 2013-03-21 | 2015-11-11 | 株式会社吉奥技术研究所 | 绘图数据生成装置和绘图装置 |
CN106156220A (zh) * | 2015-04-26 | 2016-11-23 | 上海为臻信息科技有限公司 | 海量地图数据在手机端的矢量实时绘制方法 |
CN108647336A (zh) * | 2018-05-14 | 2018-10-12 | 江西理工大学 | 一种利用关键比例尺以及类瓦片技术处理矢量图的方法 |
CN109363714A (zh) * | 2018-09-17 | 2019-02-22 | 深圳迈瑞生物医疗电子股份有限公司 | 一种超声成像设备及其超声成像方法 |
Non-Patent Citations (1)
Title |
---|
基于ArcGIS的导航电子地图道路层次融合显示解决方案研究;揭建英等;《测绘与空间地理信息》;20130425(第04期);第64-66页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110264542A (zh) | 2019-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9508169B2 (en) | Method and apparatus for contextually varying amounts of imagery on a map | |
US20120050285A1 (en) | 3d building generalization for digital map applications | |
CN106502613B (zh) | 一种加载图片的方法及装置 | |
CN107291874B (zh) | 地图点位聚合方法及装置 | |
KR102232724B1 (ko) | 복수의 모델들에 근거하는 객체들의 디스플레이 | |
CN108876935A (zh) | 一种在移动端快速进行房屋三维模型拼接的方法及装置 | |
CN112669290A (zh) | 图像比对方法及装置 | |
CN114239508A (zh) | 表格还原方法和装置、存储介质及电子设备 | |
CN110264542B (zh) | 在线绘制地图海量线的方法 | |
CN110647597B (zh) | 电子地图的渲染方法和装置 | |
CN110187816A (zh) | 漫画类型电子书的自动翻页方法、计算设备及存储介质 | |
CN107016079B (zh) | 一种知识点的展示方法及装置 | |
CN112767211A (zh) | 救援资源推荐方法、装置、电子设备和存储介质 | |
CN110019612A (zh) | 地图渲染方法及相关设备 | |
JP7086180B2 (ja) | デジタルマップの動的リスタイリング | |
US10062193B2 (en) | Attribute based map marker clustering | |
CN114037792B (zh) | 一种Unreal Engine平台下的百万量级地下管线模型动态生成方法 | |
CN114220017A (zh) | 遥感数据尺度自适应调整方法、装置、存储介质及设备 | |
CN107591080B (zh) | 一种道路压盖关系的绘制方法及装置 | |
CN112633651A (zh) | 一种路段拥堵程度评价方法及装置、设备、存储介质 | |
JP5650613B2 (ja) | 通信サービスにおける地理的領域の価値を判定するサーバ装置及びプログラム | |
CN110413519A (zh) | 模板处理方法及装置 | |
CN106375955B (zh) | 地域识别方法及装置 | |
CN110213104A (zh) | 容量预测方法及装置 | |
CN117556158B (zh) | 耦合地名标签与等值线的用户周边地点可视化方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 310053 23-25, 2 building, 352 BINKANG Road, Binjiang District, Hangzhou, Zhejiang. Applicant after: Zhejiang zhongkong Information Industry Co.,Ltd. Address before: 310053 23-25, 2 building, 352 BINKANG Road, Binjiang District, Hangzhou, Zhejiang. Applicant before: ZHEJIANG SUPCON INFORMATION TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |