基于并发控制和双缓存技术的移动gis切片地图展现方法

文档序号:8005991阅读:147来源:国知局
基于并发控制和双缓存技术的移动gis切片地图展现方法
【专利摘要】本发明涉及基于并发控制和双缓存技术的移动GIS切片地图展现方法。该方法使用切片计算器通过几何关系计算出移动设备当前屏幕上所包含的切片信息,如:切片数目、切片地理范围、切片索引等;使用切片下载控制器通过并发控制技术调节并发下载的切片数目使得移动设备的系统资源得到充分利用同时又不会对服务器造成过大压力,从而提高切片的下载效率;切片加载器使用内存和文件双缓存技术避免切片的重复下载、缩短切片的获取时间,极大地提高了切片的展现效率。本发明为地图开发人员提供了一种简便有效的移动GIS切片地图展现方法,解决了由于移动设备的系统资源以及网络环境等客观条件的限制造成的地图浏览不流畅的问题,提升了用户体验。
【专利说明】基于并发控制和双缓存技术的移动GIS切片地图展现方法
【技术领域】
[0001]本发明涉及一种对地理信息系统(GIS)的地图进行展现的方法,尤其是基于并发控制和双缓存技术对移动GIS (移动设备,如:PDA、平板电脑、智能手机上的GIS系统)的地图进行展现的方法。
【背景技术】
[0002]当前,随着无线网络的发展和智能手机等移动设备的普及,基于位置服务(Location-Based Service,LBS)的应用越来越广泛,无论是日常出行公交线路查询还是生活购物兴趣点搜索都离不开位置服务,可以说LBS应用已经渗透到我们生活的各个方面。
[0003]作为对LBS应用的支撑,移动GIS的出现正是为了解决在移动设备上使用位置服务的需求。而地图是移动GIS的基础,也是移动GIS系统的核心技术。由于移动设备的内存容量和CPU性能相对于个人计算机较弱、无线网络在某些地区性能不稳定等客观条件的限制,在实际应用中,移动GIS地图展现效果往往不够理想,存在切片的下载效率低、切片的重复下载、切片的加载时间长等缺陷。因此,如何在移动设备上快速展现地图、提升用户的地图浏览体验,已成为地图开发人员关注的焦点。
[0004]地图切片技术是指将地图分割成尺寸相同的小图块,每个图块是一张栅格图片,代表某一地理范围称为切片地图或者切片,并将这些切片预先存储在地图服务器上,地图客户端通过索引从服务器上下载指定切片。由于不需要在服务端实时生成地图,降低了地图的获取时间,地图切片技术越来越广泛地应用在移动GIS系统中。
[0005]地图是由若干张切片组成的,移动GIS系统中展现地图时,首先需要计算出当前地图界面上的所包含的切片信息,然后从服务器上下载这些切片,最后再将切片展示在移动设备上。
[0006]并发控制技术是指可控制同时执行的事务的个数并且可保证多个事务可以同时正确地运行而采用的技术,可以考虑将并发控制技术应用于切片下载,从而对切片的下载过程可控提高切片下载效率。
[0007]双缓存技术是指采用内存缓存和文件缓存技术,可以考虑将双缓存技术应用于切片展示,从而可以避免切片的重复下载和读取以提高切片展示效率。

【发明内容】

[0008]有鉴于此,本发明的目的在于实现基于并发控制和双缓存技术的移动GIS切片地图展现方法,提高切片的下载效率、避免切片的重复下载、缩短切片的加载时间,从而提高切片的展现效率、提升用户体验。
[0009]为实现上述目的,本发明提供了如下方案:
基于并发控制和双缓存技术的移动GIS切片地图展现方法,其特征在于,包括:
(O计算出当前地图界面所包含的信息;通过切片计算器根据地理范围和几何关系计算出当前地图界面所包含的切片信息,并保存在可复用的动态二维数组中; (2)下载切片;通过切片下载控制器使用并发控制技术根据二维数组中获取的切片信息从地图服务器上下载切片,并保存至本地;
(3)显示地图界面;通过切片加载器使用双缓存技术从本地获取切片并将切片展现在地图界面上。
[0010]所述步骤(I)中,所述切片计算器根据切片尺寸、屏幕尺寸、屏幕地理范围等信息通过几何关系循环计算切片的编号、切片的左上角坐标。
[0011 ] 所述步骤(I)中,将切片信息保存在可复用的动态二维数组中,并且数组中的对象是可复用的。
[0012]所述步骤(2)中,切片下载控制器下载切片的方法步骤如下:
(I )设置并发下载的最大切片个数,获取当前界面上包含的切片总个数;
(II )通过切片下载控制器的download接口添加切片下载请求对象,用Hash表保存切片请求,判断当前添加的切片下载请求对象个数是否等于tileCount-1,其中tileCount表示当前屏幕上能够显示的切片的最大个数;
若相等,则表示当前界面上的切片都已经添加到下载队列时,执行步骤(III),执行完成后继续执行步骤(II );
若当前添加的切片下载请求对象个数大于等于tileCount是用户的下一次地图操作,则清空Hash表值,并将当前添加的切片下载请求的个数currentRequestCount赋值为O ;最后,将切片下载请求对象添加到Hash表,并将当前添加的切片下载请求对象个数currentRequestCount 赋值为 currentRequestCount+Ι,其中 currentRequestCount 表不当前添加的切片下载请求的个数;
(III)、判断是否是第一次执行切片下载,如果是则开启并发下载的最大切片个数maxConcurrentTileCount的切片下载线程TileDownloadThread线程,否则唤醒正在等待下载的所有切片下载线程TileDownloadThread线程继续执行。
[0013](VI)设置一个切片下载线程TileDownloadThread,该线程内部包含一个无限循环,在循环内部判断Hash表中是否还有未处理的请求,如果没有则说明当前地图的绘制工作已经完成,此时让下载线程等待,否则从Hash表中取出一个未处理的请求,执行具体的切片下载工作。
[0014]所述切片下载控制器当无下载请求时让下载线程处于等待状态,当有下载请求时唤醒等待的线程。
[0015]所述步骤(3)中,所述切片加载器是将与用户最近操作相关的有限个切片存放在内存缓存中。
[0016]所述步骤(3)中,所述切片加载器是将下载的切片存放在文件缓存中。
[0017]所述步骤(3)中,切片加载器是先从内存缓存,再从文件缓存,最后从地图服务器中获取切片,避免切片的重复加载。
[0018]所述切片加载器在每一次切片下载完成后就开始重绘地图,而不需要等到所有切片下载完成再重绘地图。
[0019]本发明基于并发控制和双缓存技术实现了移动GIS切片地图的展现,从逻辑上将切片地图的展现处理过程定义为:切片计算器、切片下载控制器和切片加载器。其中,切片计算器负责获取切片信息;切片下载控制器负责对切片的下载进行管理;切片加载器则负责对切片的展现进行处理。开发人员只需根据本发明所定义地图展现逻辑即可实现基于并发控制和双缓存的移动GIS切片地图的展现方法,使用该方法可提高移动GIS切片地图的展现效率,提升用户体验。
【专利附图】

【附图说明】
[0020]图1是本发明实施示例所提供的移动GIS切片地图展现流程图,
图2是本发明实现切片下载器的切片下载流程图,
图3是本发明实现切片加载器的切片加载流程图。
【具体实施方式】
[0021]以下结合附图和具体的实施示例对本发明的技术方案作进一步描述。
[0022]本发明的基于并发控制和双缓存技术的移动GIS切片地图展现方法。该方法使用切片计算器通过几何关系计算出移动设备当前屏幕上所包含的切片信息,如:切片数目、切片地理范围、切片索引等;使用切片下载控制器通过并发控制技术调节并发下载的切片数目使得移动设备的系统资源得到充分利用同时又不会对服务器造成过大压力,从而提高切片的下载效率;切片加载器使用内存和文件双缓存技术避免切片的重复下载、缩短切片的获取时间,极大地提高了切片的展现效率。
[0023]本发明的具体实施按照图1所示流程进行,下面以Android系统上移动GIS切片地图展现为例,描述该流程中的各步骤:
(O根据对切片计算器的定义,切片计算器用来生成切片信息,用Java语言按照上述步骤实现切片计算器。
[0024]该切片计算器定义如下:
切片计算器根据地理范围和几何关系计算出当前地图界面所包含的切片信息,其方法步骤包括:
1、根据地图比例尺计算当前屏幕对应的地理范围;
2、通过比例关系计算出每个切片横向所对应的地理范围X(单位为经纬度或米)、纵向所对应的地理范围Y (单位为经纬度或米),获取切片的宽度W (单位为像素)、高度H (单位为像素)。
[0025]3、根据切片的起始点坐标、切片的地理范围、切片的尺寸以及当前屏幕的地理范围、当前屏幕的尺寸,循环计算出每个切片的横向编号Nx (从切片起始点到当前位置横向的切片个数)、纵向编号Ny (从切片起始点到当前位置纵向的切片个数)以及切片的左上角点在屏幕上的坐标(X,y)。
[0026]4、根据切片在地图上的显示位置按照从左到右、从上到下的顺序将通过上述计算获取的切片信息保存在一个动态二维数组中,数组中的每个元素表示某一切片的信息。在这里要特别注意的是用于保存切片的二维数组和数组中存储切片信息的对象都是可以复用的,只需要在第一次使用的时候申请内存空间,下次使用的时候只需要替换切片对象的具体内容即可;切片计算器是需要被反复调用的(如:用户拖动、缩放地图,每拖动或者缩放一次切片计算器就会执行一次相应计算。),这样处理可以大大节约内存空间的占用,并节约频繁操作内存带来的系统开销。[0027]通过上述步骤,切片计算器将每一次地图操作(拖动或缩放)后地图界面上需要显示的切片信息记录在一个可复用的动态二维数组中,切片下载控制器从二维数组中获取切片信息并到地图服务器上下载切片。
[0028]由于当前界面上显示的切片个数不至一个(其实界面上显示的切片个数为偶数,具体个数与切片的大小和屏幕分辨率相关),如果用单线程去实现切片下载势必会降低效率、造成用户等待时间过长的问题,如果用多线程下载则必须控制每次同时下载的切片个数,否则并发量过大会给服务器带来较大的压力,也不利于移动设备系统资源的利用;同时必须处理无效的切片请求,以保证界面的快速响应。假设每次地图界面更新时要向服务端请求12个切片,在网络环境较差的区域,用户连续5次拖动地图,如果不做任何处理则必须要从服务端下载60个切片,而实事上最终展现在地图界面上的是第5次拖动地图后要下载的12个切片,可以把前4次拖动地图后要下载的48个切片看作是无效的切片请求。如果不过滤掉无效切片请求,则地图界面必须要等待这48个切片下载完成后才能更新,在网络环境较差的情况下,会严重影响用户体验。
[0029](2)下载切片;通过切片下载控制器使用并发控制技术根据二维数组中获取的切片信息从地图服务器上下载切片,并保存至本地;本实施例根据对切片下载控制器的定义,切片下载控制器用来下载切片,用Java语言按照切片下载控制器的切片下载流程实现切片下载;
参见图2,切片下载控制器的原理是:控制同时下载的切片个数,同时要处理无效请求。定义切片下载器,该切片下载器的切片下载方法包括如下:
(I )、设计一个切片下载控制器TileDownloadController,设置并发下载的最大切片个数maxConcurrentTileCount,获取当前界面上包含的切片总个数tileCount (给定设备屏幕分辨率和切片尺寸可以计算出切片个数)。
[0030](II )、通过切片下载控制器TileDownloadController的download接口添加切片下载请求TileRequest (TileRequest是切片下载请求对象,包含:切片索引、请求是否被处理等属性),用 Hash 表 TileRequestContainer (TiIeRequestContainer 是切片请求容器,内部是用hash表实现的,用来存放TileRequest)保存切片请求,判断当前添加的请求个数currentRequestCount是否等于tileCount-l,如果是则说明界面上的切片都已经添加到下载队列这时执行步骤3,执行完成后继续执行步骤2 ;如果currentRequestCount大于等于tileCount说明是用户的下一次地图操作,则清空TileRequestContainer,并将currentRequestCount赋值为O (即使上次的请求尚未处理完,也丢弃,用这种方式来处理无效请求);最后,将切片请求添加到TileRequestContainer,并将currentRequestCount赋值为 currentRequestCount+Ι ο
[0031](III)、判断是否是第一次执行切片下载,如果是则开启maxConcurrentTileCount个TileDownloadThread线程(该线程的具体内容见步骤4),否则唤醒正在等待下载的所有TiIeDownloadThread 线程继续执行。
[0032](IV)、设ii 个切片下载管理线程TileDownloadThread,该线程内部包含一个无限循环(循环可以根据标志位退出),在循环内部判断TiIeRequestContainer中是否还有未处理的请求,如果没有则说明当前地图的绘制工作已经完成,此时让Ti IeDown1adThread线程等待,否则从TileRequestContainer中取出一个未处理的请求,执行具体的切片下载工作。
[0033]通过以上步骤,切片下载控制器将切片从地图服务器下载至本地并存储,切片加载器则利用切片地图缓存技术获取地图,并将切片组织成地图展现在移动设备的屏幕上。
[0034]切片地图缓存技术基于以下理论:从本地文件中获取切片地图通常比直接从远程服务器上获取切片地图要快,在网络信号较弱的地区这种优势更加明显;从内存中获取切片地图要比本地文件中快的多,理想的情况是把所有的缓存都放在内存中,但是由于内存资源是稀缺的,所以不能够把所有的缓存都放在内存中,否则会造成内存溢出。基于以上两点考虑,设计出如下切片缓存方案:在内存中缓存有限张与最近地图操作相关的切片,缓存的切片个数要比界面上同时显示的切片个数大、所占内存空间要比设备的总内存空间小;将下载的所有切片存储在本地文件中,可以保存成png、jpg等格式;在SQLite数据库中存储切片索引和切片文件路径,在切片绘制时根据索引从内存缓存中获取切片,如果内存中不存在则从本地文件中获取。
[0035](3)显示地图界面;通过切片加载器使用双缓存技术从本地获取切片并将切片展现在地图界面上。本实施例根据对切片加载器的定义,切片加载器用来加载切片,用Java语言按照切片加载器的加载步骤实现切片加载。
[0036]为实现切片加载器的定义,采用内存和文件两级缓存机制定义切片加载器,该切片加载器的加载步骤包括:
(A)、设定内存缓存的最大容量为maxCacheCapacity (假设单位为KB),切片地图下载成功后,将切片保存在内存缓存中;此时需要判断当前内存缓存的容量是否大于maxCacheCapacity,如果是,说明已达到内存缓存的临界值maxCacheCapacity,此时释放整个内存缓存N%的空间(其中0〈N〈100,比如:5%的空间),清除最早获取的M个切片(这M个切片所占空间为maxCacheCapacity XN%,获取这M个切片的一种实现方式是维护一个队列利用队列先进先出的特性,依次执行出队操作直到所占内存满足需求。),然后再将切片保存在内存缓存中,否则直接保存。
[0037](B)、将切片保存在文件中,将切片索引保存在SQLite数据库中(SQLite是嵌入式轻量级数据库,保存在SQLite中可以利用数据库的特性便于切片的查找),同时需要维护数据库中切片索引与切片文件的同步关系。
[0038](C)、当某一切片下载完成后进行地图渲染,地图渲染时,先从内存缓存中查找是否存在指定切片,如果存在则直接渲染,否则查找文件缓存中是否存在指定切片,如果存在则从文件中取出切片并读到内存中,执行步骤(A),然后渲染;否则,从远程服务器上下载切片并执行步骤(A)、(B),然后渲染。
[0039]本发明通过上述方法,为地图开发人员提供了一种简便有效的移动GIS切片地图展现方法,解决了由于移动设备的系统资源以及网络环境等客观条件的限制造成的地图浏览不流畅的问题,提升了用户体验。
[0040]以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
【权利要求】
1.基于并发控制和双缓存技术的移动Gis切片地图展现方法,其特征在于,包括: (O计算出当前地图界面所包含的信息;通过切片计算器根据地理范围和几何关系计算出当前地图界面所包含的切片信息,并保存在可复用的动态二维数组中; (2)下载切片;通过切片下载控制器使用并发控制技术根据二维数组中获取的切片信息从地图服务器上下载切片,并保存至本地; (3)显示地图界面;通过切片加载器使用双缓存技术从本地获取切片并将切片展现在地图界面上。
2.根据权利要求1所述的移动GIS切片地图展现方法,其特征在于,所述步骤(I)中,所述切片计算器根据切片尺寸、屏幕尺寸、屏幕地理范围等信息通过几何关系循环计算切片的编号、切片的左上角坐标。
3.根据权利要求1所述的移动GIS切片地图展现方法,其特征在于,所述步骤(I)中,将切片信息保存在可复用的动态二维数组中,并且数组中的对象是可复用的。
4.根据权利要求1所述的移动GIS切片地图展现方法,其特征在于,所述步骤(2)中,切片下载控制器下载切片的方法步骤如下: (I )设置并发下载的最大切片个数maxConcurrentTileCount,获取当前界面上包含的切片总个数tiIeCount; (II )通过切片下载控制器的download接口添加切片下载请求对象,用Hash表保存切片请求,判断当前添加的切片下载请求对象个数是否等于tiIeCount-1 ; 若相等,则表示当前界面上的切片都已经添加到下载队列时,执行步骤(III),执行完成后继续执行步骤(II ); 若当前添加的切片下载请求对象个数大于等于tileCount表示是用户的下一次地图操作,则清空Hash表值,并将当前添加的切片下载请求的个数currentRequestCount赋值为O ;最后,将切片下载请求对象添加到Hash表,并将当前添加的切片下载请求对象个数赋值为 currentRequestCount+Ι ; (III)、判断是否是第一次执行切片下载,如果是则开启maxConcurrentTileCount个切片下载线程线程,否则唤醒正在等待下载的所有切片下载线程继续执行; (VI)设置一个切片下载线程,该线程内部包含一个无限循环,在循环内部判断Hash表中是否还有未处理的请求,如果没有则说明当前地图的绘制工作已经完成,此时让下载线程等待,否则从Hash表中取出一个未处理的请求,执行具体的切片下载工作。
5.根据权利要求1所述的移动GIS切片地图展现方法,其特征在于,所述切片下载控制器当无下载请求时让下载线程处于等待状态,当有下载请求时唤醒等待的线程。
6.根据权利要求1所述的移动GIS切片地图展现方法,其特征在于,所述步骤(3)中,所述切片加载器是将与用户最近操作相关的有限个切片存放在内存缓存中。
7.根据权利要求1所述的移动GIS切片地图展现方法,其特征在于,所述步骤(3)中,所述切片加载器是将下载的切片存放在文件缓存中。
8.根据权利要求1所述的移动GIS切片地图展现方法,其特征在于,所述步骤(3)中,切片加载器是先从内存缓存,再从文件缓存,最后从地图服务器中获取切片,避免切片的重复加载。
9.根据权利要求1所述的移动GIS切片地图展现方法,其特征在于,所述切片加载器在每一次切片下载完成后就开.始重绘地图,而不需要等到所有切片下载完成再重绘地图。
【文档编号】H04L29/08GK103473732SQ201310387034
【公开日】2013年12月25日 申请日期:2013年8月30日 优先权日:2013年8月30日
【发明者】曹海涛 申请人:国家电网公司, 南京南瑞集团公司, 国网电力科学研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1