这段时间做了一个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本身有些地方也冗余的地方。
由于时间的关系,我就说简要说这些,有兴趣者可以一起交流。
分享到:
相关推荐
Big Planet Tracks 2.0(*星迹地图* - GPS 轨迹记录器)是一款先进的 Android 离线地图,除了具备手机无网路也能查看离线地图的实用功能之外,还能够汇入、汇出与记录 GPS 轨迹,并显示轨迹的时间、距离、平均速度、...
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
Tracks Eraser 可以删除 IE、Netscape、AOL、Opera 浏览器相关的记录文件以及缓存,清除 Windows 缓存、资源回收站、开启的文件记录等,还可以免费下载外挂程序,来删除近 50 种的程序记录文件。 这个是英文版。
谷歌GPS轨迹记录软件 My Tracks V1.0.2
Tracks Eraser Pro V7.8简体中文绿色版 双击直接使用,方便快捷,这是用过的性能最好的系统特殊清理工具,能清除计算机中的活动踪迹,可以清除cookies、history、URL、自动完成记忆数据、临时文件、运行程序记录、...
tracks eraser pro 序列号 tracks eraser pro 序列号 tracks eraser pro 序列号 tracks eraser pro 序列号 tracks eraser pro 序列号 tracks eraser pro 序列号
Tracks Eraser Pro是一个很好的隐私信息清除软件,可以很干净地清除系统的垃圾和隐私信息。
Novation诺维逊 Circuit Tracks 英文说明书.pdf
unity铁路轨道生成系统源码+Tracks+and+Rails.unitypackage
彻底删除电脑的运行历史,特别是index.dat,其中包含你上网的历史,用其他工具是清理不掉的。
Tracks是一个采用Ruby on Rails构建的GTD Web应用程序
A vpdma_buf tracks the size, DMA address and mapping status of each driver DMA area.
This book provides an overview of the resources and research projects that are bringing Big Data and High Performance Computing (HPC) on converging tracks. It demystifies Big Data and HPC for the ...
Glary Tracks Eraser是一款用于WINDOWS7或WIN10系统的用户隐私信息删除工具,使用非常简单,安装后直接运行,会自动检测系统中可以清理的隐私内容,具体包括win系统隐私、各种浏览器浏览记录及打开的文档历史...
Juniper Networks Certification Program Tracks
Tracks Eraser Pro 8 51 Build 1003 Portable
KaZaA, PowerDVD, WinZip, iMesh, Winamp等等,还可以轻松地以特定的时间间隔调度任务,或者在计算机启动/关闭时调度任务,为了保证最大的隐私保护,Anti Tracks采用了DoD 5220.22-M, Gutmann, and NSA的方法来清除...
“Wheels vs. tracks” – A fundamental evaluation from the traction perspective