CN110427583B - 应用于移动端地图海量线抽稀绘制的方法 - Google Patents
应用于移动端地图海量线抽稀绘制的方法 Download PDFInfo
- Publication number
- CN110427583B CN110427583B CN201910546386.9A CN201910546386A CN110427583B CN 110427583 B CN110427583 B CN 110427583B CN 201910546386 A CN201910546386 A CN 201910546386A CN 110427583 B CN110427583 B CN 110427583B
- Authority
- CN
- China
- Prior art keywords
- map
- line
- length
- mass
- area
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/904—Browsing; Visualisation therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Mobile Radio Communication Systems (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种应用于移动端地图海量线抽稀绘制的方法,包括如下步骤:获取海量线数据,并存储到集合X中;对集合X进行优先级排序;计算地图最大可显示折线数量Max;海量线抽稀;实时绘制集合P中的折线;若地图缩放或拖动时,开启新一轮的折线清除和遍历。本发明具有能够处理十万级的海量线,保证地图页面流畅,提升了绘制海量线的效率,提升了用户体验的特点。
Description
技术领域
本发明涉及地图海量线绘制技术领域,尤其是涉及一种应用于移动端地图海量线抽稀绘制的方法。
背景技术
在移动应用中,主流的地图服务有高德地图、百度地图和ArcGis等,在地图展示过程中,实时的海量线绘制会造成地图页面卡顿,用户体验差。
常规的做法是将海量线事先绘制到地图上,然后将绘制海量线的地图以底图的形式发布,当用户需要展示海量线时直接调用发布好的底图即可完成展示,上述方法很好的解决了卡顿的问题,且只需按照要展示的层级选择相应的海量线底图即可,对于地图开发人员来说,使用简单,且展示效果好。
但上述解决方案通常都不是免费进行的,需要通过购买会员的形式获取底图发布功能;且发布底图仅仅适用于绘制的海量线是固定的情况下,若海量线的数量或者坐标不确定,或无法事先获取的情况下,发布海量线底图的方式将无法解决问题。
另外的方法也提供在线绘制地图海量线,其实现方法是将海量线进行整体抽稀来减少展示数量,此种方法可有效缓解页面卡顿问题,但其不足之处是破坏了海量线展示的原本布局,有可能会造成局部海量线过于密集,其余部分没有或少量折线的情况。
由于移动终端的配置和性能差异性很大,目前在线绘制地图海量线方法中,还没有提出一种普适性的解决方案去解决移动终端在绘制海量线过程中的页面流畅性问题,造成在使用同一方法绘制海量线过程时,不同配置的移动终端的用户体验差异性巨大。
发明内容
本发明的发明目的是为了克服现有技术中的无法解决移动终端在绘制海量线过程中的页面流畅性的不足,提供了一种应用于移动端地图海量线抽稀绘制的方法。
为了实现上述目的,本发明采用以下技术方案:
一种应用于移动端地图海量线抽稀绘制的方法,包括如下步骤:
(1-1)获取海量线数据,并存储到集合X中;
(1-2)对集合X进行优先级排序;
(1-3)计算地图最大可显示折线数量Max;
(1-4)海量线抽稀;
(1-5)实时绘制集合P中的折线;
(1-6)若地图缩放或拖动时,返回步骤(1-4),开启新一轮的折线清除和遍历。
针对于现阶段以发布底图来间接解决地图海量线绘制的问题,以及在线绘制地图海量线中存在的海量线绘制“扎堆”,移动终端适应性等问题,本发明提出了一种地图海量线抽稀绘制的方法,本发明能动态获取海量线数据,并通过分区域抽稀的方法保持原有海量线的整体布局,同时针对不同的移动终端提出了相匹配的海量线抽稀数量,保证了在不同移动终端下实时绘制海量线时页面的流畅性,其目的是解决海量线绘制过程中页面卡顿不流畅,终端适应性差、用户体验欠佳的问题。
本发明将海量线实时绘制到地图上,且保持原有海量线的整体布局;同时为保证不同配置和性能的移动终端在绘制海量线过程中都能达到页面流畅的目的,提出了终端适配方法。本发明能够处理十万级的海量线,并保证地图页面流畅,提升了绘制海量线的效率,提升了用户体验,解决了底图发布成本高、数据更改不灵活的问题。
本发明能够实现十万级数量海量线的动态绘制,并能够根据设备配置和性能自动调整绘制方案,从而保证页面的流畅性。
本发明主要应用于移动应用中地图相关功能的开发,尤其针对于目前主流的第三方地图开发,如高德地图、百度地图等。本发明的解决思路同时适用于Android***和iOS***。
作为优选,步骤(1-1)包括如下步骤:
从服务器获取存有海量线数据的文件,将文件存储到移动终端上;
根据文件存储路径从移动终端的存储卡中获取文件海量线数据;
解析海量线数据,将折线数据存储到海量线对象中;海量线对象包括折线所有点的经纬度坐标、层级、绘制线的宽度和颜色;
将解析后的所有海量线对象存储到集合X中。
作为优选,步骤(1-2)包括如下步骤:
(1-2-1)层级比较:
对于两条折线L1和L2,首先对其层级进行比较大小:
若L1的层级小于L2的层级,则L1的优先级高于L2的优先级;
若L1的层级大于L2的层级,则L2的优先级高于L1的优先级;
若L1的层级等于L2的层级,则进入步骤(1-2-2);
(1-2-2)长度比较:
进行长度比较首先要计算折线L1和L2的长度,然后再进行长度的比较;
(1-2-2-1)计算折线长度:
对于只有两点组成的折线,将两点之间的线段长度表示折线的长度,利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,先计算出相邻两点的线段长度,然后将所有线段的长度和作为折线的长度;
(1-2-2-2)长度比较:
若L1的长度小于L2的长度,则L2的优先级高于L1的优先级;
若L1的长度大于L2的长度,则L1的优先级高于L2的优先级;
若L1的长度等于L2的长度,则L1的优先级与L2优先级相等,其排序方法为L1在前L2紧跟其后;
(1-2-3)将X中的所有折线按照步骤(1-2-1)和步骤(1-2-2)进行比较,最终得到整体的从高到低的优先级排序,并更新X。
作为优选,步骤(1-3)包括如下步骤:
(1-3-1)获取手机***内存大小M的取值为小于H的整数,且从0开始;m的取值为小于W的整数,且从0开始;
半径的计算方法:
r=Math.max(width/H,height/W)/2;对于所有可视区域圆而言,其半径均为r。
因此,本发明具有如下有益效果:能够处理十万级的海量线,并保证地图页面流畅,提升了绘制海量线的效率,提升了用户体验,解决了底图发布成本高、数据更改不灵活的问题;终端适应性更强,且有效避免海量线的人为“扎堆”问题;本发明为技术人员在地图海量线的在线绘制上提供了一个高效实用的解决方案。
附图说明
图1为海量线抽稀绘制的总体流程图;
图2为地图可视区域均匀划分示意图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步的描述。
如图1所示,一种应用于移动端地图海量线抽稀绘制的方法,其特征是,包括如下步骤:
步骤一:获取海量线数据,并存储到集合X中;
移动端获取数据的常规方法是从服务器以接口的形式直接获取,但海量线的数量级通常在万级甚至十万级,且每条折线中还包括起始点、中间点的经纬度坐标、层级、绘制线的宽度、颜色等信息,因此对如此众多的数据常规的接口式获取方法无法满足,极易造成页面的卡顿甚至应用的崩溃。本发明采用文件形式从服务器获取,并存储到终端。获取方式不受限制,开发人员可根据用户需求而自由选择。具体实现步骤如下:
从服务器获取存有海量线数据的文件,并存储到移动终端;
根据文件存储路径从存储卡中获取文件海量线数据;
解析海量线数据,并将折线数据存储到海量线对象中;
本发明为每一个海量线创建对应的海量线对象,该对象包括折线所有点的经纬度坐标、层级、绘制线的宽度、颜色等。
将解析后的所有海量线对象存储到集合X中;
步骤二:对集合X进行优先级排序;
本发明的优先级排序考虑层级和折线长度两个维度。从用户需求分析,本发明认为在用户进行地图缩放时用户希望看到不同缩放等级会有不同的展示内容,当缩小地图时用户希望看到的是整体的折线分布,当放大地图时用户希望看到详细的折线分布。因此当地图停留在某一层级时,用户希望看到大于等于该层级的折线,且折线的层级越接近地图层级用户希望看到的概率越大,等于地图层级的折线是用户最希望看到的。而在地图展示中,长度越长的折线其吸引眼球的能力越大,其也决定了整体折线的布局情况,长度较短的折线不太容易引起用户的注意,其对地图折线的整体布局也相对影响较低。
综上所述,本发明有理由认为层级越小、长度越长的折线其优先级越高,具体排序步骤如下:
第一步:层级比较
对于两条折线L1和L2,首先对其层级进行比较大小:
若L1的层级小于L2的层级,则L1的优先级高于L2的优先级;
若L1的层级大于L2的层级,则L2的优先级高于L1的优先级;
若L1的层级等于L2的层级,则进入第二步;
第二步:长度比较
进行长度比较首先要计算折线L1和L2长度,然后再进行长度的比较。
计算折线长度
考虑到在地图上展示折线的实际意义,其一般为道路、管道、河流、布线等具有实际使用和展示价值的折线,因此本发明采用将折线中两点间的距离相加之和作为折线的长度。
对于只有两点组成的折线,则两点之间的线段长度则表示折线的长度,其计算方式是利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,本发明将计算出相邻两点的线段长度,然后将所有线段的长度加和作为该折线的长度;
长度比较
通过步骤1中获取到折线L1和L2中的长度,然后对长度进行判断:
若L1的长度小于L2的长度,则L2的优先级高于L1的优先级;
若L1的长度大于L2的长度,则L1的优先级高于L2的优先级;
若L1的长度等于L2的长度,则L1的优先级与L2优先级相等,其排序方法为L1在前L2紧跟其后;
第三步,将X中的所有折线按照第一步和第二步进行比较,最终得到整体的从高到低的优先级排序,并更新X。
步骤三:计算地图最大可显示折线数量Max;
本发明考虑到移动终端的配置与性能差异性很大,高配置的手机往往表现出较高的性能,其所支持的计算能力也较高。为适应不同手机海量线的绘制情况,保证不同配置的手机其绘制海量线过程中页面流畅,本发明提出了针对性的最大可显示折线数量计算方法,大大提高了在不同型号不同品牌终端的适应性。其具体步骤如下:
第一步:获取手机***内存大小M;
手机***内存是指手机运行程序时使用的内存(即运行内存),手机***内存越大则手机同一时间运行的应用程序越多,应用程序的运行速度越快,应用程序间的切换速度越快。
Android获取手机***内存的方法如下:
//首先,读取手机内存文件字节流
FileReader fr = new FileReader("/proc/meminfo");
//然后根据手机内存文件流得到缓冲流,2048即一次读取的位数
BufferedReader reader = new BufferedReader(fr, 2048);
//从缓冲流reader中读2048位的数据,存放到变量totalMemarysizeStr 中
String totalMemarysizeStr = reader.readLine();
//将totalMemarysizeStr中的数据按照实际行进行拆分,并存到数组arrayOfString 中
String[] arrayOfString = totalMemarysizeStr .split("\\s+");
//读取缓冲流的第一行即为手机的***内存,单位为KB
//除以1024*1024后将单位转换为GB
M = Integer.valueOf(arrayOfString[1]).intValue()/(1024*1024);
第二步:判断手机***内存并分配最大可显示折线数量;
如果M 大于等于8,即运行***大于等于8G,则Max赋值为585;
如果M 大于等于6且小于8,即***内存为6G到8G,则Max赋值为495;
如果M 大于等于4且小于6,即***内存为4G到6G,则Max赋值为315;
如果M 大于0且小于4,即***内存小于4G,则Max赋值为225;
上述数据是本发明根据多款手机测试而来的结果,其目的是保证***内存在某一范围内的手机能够流畅使用本发明提供的方法进行地图海量线的绘制。本发明不限制Max的具体数值,技术人员可根据自己设备的性能自主选择Max的值。
步骤四:海量线抽稀;
海量线抽稀是本发明的核心点和创新点,其抽稀思想的基础是将地图可视区域进行均匀划分,并在划分区域上进行分别的抽稀,即计算优先级最高的折线。对于地图海量线的抽稀,常规的做法是直接将地图折线进行整体抽稀,然后绘制到地图上;而本发明采用分区域抽稀的方法,其目的是保持抽稀前地图折线展示的整体布局,有效的避免了折线“扎堆”展示的问题,提升了用户体验。
海量线抽稀的具体步骤如下:
第一步:获取地图组件的相关数据
获取地图组件在屏幕中左上角点的坐标(leftX,leftY),地图组件在屏幕上的宽度width、高度height;
第二步:将地图可视区域均匀划分,并计算每个区域圆的中心点坐标及半径
地图可视区域通常为规则的矩形,其常用的划分方法是九宫格法,即将需要划分的区域等分为九份,其划分步骤是将区域进行三行三列的均匀划分,最终组成九个面积形状都相同的矩形宫格。此种做法有两方面的不足,第一没有考虑到当地图区域的长宽比过大或过小时,会造成划分后的宫格的长宽比过大或过小,从而视觉上的宫格会有太宽或太窄的感觉;第二,将地图区域划分的目的是为了进行均匀抽稀,由于地图方向会根随用户的旋转而改变,因此通过矩形宫格判断折线是否在宫格内的算法比较复杂,从而增加了开发难度,降低了开发效率。
为修正上述算法的不足,提升开发效率,本发明提出了优化算法,具体步骤如下:
确定地图可视区域均匀划分数量W*H
首先,计算地图可视区域的宽高比,d=width/height,d的类型为float;
然后,判断d的值确定行数W和列数H
若d的值在0和1之间,则地图可视区域划分为列数为H=3,行数为W等于H除以d,并向上取整,即W=Math.round (H/d);
若d大于1,则划分行数W=3,列数H=Math.round(W*d);
否则,W=H=3,即划分为三行三列;
计算每个区域圆的中心点坐标及半径
如图2所示,将地图可视区域均匀划分的W*H个矩形区域转换为区域圆,区域圆圆心是矩形宫格的中心,区域圆的直径是矩形宫格中宽和高的最大值,且宫格内所有区域圆的直径相同。图2左侧小图表示以数值较大的宽为直径,右侧小图表示以数值较大的高为直径。
圆心坐标的计算方法:
centerX = leftX + (width/H)*(n+0.5);
centerY = leftY + (height/W)*(m+0.5);
其中n和m表示第n列第m行,centerX和centerY表示第n列第m行的区域圆的圆心坐标的横坐标和纵坐标。n的取值为小于H的整数,且从0开始;m的取值为小于W的整数,且从0开始。
半径的计算方法:
r=Math.max(width/H,height/W)/2;对于所有可视区域圆而言,其半径均为r。
将地图可视区域圆的圆心和半径转换为实际地图的坐标和距离(米)
首先,计算屏幕上1像素对应地图上的实际长度,单位米。
以高德地图Android***为例:
scale = AMap.getScalePerPixel();
然后,地图可视区域圆的圆心和半径转换;
将区域圆圆心转换为实际地图的坐标:
latlng=AMap.getProjection().fromScreenLocation( paramPoint),其中paramPoint为包含地图可视区域圆的圆心坐标centerX和centerY的点对象;latlng为LatLng类型,表示区域圆圆心实际地图上的坐标,latlng.latitude表示地图的纬度坐标,latlng.longitude表示地图的经度坐标。
将半径转换为实际地图上的距离:
length=r*scale,单位为米;
第三步:遍历集合X,获取每个区域圆内的折线;
将集合X中的值复制到集合Y中,定义集合P;初始化变量i=0、j=0;
判断i的值是否大于等于H,大于等于H则进入步骤五;否则进入第3步;
判断j的值是否大于等于W,大于等于W则i加1,进入第2步;否则进入第4步;
初始化变量t=0,集合T;
判断t的值是否大于等于集合Y的长度或者集合T的长度是否大于Max/(W*H),若满足条件则将集合T中是数据添加到集合P中,j加1,跳转到第3步;否则跳转第6步;
根据上述第二步获取第i列第j行的区域圆圆心对应的实际地图坐标点对象latlng;
判断折线中的点是否在区域圆内;
本发明认为折线中有一点在区域圆内,则表示该折线在区域圆内。
首先,遍历集合Y中第t条折线的所有点;
然后,计算每个点到区域圆圆心(latlng.latitude,latlng.longitude)的距离distance1,并与半径length进行比较;
若所有点到区域圆圆心的距离distance1都大于等于length则表示该折线没有点在区域圆内,即该折线不在区域圆内,则跳转到第8步;
否则表示该折线在区域圆内,集合Y去除该折线,t减1,将该折线数据添加到集合T中,t加1并跳转到第5步;
判断折线是否穿过区域圆或在区域圆内;
本发明认为若该折线中左右相邻两点组成的折线穿过区域圆或在区域圆内,则表示该折线在区域圆内。
首先,遍历第t条折线中相邻两点组成的线段;
然后,计算区域圆圆心到线段的距离,并判断是否穿过区域圆或在区域圆内;
根据集合理论知识,某线段穿过区域圆或在区域圆内的特征是区域圆圆心到线段的距离小于该区域圆的半径长度,且线段两端点与区域圆圆心组成的三角形中,以线段两端点为顶点的三角形内角为锐角。本发明计算区域圆圆心(latlng.latitude,latlng.longitude)到每条线段的距离distance2,并计算以线段两端点为顶点两个三角形内角R1和R2;
若diantance2小于半径length且R1和R2均为锐角,则表明该折线穿过区域圆,即该折线在区域圆内,集合Y去除该折线,t减1,将该折线数据添加到集合T中,t加1并跳转到第5步;
否则,表明该折线不在区域圆内,t加1跳转到第5步;
步骤五:实时绘制集合P中的折线
步骤四运行结束后即可得集合P,P中包含W*H个区域圆内的所有满足条件的折线数据,且不超过Max条。下面将已获取的折线数据展示到地图上,具体步骤如下:
清除已绘制的地图折线
实现方法为运行地图的AMap.clear()方法;
创建集合P中折线的地图折线对象并展示到地图上;
在创建地图折线对象前要先判断该折线的对象有没有被创建,若已存在则直接复用无需再次创建,否则需要重新创建;
以Android高德地图为例:
//该方法实现向高德地图AMap中绘制折线
//其中latLngs为折线点经纬度坐标数组,width表示绘制折线的宽度,color表示绘制折线的颜色;
AMap.addPolyline(new PolylineOptions(). addAll(latLngs).width(10).color(Color.argb(255, 1, 1, 1))),
iOS实现高德地图绘制折线:
//首先,构造折线对象
MAPolyline *commonPolyline = [MAPolyline polylineWithCoordinates:commonPolylineCoords count:4];
//在地图上添加折线对象
[_mapView addOverlay: commonPolyline];commonPolylineCoords 为折线点经纬度坐标数组
步骤六:若地图缩放或拖动时,会重新跳转到步骤四,开启新一轮的折线清除和遍历。
应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
Claims (4)
1.一种应用于移动端地图海量线抽稀绘制的方法,其特征是,包括如下步骤:
(1-1)获取海量线数据,并存储到集合X中;
(1-2)对集合X进行优先级排序;
(1-3)计算地图最大可显示折线数量Max;
(1-4)海量线抽稀;
步骤(1-4)包括如下步骤:
(1-4-1)获取地图组件在屏幕中左上角点的坐标(leftX,leftY),地图组件在屏幕上的宽度width和高度height;
(1-4-2)将地图可视区域均匀划分,计算每个区域圆的中心点坐标及半径;
(1-4-2)包括如下步骤:
确定地图可视区域均匀划分数量W*H:
首先,计算地图可视区域的宽高比,d=width/height,d的类型为float;
然后,判断d的值确定行数W和列数H;
若d的值在0和1之间,则地图可视区域划分为列数为H=3,行数为W等于H除以d,并向上取整,即W=Math.round (H/d);
若d大于1,则划分行数W=3,列数H=Math.round(W*d);
否则,W=H=3,即划分为三行三列;
计算每个区域圆的中心点坐标及半径:
将地图可视区域均匀划分的W*H个矩形区域转换为区域圆,区域圆圆心是矩形宫格的中心,区域圆的直径是矩形宫格中宽和高的最大值,且宫格内所有区域圆的直径相同;
圆心坐标的计算方法:
centerX = leftX + (width/H)*(n+0.5);
centerY = leftY + (height/W)*(m+0.5);
其中,n和m表示第n列第m行,centerX和centerY表示第n列第m行的区域圆的圆心坐标的横坐标和纵坐标;n的取值为小于H的整数,且从0开始;m的取值为小于W的整数,且从0开始;
半径的计算方法:
r=Math.max(width/H,height/W)/2;对于所有可视区域圆而言,其半径均为r;
(1-4-3)遍历集合X,获取每个区域圆内的折线;
步骤(1-4-3)包括如下步骤:
(1-4-3-1)将集合X中的值复制到集合Y中,定义集合P;初始化变量i=0、j=0;
(1-4-3-2)当i≥H,转入步骤(1-5);否则转入步骤(1-4-3-3);
(1-4-3-3)当j≥W,大于等于W则i加1,转入步骤(1-4-3-2);否则进入转入步骤(1-4-3-4);
(1-4-3-4)初始化变量t=0,定义集合T;
(1-4-3-5)当t≥集合Y的长度或者集合T的长度>Max/(W*H),将集合T中的数据添加到集合P中,使j值增加1,转到步骤(1-4-3-3);否则转到步骤(1-4-3-6);
(1-4-3-6)根据步骤(1-3-2)获取第i列第j行的区域圆圆心对应的地图坐标点对象latlng;
(1-4-3-7)判断折线中的点是否在区域圆内;
首先,遍历集合Y中第t条折线的所有点;
然后,计算每个点到区域圆圆心的距离distance1,并与半径length进行比较;
若所有点到区域圆圆心的距离distance1都大于等于length则表示该折线没有点在区域圆内,即该折线不在区域圆内,则跳转到步骤(1-4-3-8);
否则表示该折线在区域圆内,集合Y去除该折线,t减1,将该折线数据添加到集合T中,t加1并跳转到步骤(1-4-3-5);
(1-4-3-8)判断折线是否穿过区域圆或在区域圆内;
若该折线中左右相邻两点组成的折线穿过区域圆或在区域圆内,则表示该折线在区域圆内;
首先,遍历第t条折线中相邻两点组成的线段;
然后,计算区域圆圆心到每条线段的距离distance2,并计算以线段两端点为顶点两个三角形内角R1和R2;
若diantance2小于半径length且R1和R2均为锐角,则表明该折线穿过区域圆,即该折线在区域圆内,集合Y去除该折线,t减1,将该折线数据添加到集合T中,t加1并跳转到步骤(1-4-3-5);
否则,表明该折线不在区域圆内,t加1跳转到步骤(1-4-3-5);
(1-5)实时绘制集合P中的折线;
(1-6)若地图缩放或拖动时,返回步骤(1-4),开启新一轮的折线清除和遍历。
2.根据权利要求1所述的应用于移动端地图海量线抽稀绘制的方法,其特征是,步骤(1-1)包括如下步骤:
从服务器获取存有海量线数据的文件,将文件存储到移动终端上;
根据文件存储路径从移动终端的存储卡中获取文件海量线数据;
解析海量线数据,将折线数据存储到海量线对象中;海量线对象包括折线所有点的经纬度坐标、层级、绘制线的宽度和颜色;
将解析后的所有海量线对象存储到集合X中。
3.根据权利要求1所述的应用于移动端地图海量线抽稀绘制的方法,其特征是,步骤(1-2)包括如下步骤:
(1-2-1)层级比较:
对于两条折线L1和L2,首先对其层级进行比较大小:
若L1的层级小于L2的层级,则L1的优先级高于L2的优先级;
若L1的层级大于L2的层级,则L2的优先级高于L1的优先级;
若L1的层级等于L2的层级,则进入步骤(1-2-2);
(1-2-2)长度比较:
进行长度比较首先要计算折线L1和L2的长度,然后再进行长度的比较;
(1-2-2-1)计算折线长度:
对于只有两点组成的折线,将两点之间的线段长度表示折线的长度,利用两点的经纬度坐标计算两点间的距离;
对于有多个点组成的折线,先计算出相邻两点的线段长度,然后将所有线段的长度和作为折线的长度;
(1-2-2-2)长度比较:
若L1的长度小于L2的长度,则L2的优先级高于L1的优先级;
若L1的长度大于L2的长度,则L1的优先级高于L2的优先级;
若L1的长度等于L2的长度,则L1的优先级与L2优先级相等,其排序方法为L1在前L2紧跟其后;
(1-2-3)将X中的所有折线按照步骤(1-2-1)和步骤(1-2-2)进行比较,最终得到整体的从高到低的优先级排序,并更新X。
4.根据权利要求1所述的应用于移动端地图海量线抽稀绘制的方法,其特征是,步骤(1-3)包括如下步骤:
(1-3-1)获取手机***内存大小M;
(1-3-2)判断手机***内存并分配最大可显示折线数量;
如果M 大于等于8,即***内存大于等于8G,则Max赋值为585;
如果M 大于等于6且小于8,即***内存为6G到8G,则Max赋值为495;
如果M 大于等于4且小于6,即***内存为4G到6G,则Max赋值为315;
如果M 大于0且小于4,即***内存小于4G,则Max赋值为225。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910546386.9A CN110427583B (zh) | 2019-06-21 | 2019-06-21 | 应用于移动端地图海量线抽稀绘制的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910546386.9A CN110427583B (zh) | 2019-06-21 | 2019-06-21 | 应用于移动端地图海量线抽稀绘制的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110427583A CN110427583A (zh) | 2019-11-08 |
CN110427583B true CN110427583B (zh) | 2022-04-22 |
Family
ID=68409450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910546386.9A Active CN110427583B (zh) | 2019-06-21 | 2019-06-21 | 应用于移动端地图海量线抽稀绘制的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110427583B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111325396B (zh) * | 2020-02-19 | 2023-04-18 | 深圳震有科技股份有限公司 | 一种基于海洋风的预警分析方法、智能终端及存储介质 |
CN111640362A (zh) * | 2020-06-01 | 2020-09-08 | 中国人民解放军63653部队 | 一种长航时轨迹实时显示方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101493330A (zh) * | 2008-01-23 | 2009-07-29 | 厦门雅迅网络股份有限公司 | 一种手机网络导航中地图矢量数据的抽稀方法 |
CN102568009A (zh) * | 2010-12-17 | 2012-07-11 | 上海博泰悦臻电子设备制造有限公司 | 用于电子地图的线段抽稀装置及其方法 |
CN103309859A (zh) * | 2012-03-06 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 数据抽稀方法及装置 |
CN109002451A (zh) * | 2017-06-07 | 2018-12-14 | 杭州海康威视***技术有限公司 | 地图数据抽稀方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10074027B2 (en) * | 2014-09-08 | 2018-09-11 | Apple Inc. | Density sampling map data |
-
2019
- 2019-06-21 CN CN201910546386.9A patent/CN110427583B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101493330A (zh) * | 2008-01-23 | 2009-07-29 | 厦门雅迅网络股份有限公司 | 一种手机网络导航中地图矢量数据的抽稀方法 |
CN102568009A (zh) * | 2010-12-17 | 2012-07-11 | 上海博泰悦臻电子设备制造有限公司 | 用于电子地图的线段抽稀装置及其方法 |
CN103309859A (zh) * | 2012-03-06 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 数据抽稀方法及装置 |
CN109002451A (zh) * | 2017-06-07 | 2018-12-14 | 杭州海康威视***技术有限公司 | 地图数据抽稀方法及装置 |
Non-Patent Citations (2)
Title |
---|
矢量数据分级显示方法研究;王枫;《中国优秀硕士学位论文全文数据库 基础科学辑》;20160115(第2016年第01期);A008-52 * |
顾及地物要素特征的电子地图POI分类抽稀方法;王昊 等;《测绘工程》;20180731;第27卷(第7期);第41-45页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110427583A (zh) | 2019-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wise | GIS basics | |
Regnauld et al. | A synoptic view of generalisation operators | |
US11268820B2 (en) | Device and method for improving route planning computing devices | |
CN113112603B (zh) | 三维模型优化的方法和装置 | |
van Kreveld | Geographic information systems | |
CN110427583B (zh) | 应用于移动端地图海量线抽稀绘制的方法 | |
CN111090716A (zh) | 矢量瓦片数据处理方法、装置、设备和存储介质 | |
CN109859109B (zh) | 一种系列比例尺pdf地图无缝组织与显示方法 | |
CN112717414B (zh) | 游戏场景编辑方法、装置、电子设备以及存储介质 | |
CN111047682A (zh) | 一种三维车道模型生成方法及*** | |
Yan et al. | Description approaches and automated generalization algorithms for groups of map objects | |
US10067950B1 (en) | Systems and methods for efficiently organizing map styling information | |
CN115077540A (zh) | 一种地图构建方法及装置 | |
CN114283148A (zh) | 一种道路元素提取方法、装置、存储介质及电子设备 | |
CN112115226B (zh) | 地图渲染方法和地图渲染装置 | |
CN115841558B (zh) | 城市道路建模的方法、装置、电子设备和存储介质 | |
CN111061729A (zh) | 顾及粒度的矢量瓦片组织方法 | |
US20230168106A1 (en) | Method, apparatus, and system for providing mock map data for map design validation and documentation | |
CN111159480B (zh) | 一种基于电网gis数据的图形绘制方法 | |
CN111737196B (zh) | 基于电力交易***气象资源网格文本转矢量图方法及装置 | |
CN113066150B (zh) | 一种地图数据处理方法、装置、设备及存储介质 | |
CN114528305A (zh) | 矢量数据更新范围确定方法、装置、电子设备及存储介质 | |
CN114116948A (zh) | 地理矢量数据空间缓冲区分析方法、装置、设备及介质 | |
CN117556158B (zh) | 耦合地名标签与等值线的用户周边地点可视化方法及*** | |
Koubarakis | Geospatial Data Modeling |
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 |
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. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |