CN110427583A - 应用于移动端地图海量线抽稀绘制的方法 - Google Patents

应用于移动端地图海量线抽稀绘制的方法 Download PDF

Info

Publication number
CN110427583A
CN110427583A CN201910546386.9A CN201910546386A CN110427583A CN 110427583 A CN110427583 A CN 110427583A CN 201910546386 A CN201910546386 A CN 201910546386A CN 110427583 A CN110427583 A CN 110427583A
Authority
CN
China
Prior art keywords
line
map
magnanimity
length
broken line
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.)
Granted
Application number
CN201910546386.9A
Other languages
English (en)
Other versions
CN110427583B (zh
Inventor
杨奇泽
李琳琳
殷豪祥
徐畅
赵鸿鸣
陈行健
柴泽照
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZHEJIANG SUPCON INFORMATION CO Ltd
Original Assignee
ZHEJIANG SUPCON INFORMATION CO Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZHEJIANG SUPCON INFORMATION CO Ltd filed Critical ZHEJIANG SUPCON INFORMATION CO Ltd
Priority to CN201910546386.9A priority Critical patent/CN110427583B/zh
Publication of CN110427583A publication Critical patent/CN110427583A/zh
Application granted granted Critical
Publication of CN110427583B publication Critical patent/CN110427583B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/904Browsing; Visualisation therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Human Computer Interaction (AREA)
  • Processing Or Creating Images (AREA)
  • Mobile Radio Communication Systems (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;
(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。作为优选,步骤(1-4)包括如下步骤:
(1-4-1)获取地图组件在屏幕中左上角点的坐标(1eftX,leftY),地图组件在屏幕上的宽度width和高度height;
(1-4-2)将地图可视区域均匀划分,计算每个区域圆的圆心坐标及半径;
(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)当i≥W,转入步骤(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-4-2)获取第i列第j行的区域圆圆心对应的地图坐标点对象latlng;
(1-4-3-7)判断折线中的点是否在区域圆内。
作为优选,(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为海量线抽稀绘制的总体流程图;
图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即一次读取的位数BufferedReaderreader=new BufferedReader(fr,2048);
//从缓冲流reader中读2048位的数据,存放到变量totalMemarysizeStr中StringtotalMemarysizeStr=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、将地图可视区域圆的圆心和半径转换为实际地图的坐标和距离(米)
首先,计算屏幕上1像素对应地图上的实际长度,单位米。
以高德地图Android系统为例:
scale=AMap.getScalePerPixel();
然后,地图可视区域圆的圆心和半径转换;
将区域圆圆心转换为实际地图的坐标:
latlng=AMap.getProjection().fromScreenLocation(paramPoint),其中paramPoint为包含地图可视区域圆的圆心坐标centerX和centerY的点对象;latlng为LatLng类型,表示区域圆圆心实际地图上的坐标,latlng.latitude表示地图的纬度坐标,latlng.l0ngirude表示地图的经度坐标。
将半径转换为实际地图上的距离:
length=r*scale,单位为米;
第三步:遍历集合X,获取每个区域圆内的折线;
1、将集合X中的值复制到集合Y中,定义集合P;初始化变量i=0、j=0;
2、判断i的值是否大于等于H,大于等于H则进入步骤五;否则进入第3步;
3、判断j的值是否大于等于W,大于等于W则i加1,进入第2步;否则进入第4步;
4、初始化变量t=0,集合T;
5、判断t的值是否大于等于集合Y的长度或者集合T的长度是否大于Max/(W*H),若满足条件则将集合T中是数据添加到集合P中,j加1,跳转到第3步;否则跳转第6步;
6、根据上述第二步获取第i列第j行的区域圆圆心对应的实际地图坐标点对象latlng;
7、判断折线中的点是否在区域圆内;
本发明认为折线中有一点在区域圆内,则表示该折线在区域圆内。
首先,遍历集合Y中第t条折线的所有点;
然后,计算每个点到区域圆圆心(latlng.latitude,latlng.longitude)的距离distancel,并与半径length进行比较;
若所有点到区域圆圆心的距离distancel都大于等于length则表示该折线没有点在区域圆内,即该折线不在区域圆内,则跳转到第8步;
否则表示该折线在区域圆内,集合Y去除该折线,t减1,将该折线数据添加到集合T中,t加1并跳转到第5步;
8、判断线段是否穿过区域圆或在区域圆内;
本发明认为若该折线中左右相邻两点组成的折线穿过区域圆或在区域圆内,则表示该折线在区域圆内。
首先,遍历第t条折线中相邻两点组成的线段;
然后,计算区域圆圆心到线段的距离,并判断是否穿过区域圆或在区域圆内;
根据集合理论知识,某线段穿过区域圆或在区域圆内的特征是区域圆圆心到线段的距离小于该区域圆的半径长度,且线段两端点与区域圆圆心组成的三角形中,以线段两端点为顶点的三角形内角为锐角。本发明计算区域圆圆心(latlng.latitude,latlng.longitude)到每条线段的距离distance2,并计算以线段两端点为顶点两个三角形内角R1和R2;
若diantance2小于半径length且R1和R2均为锐角,则表明该折线穿过区域圆,即该折线在区域圆内,集合X去除该折线,t减1,将该折线数据添加到集合T中,t加1并跳转到第5步;
否则,表明该折线不在区域圆内,t加1跳转到第5步;
步骤五:实时绘制集合P中的折线
步骤四运行结束后即可得集合P,P中包含W*H个区域圆内的所有满足条件的折线数据,且不超过Max条。下面将已获取的折线数据展示到地图上,具体步骤如下:
1、清除已绘制的地图折线
实现方法为运行地图的AMap.clear()方法;
2、创建集合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 (7)

1.一种应用于移动端地图海量线抽稀绘制的方法,其特征是,包括如下步骤:
(1-1)获取海量线数据,并存储到集合X中;
(1-2)对集合X进行优先级排序;
(1-3)计算地图最大可显示折线数量Max;
(1-4)海量线抽稀;
(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。
5.根据权利要求1所述的应用于移动端地图海量线抽稀绘制的方法,其特征是,步骤(1-4)包括如下步骤:
(1-4-1)获取地图组件在屏幕中左上角点的坐标(leftX,leftY),地图组件在屏幕上的宽度width和高度height;
(1-4-2)将地图可视区域均匀划分,计算每个区域圆的中心点坐标及半径;
(1-4-3)遍历集合X,获取每个区域圆内的折线。
6.根据权利要求5所述的应用于移动端地图海量线抽稀绘制的方法,其特征是,步骤(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)当i≥W,转入步骤(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)判断折线中的点是否在区域圆内。
7.根据权利要求5所述的应用于移动端地图海量线抽稀绘制的方法,其特征是,(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。
CN201910546386.9A 2019-06-21 2019-06-21 应用于移动端地图海量线抽稀绘制的方法 Active CN110427583B (zh)

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 true CN110427583A (zh) 2019-11-08
CN110427583B 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)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111325396A (zh) * 2020-02-19 2020-06-23 深圳震有科技股份有限公司 一种基于海洋风的预警分析方法、智能终端及存储介质
CN111640362A (zh) * 2020-06-01 2020-09-08 中国人民解放军63653部队 一种长航时轨迹实时显示方法

Citations (5)

* Cited by examiner, † Cited by third party
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 腾讯科技(深圳)有限公司 数据抽稀方法及装置
US20160070983A1 (en) * 2014-09-08 2016-03-10 Mapsense Inc. Density sampling map data
CN109002451A (zh) * 2017-06-07 2018-12-14 杭州海康威视系统技术有限公司 地图数据抽稀方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
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 腾讯科技(深圳)有限公司 数据抽稀方法及装置
US20160070983A1 (en) * 2014-09-08 2016-03-10 Mapsense Inc. Density sampling map data
CN109002451A (zh) * 2017-06-07 2018-12-14 杭州海康威视系统技术有限公司 地图数据抽稀方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
王昊 等: "顾及地物要素特征的电子地图POI分类抽稀方法", 《测绘工程》 *
王枫: "矢量数据分级显示方法研究", 《中国优秀硕士学位论文全文数据库 基础科学辑》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111325396A (zh) * 2020-02-19 2020-06-23 深圳震有科技股份有限公司 一种基于海洋风的预警分析方法、智能终端及存储介质
CN111640362A (zh) * 2020-06-01 2020-09-08 中国人民解放军63653部队 一种长航时轨迹实时显示方法

Also Published As

Publication number Publication date
CN110427583B (zh) 2022-04-22

Similar Documents

Publication Publication Date Title
Jones et al. Watershed delineation with triangle-based terrain models
Cecconi Integration of cartographic generalization and multi-scale databases for enhanced web mapping
Ware et al. Conflict reduction in map generalization using iterative improvement
US7330787B2 (en) System and method for abstracting and visualizing a route map
US6952661B2 (en) System and method for abstracting and visualizing a rout map
CN102289991B (zh) 一种基于视觉变量的地图注记自动分类配置方法
JP3151774B2 (ja) 画像をディスプレイへ表示する方法
CN102102992A (zh) 基于多级网络划分的匹配道路初筛方法及地图匹配系统
CN103810756B (zh) 基于不规则区域的自适性的Loop细分曲面的绘制方法
CN112717414B (zh) 游戏场景编辑方法、装置、电子设备以及存储介质
CN103488339B (zh) 一种个性化汉字数字墨水的生成方法
CN110427583A (zh) 应用于移动端地图海量线抽稀绘制的方法
KR102216749B1 (ko) 타겟 이미지의 채색 완성 방법, 장치 및 컴퓨터 프로그램
CN109815419B (zh) 基于地理位置的兴趣点索引方法、装置、介质及电子设备
Harrie An optimisation approach to cartographic generalisation
CN101281699A (zh) 地理要素实例符号化方法
CN116518960B (zh) 路网更新方法、装置、电子设备和存储介质
CN106409129A (zh) 路况绘制方法及装置
Yan et al. Description approaches and automated generalization algorithms for groups of map objects
CN111047682A (zh) 一种三维车道模型生成方法及系统
CN109670006A (zh) 基于电子地图可视化绘制自定义区域的方法、设备和装置
CN117313380A (zh) 一种电缆容积率与转弯半径限制优化方法及系统
CN102129426B (zh) 显示人物关系的方法及装置
Christensen Line generalization by waterlining and medial-axis transformation. Successes and issues in an implementation of Perkal's proposal
US20230168106A1 (en) Method, apparatus, and system for providing mock map data for map design validation and documentation

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