`

BigPlanetTracks源码分析

阅读更多

这段时间做了一个android项目,我负责的是地图模块,由于客户要求具体离线地图的功能,后来经一师兄推荐参考BigPlanetTracks源码,然后就只有认真查看源码,共有15个包,要理清软件的思路不是那么容易,下面我简要说下我读到这份源码的一些东西。

BigPlanetTracks只要分为两块:地图和轨迹。只要理清地图的那部分就行了。

Big几乎没有使用到android地图开发的什么控件(获取Location除外),Big地图显示的基本思想很简单:获取Location,计算出对应的Tile(瓦片),然后就是从服务器下载数据。

我们先简单说下地图,地图是球形的,而我们平时见到的地图是平面长方形的,将球形的地图转换成平面的矩形就是Gerardus Mercator投影,然后就是讲平面地图分割成瓦片。

瓦片地图就是将从地图图片的左上角开始,从左至右、从上到下进行切割,分割成相同大小(比如256x256像素)的正方形地图瓦片,形成第0层瓦片矩阵;在第0层地图图片的基础上,按每2x2像素合成为一个像素的方法生成第1层地图图片,并对其进行分块,分割成与下一层相同大小的正方形地图瓦片,如此下去就形成了不同分辨率的图层。

RawTile就是瓦片类记录Tile的行,列,以及图层的信息。Big用了很多坐标,地理坐标,Tile坐标,Tile上偏移坐标,屏幕坐标,其中,Tile(x,y)坐标中x,y分别乘以瓦片的大小(Big使用256)就得到了该Tile瓦片左上角在整个地图的偏移,Big还使用了globalOffset表示的该瓦片左上角的到手机屏幕左上角的距离的相反数,至于GPSoffset其实是地理坐标的矫正位移。

GeoUtils类是将经纬度转换对应的Tile,还可以就算出该经纬度点在对应Tile(地图图片)的偏移。

provider包就是提供数据源,其实就是服务器地址,我们只需要将传入Tile的(x,y,z)信息就可以获得对应的URL。

loader包实现的是下载Tile 数据的操作,其中BaseLoader类就是定义了根据Tile去下载数据data数组,BaseLoader中很多都是使用抽象方法,这些方法在TileLoader中具体定义了。

storage包完成Tile数据的本地存储,存到数据库里。存储记录了Tile的信息,以及images(其实就是下载下来的data)。storage包中的BitmapCache以及其的包装类BitmapCacheWrap还实现了从当前缓存下来的HashMap中根据Tile获取对应的图片。

Tile的显示的相关类是:MapControl和PhysicMap,前者负责显示很相应用户的操作,后者负责具体数据的操作,其实就是View和Control的分离。其实核心就是操作Tile,每次显示的都是计算出左上角第一个Tile然后根据屏幕的大小获取对应的Bitmap数组,这也是这个软件自适应屏幕尺寸的原理。至于显示Marker和GeoBookMark其实就是讲对应的图片View显示在对应的位置。

其他一些类,BigPlanetApp和Preferences其实为了保存软件的一些值,每次启动软件都先进行初始化。

BigPlanetTracks不仅让我学习了地图的一些基本东西,还让我学到了软件设计的一些思想,当然Big本身有些地方也冗余的地方。

由于时间的关系,我就说简要说这些,有兴趣者可以一起交流。

 

 

 

分享到:
评论
3 楼 路飞用小妖 2012-10-02  
是mapControl的doDraw那部分吗
2 楼 路飞用小妖 2012-10-02  
楼主能否给点指点
哪里是复杂绘制当前屏幕范围显示的地图
还有求相反数那个作用是什么?
感谢
1 楼 wa114d 2012-09-03  
楼主很强大,还没毕业就学习这么多了,厉害

相关推荐

    BigPlanetTracks_2.0

    Big Planet Tracks 2.0(*星迹地图* - GPS 轨迹记录器)是一款先进的 Android 离线地图,除了具备手机无网路也能查看离线地图的实用功能之外,还能够汇入、汇出与记录 GPS 轨迹,并显示轨迹的时间、距离、平均速度、...

    android map

    Big Planet Tracks is an online/offline maps application that can import, export and record your GPS tracks, and shows live/real-time statistics such as time, speed, distance, and elevation. ...

    tracks eraser pro 序列号

    tracks eraser pro 序列号 tracks eraser pro 序列号 tracks eraser pro 序列号 tracks eraser pro 序列号 tracks eraser pro 序列号 tracks eraser pro 序列号

    Tracks

    "Tracks"是一个与字体相关的主题,这可能是指一种特定的字体家族、字体设计或者是一种用于创建和编辑字体的工具。在这个场景下,"Tracks.TTF"是压缩包中的一个文件,它代表了一种TrueType字体文件。 TrueType字体是...

    Tracks Eraser Pro v6.2.1000

    Tracks Eraser 可以删除 IE、Netscape、AOL、Opera 浏览器相关的记录文件以及缓存,清除 Windows 缓存、资源回收站、开启的文件记录等,还可以免费下载外挂程序,来删除近 50 种的程序记录文件。 这个是英文版。

    谷歌GPS轨迹记录软件 My Tracks V1.0.2

    谷歌GPS轨迹记录软件 My Tracks V1.0.2

    vpdma.rar_Tracks

    VPDMA,全称为Video Port Direct Memory Access,是一种用于视频处理的DMA(Direct ...通过对"vpdma.c"和"vpdma.h"的源码分析,我们可以学习到如何在实际应用中设计和实现这样的系统,以满足高性能视频处理的需求。

    unity铁路轨道生成系统源码

    unity铁路轨道生成系统源码+Tracks+and+Rails.unitypackage

    Tracks Eraser Pro V7.8

    Tracks Eraser Pro V7.8简体中文绿色版 双击直接使用,方便快捷,这是用过的性能最好的系统特殊清理工具,能清除计算机中的活动踪迹,可以清除cookies、history、URL、自动完成记忆数据、临时文件、运行程序记录、...

    Tracks Eraser Pro

    《Tracks Eraser Pro:全方位隐私保护与系统优化工具》 Tracks Eraser Pro是一款专业的系统清理和隐私保护软件,尤其在清除系统垃圾文件和清理互联网浏览器历史记录方面表现出色。这款软件,标记为"Tracks Eraser 8...

    Tracks Eraser Pro7.8built1010+keygen.rar

    彻底删除电脑的运行历史,特别是index.dat,其中包含你上网的历史,用其他工具是清理不掉的。

    Novation诺维逊 Circuit Tracks 英文说明书.pdf

    【诺维逊 Circuit Tracks 用户手册】是一份详细指导如何使用诺维逊 Circuit Tracks 设备的文档,由Focusrite Audio Engineering Ltd. 所拥有并发行。这份手册包含了对商标的声明,免责声明,规格变更的可能性,以及...

    video-js-html5视频播放器源码例子

    通过分析这些源码,我们可以学习如何初始化播放器、设置视频源、调整播放器外观,以及如何处理播放、暂停、进度改变等事件。 4. **跨浏览器兼容性** video-js的一个重要特性是其良好的跨浏览器兼容性,不仅支持...

    JNCIA.rar_JCNA_Tracks_juniper

    Juniper Networks Certification Program Tracks

    Ruby-Tracks是一个采用RubyonRails构建的GTDWeb应用程序

    在压缩包文件"TracksApp-tracks-4070f4e"中,我们可以推测这是Tracks应用的一个特定版本或者分支。"4070f4e"可能是该版本的Git提交哈希值,这通常用于标识源代码库中的一个具体修改状态。这个文件可能包含源代码、...

    Tracks Eraser Pro 8 51 Build 1003 Portable

    Tracks Eraser Pro 8 51 Build 1003 Portable

    Anti Tracks v6.9.4

    KaZaA, PowerDVD, WinZip, iMesh, Winamp等等,还可以轻松地以特定的时间间隔调度任务,或者在计算机启动/关闭时调度任务,为了保证最大的隐私保护,Anti Tracks采用了DoD 5220.22-M, Gutmann, and NSA的方法来清除...

    ccextractor字幕源码

    **ccextractor字幕源码详解** `ccextractor`是一款开源、跨平台的软件,专用于从DVD和Teletext中提取字幕。这款工具因其高效和灵活的特性,在IT行业中被广泛应用于多媒体处理和字幕制作领域。本文将深入探讨...

Global site tag (gtag.js) - Google Analytics