成都心情

            BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理 ::
            98 隨筆 :: 2 文章 :: 501 評(píng)論 :: 1 Trackbacks

          公告

          Creative Commons License
          本作品采用知識(shí)共享署名-相同方式共享 2.5 中國(guó)大陸許可協(xié)議進(jìn)行許可。 Locations of visitors to this page(15)

          隨筆分類(91)

          隨筆檔案(99)

          文章分類(2)

          友情鏈接

          積分與排名

          • 積分 - 634941
          • 排名 - 74

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          簡(jiǎn)介

          本項(xiàng)目基于Davanum Srinivas開發(fā)的BrowseMapBrowseMap是一個(gè)為Android開發(fā)的Google Maps瀏覽器,能提供:

          • 在Android上瀏覽Google Maps
          • 地圖的放大和縮小
          • 跟隨鼠標(biāo)移動(dòng)(在真實(shí)設(shè)備上應(yīng)該是觸摸屏)
          • 交通和衛(wèi)星視圖之間轉(zhuǎn)換
          • 定位

          (這樣的地圖應(yīng)用程序基礎(chǔ)功能實(shí)際上已經(jīng)在Android上實(shí)現(xiàn)了)

          但是MapMe在這些基礎(chǔ)功能之上提供了不少新特性,這都得感謝db4o對(duì)象持久引擎:

          • 把位置信息登記到db4o(完整的地圖持久化,包括縮放級(jí)別以及衛(wèi)星交通視圖)
          • 瀏覽書簽列表
          • 編輯書簽
          • 從書簽中導(dǎo)航到地圖上某個(gè)位置
          • 根據(jù)當(dāng)前GPS所報(bào)告的位置居中顯示地圖

          屏幕截圖

          想看應(yīng)用程序是如何運(yùn)作的,你可以觀看在YouTube上的MapMe視頻、從一個(gè)外部服務(wù)器下載高分辨率視頻(30 Mb)或下面的屏幕截圖:

          db4o總部(衛(wèi)星+交通視圖)



          MapMe主菜單:



          建立書簽/導(dǎo)航點(diǎn)(navpoint):



          保存的書簽/導(dǎo)航點(diǎn)(navpoint)列表:



          MapMe是如何運(yùn)用db4o的

          如果你查看源代碼(下面有下載),你會(huì)發(fā)現(xiàn)DB helper類處理了所有的持久化操作(開啟、存儲(chǔ)、查詢、計(jì)數(shù)數(shù)據(jù)庫(kù)),而這一切都不超過80行代碼!

          這一切都很簡(jiǎn)單,而且不會(huì)喪失性能。讓我們來看一些項(xiàng)目中用到的持久化方法。

          開啟數(shù)據(jù)庫(kù)

          開啟數(shù)據(jù)庫(kù)的確簡(jiǎn)單,并且在必要的時(shí)候還能自動(dòng)生成數(shù)據(jù)庫(kù)文件。一旦打開,db4o將鎖定數(shù)據(jù)庫(kù)文件。

          public ?ObjectContainer?db(){

          ??????
          try ?{

          ????????????
          if (oc? == ? null ? || ?oc.ext().isClosed())

          ??????????????????oc?
          = ?Db4o.openFile(dbConfig(),?db4oDBFullPath(context));

          ????????????
          return ?oc;

          ??????}?
          catch ?(Exception?e)?{

          ????????????Log.e(Db4oHelper.
          class .getName(),?e.toString());

          ????????????
          return ? null ;

          ??????}

          }

          ?

          private ?String?db4oDBFullPath(Context?ctx)?{

          ??????
          return ?ctx.getDataDir()? + ? " / " ? + ? " browsemap.db4o " ;

          }

          注意我們所存放的數(shù)據(jù)庫(kù)文件路徑是和上下文數(shù)據(jù)目錄有關(guān)的。

          配置數(shù)據(jù)庫(kù)

          這里我們提供一個(gè)配置對(duì)象,以便在打開數(shù)據(jù)庫(kù)的時(shí)候把它傳遞進(jìn)去(代碼如下)。

          private?Configuration?dbConfig(){

          ??????Configuration?c?
          =?Db4o.newConfiguration();

          ??????c.objectClass(MapBookmark.
          class).objectField("name").indexed(true);

          ??????c.objectClass(MapBookmark.
          class).updateDepth(2);

          ??????c.objectClass(MapBookmark.
          class).minimumActivationDepth(3);

          ??????c.objectClass(MapBookmark.
          class).cascadeOnDelete(true);

          ??????
          return?c;

          }?

          注意,為MapBookmark對(duì)象建立的索引字段是“name”,并設(shè)置激活和更新級(jí)別。

          保存書簽

          在這里我們調(diào)用一系列的操作,無論對(duì)象是否存在于數(shù)據(jù)庫(kù),對(duì)象都會(huì)被更新或插入。

          public?void?setBookmark(

          ????????????????????????String?name,

          ????????????????????????String?description,

          ????????????????????????
          int?latitude,

          ????????????????????????
          int?longitude,

          ????????????????????????
          int?zoomLevel,

          ????????????????????????
          boolean?satellite,

          ????????????????????????
          boolean?traffic){

          ?????

          ??????MapBookmark?bkm?
          =?getBookmark(name);

          ??????
          if(bkm?==?null)

          ????????????bkm?
          =?new?MapBookmark(name);

          ??????bkm.setDescription(description);

          ??????bkm.setLatitude(latitude);

          ??????bkm.setLongitude(longitude);

          ??????bkm.setZoomLevel(zoomLevel);

          ??????bkm.setSatellite(satellite);

          ??????bkm.setTraffic(traffic);

          ??????db().set(bkm);

          ??????db().commit();

          }

          在保存到數(shù)據(jù)庫(kù)之前,我們?cè)O(shè)置好所有字段。

          根據(jù)名字查詢書簽

          我們通過Query by Example(QBE)傳入一個(gè)原型來取回以名字為條件的書簽。

          public?MapBookmark?getBookmark(String?name){

          ??????MapBookmark?proto?
          =?new?MapBookmark(name);

          ??????ObjectSet?result?
          =?db().get(proto);

          ??????
          if(result.hasNext()){

          ????????????
          return?(MapBookmark)result.next();

          ??????}

          ??????
          return?null;

          }

          QBE利用反射來檢查原型對(duì)象的字段。

          查詢所有書簽

          這里我們把SODA查詢結(jié)果拷貝到ArrayList中。但要注意,當(dāng)使用Native Queries時(shí)你不必這樣做(在這種情況下將直接返回List<MapBookmark>)。

          public?List<MapBookmark>?getBookmarkList(){

          ??????ArrayList
          <MapBookmark>?ret?=?new?ArrayList<MapBookmark>();

          ????????ObjectSet?result?
          =?getBookmarks();

          ????????
          while?(result.hasNext())

          ????????????ret.add((MapBookmark)result.next());

          ????????
          return?ret;

          }

          ???

          private?ObjectSet?getBookmarks(){

          ??????Query?query?
          =?db().query();

          ??????query.constrain(MapBookmark.
          class);

          ??????query.descend(
          "name").orderAscending();

          ??????
          return?query.execute();

          }

          刪除書簽

          public?void?deleteBookmark(String?name)?{

          ??????MapBookmark?bkm?
          =?getBookmark(name);

          ??????
          if(bkm?!=?null){

          ????????????db().delete(bkm);

          ????????????db().commit();

          ??????}

          }?

          如果你的對(duì)象在db4o參考系統(tǒng)中存在,你可以輕松的調(diào)用delete()操作從數(shù)據(jù)庫(kù)中刪除它。

          書簽計(jì)數(shù)

          public?int?bookamrkCount(){

          ??????
          return?getBookmarks().size();

          }

          ???

          private?ObjectSet?getBookmarks(){

          ??????Query?query?
          =?db().query();

          ??????query.constrain(MapBookmark.
          class);

          ??????query.descend(
          "name").orderAscending();

          ??????
          return?query.execute();

          }


          要通過查詢來進(jìn)行對(duì)象計(jì)數(shù),你只要詢問查詢結(jié)果的大小即可。

          待完成

          • 基于書簽的查詢功能(通過db4o查詢)
          • 支持手勢(shì)識(shí)別(gesture recognition)(鏈接
          • 當(dāng)前位置提示(Tweet current location)(鏈接
          • 把跟蹤到的GPS位置接收到屏幕上并把GPS路線存儲(chǔ)到數(shù)據(jù)庫(kù)上(以便今后查看)
          • 把位置發(fā)送給聯(lián)系人(短消息、e-mail等)

          下載

          MapMe.Zip
          YouTube上的MapMe視頻
          高分辨率視頻(30 Mb)

          請(qǐng)注意!引用、轉(zhuǎn)貼本文應(yīng)注明原譯者:RosenJiang 以及出處:http://www.aygfsteel.com/rosen

          posted on 2007-12-13 23:44 Rosen 閱讀(2994) 評(píng)論(3)  編輯  收藏 所屬分類: Versant db4o 中文項(xiàng)目

          評(píng)論

          # re: MapMe(翻譯) 2007-12-14 11:16 cleverpig
          感謝Rosen的貢獻(xiàn)!我已經(jīng)把它發(fā)布在db4o官方blog上:http://developer.db4o.com/blogs/chinese/archive/2007/12/14/db4o-android.aspx
            回復(fù)  更多評(píng)論
            

          # re: MapMe(翻譯) 2008-01-16 17:50 sdfd
          芝麻網(wǎng)專業(yè)http://www.hk198.com注冊(cè)香港公司及http://www.hk198.com/hongkong1.html香港公司注冊(cè)" target="_new" rel="nofollow">http://www.hk198.com注冊(cè)香港公司及http://www.hk198.com/hongkong1.html香港公司注冊(cè)—本網(wǎng)站權(quán)威、誠(chéng)信、專業(yè)為企業(yè)提供香港投資全方位解決方案。本網(wǎng)站提供的資料和文件具有權(quán)威性,均可在香港公司注冊(cè)處和香港公司注冊(cè)署查詢。查詢網(wǎng)站http://www.hk198.com,電話13242058864,Email:tannethk@yahoo.com.cn
            回復(fù)  更多評(píng)論
            

          # re: MapMe(翻譯) 2008-02-16 12:38 hotstill
          讓我想起了Google Earth
          也許以后Google Earth會(huì)被結(jié)合到更多東西上,一些目前為止還沒有想到的地方
          醫(yī)學(xué)?教育學(xué)?不知道了。。。。。
          交叉起來的蜘蛛網(wǎng)
          好大的蜘蛛網(wǎng)阿。。。。。
          誰是蜘蛛呢?
          這是個(gè)問題!  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 漳平市| 晋州市| 嵊州市| 监利县| 金寨县| 五大连池市| 昔阳县| 扎囊县| 仙居县| 渝北区| 神木县| 和平区| 洛宁县| 四会市| 湟中县| 察哈| 仁怀市| 洛南县| 沾益县| 伊宁县| 呼图壁县| 滦南县| 陇西县| 阿拉尔市| 祁连县| 资阳市| 资源县| 榆树市| 河西区| 汕尾市| 启东市| 天峻县| 绍兴县| 永德县| 莲花县| 珠海市| 车险| 根河市| 石门县| 鹤庆县| 新和县|