一、         app主体部分 [tyt.android.bigplanettracks]

二、         地图部分 [tyt.android.bigplanettracks.maps]

1、ui包

2、loader包 用来下载瓦片

3、maps包

4、storage包

三、         轨迹部分 [tyt.android.bigplanettracks.tracks]

一、   app主体部分 [tyt.android.bigplanettracks]

二、   地图部分 [tyt.android.bigplanettracks.maps]

1、ui包:界面部分

[1]     MapControl.java  地图核心操作

最下边包含一个内部类:面板类Panel,继承自View。

[2]     ZoomPanel.java   下方的缩放组件                           *会用到*

[3]     SmoothZoomEngine.java 平滑缩放引擎

包含一个Integer型的缩放队列:scaleQueue

有SmoothZoomEngine线程  使用synchronized加锁

[4]     DoubleClickDetector.java 专门处理双击的类 包含双击判断

[5]     OnDialogClickListener.java   OnMapLongClickListener 监听器(基本空)

[6]     BitmapUtils.java 处理位图的实用工具  用来绘制BACKGROUND_COLOR颜色的空背景 和带框线LINE_COLOR的背景

[7]     AddBookmarkDialog.java 添加书签的对话框

2、loader包:下载瓦片

BaseLoader类定义了根据Tile去下载数据的瓦片RawTile数组tiles ,BaseLoader中很多都是使用抽象方法,这些方法在TileLoader中具体定义了。

[1]     BaseLoader.java   是一个继承自Thread类的抽象类

[2]     TileLoader.java  文件最下方有一个类ThreadLoader,继承自 BaseLoader,实现了BaseLoader中的抽象方法

3、maps包:地图相关类

[1]     RawTile.java  瓦片类  可被序列化(Intent传数据会用到) 记录Tile的行,列,以及图层的信息。

包含 x, y, z, s四个主要变量

Tile(x,y)坐标中x,y分别乘以瓦片的大小(在此为256)就得到了该Tile瓦片左上角在整个地图的偏移

x , y 是瓦片坐标系的坐标值,z代表缩放级别,s则共有八个字符:空字符和Galileo的七个字符。

x , y 的值在 z 增加时会按级数递增,而s 的值很可能是 x , y , z 三个参数组合后的从 0 到 7 的一个索引值。

x , y , z 组合后与 8 求余即可得到 s 的值。

当 x = 0 时,y 增 1 时,s会同时增 1,与 z 值无关。

当 y = 0 时,x 增 1 时,s会同时增3 ,与 z 值无关。

从上面两条可以得出,x , y 很可能以 3*x + y 的方式组合,然后与 8 求余即得 s。

推测公式为:( 3*x + y )%8 = s

详见http://blog.csdn.net/mygisforum/article/details/7582449

[2]     Preferences.java

保存软件的一些值,这些值都被声明为static final变量,类中包括每个值的put,get 方法。具体调用在BigPlanet类中。调用方式为Preferences.putGPSOffset();,Preferences.getGPSOffset();   每次启动软件都先进行初始化

[3]     Place.java   地点类

包括以下几个变量,以及它们的get  set方法

名称                  :name;

纬度latitude      :lat;

经度longitude   :lon;

位置                    :location;

地址                    :address;

[4]     MarkerManager.java  标记物类

在MapControl.java 中有实例

构造函数中,将各个标记物对应的图片put入一个HashMap<Integer,MarkerImage> images中。

最下边两个类

MarkerImage  三个内部变量:

Bitmap  image   标记物图片

int      offsetX  X轴偏移

int      offsetY  Y轴偏移

Marker

Place place; 地点

RawTile tile; 瓦片

Point offset; 偏移

boolean isGPS;

MarkerImage markerImage; 标记物图片

4、storage包:Cache缓存和文件缓存

[1]     ExpiredHashMap.java 能够存储一定量的位图,会自动删除最早的部分。

包含一个HashMap<ExpRawTile, Bitmap> (大小size在构造函数中指定)

gc()方法:用于在高速缓存中删除最旧的部分

ExpRawTile类在ExpiredHashMap.java文件最下边, 继承自瓦片类RawTile,实现了Comparable<ExpRawTile>接口,包含一个参数addedOn。两个ExpRawTile可比较addedOn的大小

[2]     BitmapCache.java 图片缓存类

包含一个ExpiredHashMap类型的变量 cacheMap

里边的函数,都是通过变量cacheMap调用ExpiredHashMap里的方法:清空clear(),get(), put()方法,gc()方法

[3]     BitmapCacheWrapper.java

其中有一个BitmapCacheWrapper类型的 实例instance,通过getInstance()得到

包含“不缩放”和“缩放”两种类型的的图片缓存,它们是BitmapCache类型的变量 cache(大小CACHE_SIZE)和scaledCache(大小为20)。

put方法:

putToCache(RawTile tile, Bitmap bitmap) 放置一个位图切片到缓存

putToScaledCache(RawTile tile, Bitmap bitmap)放置一个缩放过的位图切片到缓存

get方法类似

public void gc(){

scaledCache.gc();

cache.gc();

}

public void clear() {

scaledCache.clear();

cache.clear();

}

[4]     IlocalStorage 是个文件缓存的接口类,提供一些待实现接口

clear() 清空文件缓存

put()  在文件缓存保留瓦片

get()  返回指定的瓦片或空(如果没有找到)

[5]     LocalStorage 实现IlocalStorage中的接口                     **重要**

指定文件缓存的根目录 private static final String root_dir_location = "/sdcard/bigplanet/";                       ****没找到此目录****

拥有一个ILocalStorage 类型的实例localStorage,通过getInstance()获取;

构造函数中初始化文件缓存(如果有必要);

clear() 清空文件缓存的函数,调用deleteDir()方法, 递归删除目录及其中的所有内容。

String buildPath(RawTile tile)  根据传入的RawTile对象,和根目录拼接,返回完整路径名称。

其中RawTile类中已重写toString函数。

@Override

public String toString() {

String path = s+"/"+z+"/"+x+"/"+y+"/";

return path;

}

void put(RawTile tile, byte[] data);

调用buildPath(tile)函数,通过tile构建完整路径,通过BufferedOutputStream输入流,将数据data写入文件中。

BufferedInputStream  get(RawTile tile);

调用buildPath(tile)函数,通过tile构建完整路径,返回BufferdInputStrem输入流(带有缓冲区域的InputStream)。

[6]     SQLLocalStorage.java   实现IlocalStorage中的接口

1)        将图片文件以二进制形式存到数据库中

2)        字段为:

x int,

y int,

z int,

s int,

image blob,

PRIMARY KEY (x,y,z,s)

3)        地图数据库的路径为/sdcard/RMaps/maps/

轨迹数据库的路径为/sdcard/BigPlanetTracks/

4)        put函数,存入数据库

public void put(RawTile tile, byte[] data) {

ContentValues initialValues = new ContentValues();

initialValues.put(SQLLocalStorage.X_COLUMN, tile.x);

initialValues.put(SQLLocalStorage.Y_COLUMN, tile.y);

initialValues.put(SQLLocalStorage.Z_COLUMN, tile.z);

initialValues.put(SQLLocalStorage.S_COLUMN, tile.s);

initialValues.put(SQLLocalStorage.IMAGE_COLUMN, data);

db.insert(SQLLocalStorage.TILES_TABLE, null, initialValues);

}

其中

private static String X_COLUMN = "x";

private static String Y_COLUMN = "y";

private static String Z_COLUMN = "z";

private static String S_COLUMN = "s";

private static String IMAGE_COLUMN = "image";

图像通过byte[] data存储在数据库中

5)        get函数

public BufferedInputStream get(RawTile tile)

返回的是 BufferedInputStream类型的 io变量

byte[] d = c.getBlob(c.getColumnIndex(SQLLocalStorage.IMAGE_COLUMN));

io = new BufferedInputStream(new ByteArrayInputStream(d), 4096);

BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。

在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。

BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。

6)        SQLLocalStorage和LocalStorage中都有一个

private static ILocalStorage localStorage;实例

通过public static ILocalStorage getInstance() {

if (localStorage == null) {

localStorage = new SQLLocalStorage();

}

return localStorage;

} 函数读取

三、              轨迹部分 [tyt.android.bigplanettracks.tracks]

Android开源地图项目 BigPlanetTracks 学习随笔的更多相关文章

  1. 2015年十大热门Android开源新项目

    2015年十大热门Android开源新项目 2015 即将结束,又到了大家喜闻乐见的年终盘点时刻啦,今天给大家盘点一下 2015 年 Android 开发领域新出现的 10 大热门开源项目.数据来自于 ...

  2. soul开源网关项目搭建学习

    1. soul开源网关项目搭建学习 1.1. 地址 https://gitee.com/shuaiqiyu/soul 1.2. 介绍 官方介绍:这是一个异步的,高性能的,跨语言的,响应式的API网关. ...

  3. Android开源库项目集锦

    一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的全部平台. ...

  4. Android开源工具项目集合

    最近因为要去外派了,工欲善其事,必先利其器!所以又回顾了一下自己github上所收藏的项目,也算是温故而知新吧. 最流行的Android组件大全 http://www.open-open.com/li ...

  5. Android开源经典项目

    目前包括: Android开源项目第一篇--个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...

  6. 10个经典的Android开源应用项目

    Android开发又 将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和 创造力.学习开源代码是掌握技术的 ...

  7. 9个完整android开源app项目

    一.photoup 介绍: photoup 是一款开源的相册类app,主要功能是将本地图片提交到facebook上去,虽然他的功能和facebook的远程服务相关,但是本身是可以被当作一款 相册应用的 ...

  8. 140款Android开源优秀项目源码

    BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefreshLayout/tree/Beautifu ...

  9. Android开源client之LookAround学习(一)Application &amp; 网络框架

    之前看过开源clientLookAround(下载地址:http://download.csdn.net/detail/hualulove/7306807),链接:http://blog.csdn.n ...

随机推荐

  1. review05

    子类与继承 所有类都是Object的子孙类. 子类继承了父类的成员变量和方法,就好像是在子类中直接定义了一样. 如果子类和父类在同一个包中,子类自然地继承了父类中不是private的成员变量和方法. ...

  2. 智课雅思词汇---二十、前缀syn-sym-syl是什么意思

    智课雅思词汇---二十.前缀syn-sym-syl是什么意思 一.总结 一句话总结:l,m,n是可以互换 前缀:sy-, syn-, sym-, syl- [词根含义]:共同,同时 [词根来源]:(s ...

  3. 配置web项目出的各种error (安装sql2008错误,网站连接数据库error错误等等)

      一个破error:40 错误搞出了很多莫名其妙的为问题,搞了5天,最后重装系统加上重新配置终于好了. 1. 关于SQL 2008 安装错误 安装之前必须安装VS2008 SP1 安装到最后提示 试 ...

  4. hdu 1907 John(anti nim)

    John Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  5. linux 日常使用命令

    ●安装和登录命令:login.shutdown.halt.reboot.mount.umount.chsh ●文件处理命令:file.mkdir.grep.dd.find.mv.ls.diff.cat ...

  6. ContextMenuStrip 动态添加多级子菜单

    1.首先要实例化几个ToolStripItem(要为某一父菜单添加几个子菜单就实例化几个):方法如下: /*添加子菜单*/ ToolStripItem ts_1 = new ToolStripMenu ...

  7. 2017.12.15 python资料,转存一下。

    最近GD项目三个型号都是用Python做批量烧录和测试的.marking一下,,虽然自己不会写. 1.入门阶段 The Python Tutorial(https://docs.python.org/ ...

  8. 统计日志中ip出现的次数

    grep -r 'GET /weixin/weixin_izp/index.html' ./chunyun.access.log > ~/access.log cat access.log |a ...

  9. 难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)吗?

    开门见山,下面的例子中通过调用ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state)的方式实现异步调用: 1: class ...

  10. git之cherry-pick

    当想把当前分支提交的代码,也在其他分支提交,那可以用cherry-pick命令. 1 假设在master分支commit的id为:abc12345; 2 切换到其他分支,如develop分支; 3 在 ...