2010年7月31日 星期六

【分享】- 旋轉吧!地圖 (讓 Google Maps 隨電子羅盤轉向前方)

如您想讓 Android 程式中的 MapView 隨著手機的電子羅盤 (Compass) 自動旋轉,並依照您看手機螢幕的方向轉向前方,以下介紹的程式範例或許可供您參考。


此範例程式名稱是 MapViewCompassDemo,記得好像是 Google Android SDK API Demo 中的程式 ,但漁郎用了許多關鍵字去謨拜了好久 Google 大神,才在幾個網友發表的英文文章中找到需要的範例程式。有鑑於此,漁郎於是貼文於此,希望對需要的朋友們有些幫助。



(1) 該範例程式請到此下載,進入後,以滑鼠右鍵 (WINDOWS) 點選右側靠下方的 View raw file ,並選另存連結或另存新檔,就可存成 MapViewCompassDemo.java 檔案,漁郎已將該範例檔的內容拆一拆,建成一個完整的 Android 範例專案檔,如您需要該範例專案檔,可以 e-mail 給漁郎 (因不知該放在哪兒好 @@),當您收到該範例專案並解壓縮後 Import 到您的 Eclipse 開發工具中,應就可以執行了。

(2) 另外,您可將該範例專案中的 RotateView.java 與 SmoothCanvas.java 裡面的類別引入主程式中,稍變化一下應就可產生出一個可將 MapView 內的地圖旋轉的 Android 程式了。

(3) 記得將 MapViewCompassDemo.java 內的 Google Maps API KEY 改成您申請的喔。
      這段 ..... mMapView = new MapView(this, "YOUR MAPS API KEY");

參考資料網址:
http://code.google.com/p/mapsadroidproject/source/browse/trunk/MapsDemo/src/com/example/android/apis/view/MapViewCompassDemo.java?spec=svn3&r=3

http://www.openintents.org/javadoc/samples/ApiDemosSensors/org/openintents/samples/apidemossensors/view/MapViewCompassDemo.html

http://www.koders.com/java/fidBC179BF80582A4E581A1A88C32BBEB1485D45C06.aspx?s=AnimateMotion

174 則留言:

  1. 你好 翻到你的網站 可是我還是不知道應該要怎麼用

    可以跟你要範例程式嗎

    我的google 帳號是 ascia1112@gmail.com

    回覆刪除
  2. GG 您好, 您是第 n 個來信的夥伴了 ^__^ , 已寄出到您信箱囉 ! 請將該範例專案 import 到 Eclipse 中就行了.

    回覆刪除
  3. 不好意思 可以給我範例檔嗎 謝謝
    test059253@yahoo.com.tw

    回覆刪除
  4. 試了很久,還是沒辦法執行成功,想參考您的範例,不知能否跟您借來看看呢?

    我的信箱是shan3345@gmail.com

    回覆刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. 謝謝版主,但我想請問一下 範例中所使用的sensor是方位感應器而非磁力感應器?
    電子羅盤不是應該是運用到磁力感應器嗎?
    方位不是只是手機的方位而已?

    回覆刪除
  7. 耶... 考倒漁郎了,漁郎很懶的 @@,所以,拿到別人的東西只會想到怎樣最方便使用,倒還真的沒仔細看是用啥感應器 >_<,基本上也以為是磁力感應器哩,待有空的時候再仔細瞧瞧,或許 首翰 您會先瞧出個所以然來,記得教教漁郎喔 ^__^

    回覆刪除
  8. 你好 不好意思@@ 最近有機會開發到這一塊 剛好也有這方面的問題 是否可以也寄一份範例呢@@ 謝謝><

    arrny1224@gmail.com

    回覆刪除
  9. 謝謝漁郎ㄉㄉ~~ 大感恩阿T^T

    回覆刪除
  10. 不好意思~不知道可否參考這個程式
    請您寄給我好嗎, 謝謝您
    pipi80405@gmail.com

    回覆刪除
  11. 收到囉~ 謝謝你 Android 2.3.3 也可以跑這個程式
    只是import之後會有一個build.xml檔出錯,
    將它刪除後專案就可以跑了, 不知道這樣做會不會有什麼問題~
    另外剛剛實測的感覺,
    使用手指移動螢幕時地圖方向好像會怪怪的,
    只有當朝北方的時候 操作比較正常

    回覆刪除
  12. 我也需要你的範例檔
    是否可以寄給我
    我的email:jacklai5505@gmail.com
    謝謝您!

    回覆刪除
  13. 可以請您寄給我範例程式嗎?
    謝謝!

    tericky@gmail.com

    回覆刪除
  14. hello,目前專案需要用到這個功能,可以麻煩您寄一份給我嗎?謝謝
    zero.arst@gmail.com

    回覆刪除
  15. 麻煩可以mail給我感激不盡!!
    harry7895123@yahoo.com.tw

    回覆刪除
  16. 請問一下..要如何變化..
    我將RotateView.java 與 SmoothCanvas.java 這兩隻程式放入src/裡面,主程式還要改些甚麼呢?
    目前自己的地圖還是不會選轉..
    麻煩指導>"<
    小弟新手拜託了

    回覆刪除
  17. @Unknown,不好意思喔~ 漁郎有點忘了 @@,我有將之整合進已上架的程式「求救發訊器」中,待漁郎看能否將之濾出來程式片段,再跟您說喔。。。不過,您可先解析一下範例程式中的 MapViewCompassDemo.java 程式內容,應該可以舉一反三,套用到您的其他程式中。。。試試喔!

    回覆刪除
  18. 謝謝漁郎哥!這兩天研究了粉久..程式碼還是一直有問題..
    不是編譯有問題,就是編譯完之後執行錯誤..瀕臨崩潰邊緣
    :(可能真的只要轉一下就過去了~原諒小弟不才...
    還需要再努力!!不知漁郎哥時間允許的話可否幫忙看一眼程式碼..
    感激不盡喔~

    回覆刪除
  19. 請問字是否也可以旋轉?
    Google 出的 android google map 新版可以做到字永遠朝向使用者耶,不知是如何做到的?

    回覆刪除
  20. 是否在新版 Google APIs 有相關的參數可以使用,讓字也可以跟著正向使用者,漁郎再找時間研究研究,感謝您的提醒 ^_^ 。

    另外,@ Harry,請問您是否有跟漁郎要過範例專案檔?如有的話,應該很容易套用到您的程式中喔。。。

    回覆刪除
  21. 還有,@ Harry,不知您的程式中是如何套用 RotateView.java 與 SmoothCanvas.java 的?可以的話,請您不妨寄給我程式碼,或許漁郎可幫點小忙。

    回覆刪除
  22. 漁郎大哥你好~ 可以寄給我範例程式膜拜一下嗎?

    地圖旋轉這段 我一直都摸不透 麻煩你了

    nick103143@hotmail.com

    回覆刪除
  23. 漁郎大大 我程式寄給你了

    我在信件中 有隨附上我的MSN 請與我聯絡 指教 謝謝

    回覆刪除
  24. 親愛的廖同學,雖然漁郎不知您是哪個學校的學生(搞不好漁郎跟您的教授是熟識哩),但看得出來您很認真在作功課。您的信件漁郎有收到了,會找下班的時間幫您看一下。至於 MSN ,漁郎上班時是沒上 MSN 的,因為,開會時如突然蹦出來訊息可能會被老闆 K !所以咧, MSN 就不方便跟您聯繫囉~ 請您就諒解一下漁郎「吃人頭路」的苦衷吧。當然囉~哪天漁郎沒工作時就另當別論囉~~ ^_^

    回覆刪除
  25. Hi,廖同學,漁郎將程式稍抓了幾個 BUG,寄過去給您囉。如果漁郎沒看錯,您這程式應該是參考某個「範例書」中的範例修改而成的吧?但執行時的錯誤,多半是物件產生(生成)後,本類別或其他類別中的程式認不到物件的參考位址造成。漁郎改了幾個給您參考(程式中有註記),但後續還有好幾個 BUG,還煩請您舉一反三修改之~。PS:您可多多利用 DDMS 中的 LogCat 看看為何錯誤,依此追出 BUG 宰了!

    回覆刪除
  26. I want the code, thanks!
    khs.thomas@gmail.com

    回覆刪除
  27. 你好~~可以給我完整的嘛...

    s622222000@yahoo.com.tw

    回覆刪除
  28. 漁郎大大~
    我也要來麻煩您了~
    需要完整專案檔~
    感恩~
    fc.hubert@gmail.com

    回覆刪除
  29. 魚郎大大~
    感謝您的檔案~受用不盡~
    但發現幾個現象,來跟您請教一下~
    因為發現一但MapView被旋轉後,手勢Event也跟著被旋轉了,
    例如地圖向右旋轉了90度,我下意識的想向右移動地圖,
    但是地圖卻向下移動~
    不知是否已有解決辦法?
    我的想法是去override 那些Event,判斷角度再呼叫該呼叫的event,不知這樣想是否可行~

    回覆刪除
  30. 這個部份,漁郎還沒研究如何修改,因此,在應用程式中是固定圖面不給移動的。不過,您的想法應該可行。

    回覆刪除
  31. 您好,請問方便給我完整的檔案嗎? 謝謝!!

    bibby1101@gmail.com

    回覆刪除
  32. 謝謝您唷!! 我已經收到了XD Import進去可以執行!!

    回覆刪除
  33. 這樣的教學真的造福了很多人~
    小弟也希望可以請漁郎大大~
    也寄一份完整專案檔給小弟研究一下~
    感恩~ natsu0813@gmail.com

    Ps:順帶一提,在Android上一直有個很有名的APP(SkEye
    ,Vortex Planetarium),也有運用到電子羅盤的技術,小弟也想研究看看,但是網路上較為完整的資料也不多,目前只知道利用陀螺儀,電子羅盤與GPS定位來擷取當下的位置,但是無奈我學是淺薄,還請漁郎大大多多指導

    回覆刪除
  34. Hello ~ 寄過去了噢!
    這是新版本,觸控螢幕會停止旋轉地圖,再觸控會再次旋轉地圖。
    有問題請記得告訴漁郎喔!

    回覆刪除

  35. 漁郎大
    請問可以寄範例檔給我嗎
    ktasl.bbs@gmail.com

    回覆刪除
  36. 漁郎大大太強了!本人為了FYP也想要一份範例檔,可以嗎?
    本人的Email是
    yukimshing@gmail.com

    回覆刪除
  37. 漁郎大大, 可以寄份給小弟拜讀嗎? 小弟email 是ivan62tseng@gmail.com

    回覆刪除
  38. Hello~漁郎大大~~不知道可不可以要這份範例檔~~謝謝!!
    我的e-mail: suju0707@gmail.com

    回覆刪除
  39. 您好,
    不好意思可以要這份範例檔嗎??
    謝謝!!
    mail:james19840510@gmail.com

    回覆刪除
  40. 您好,請問可以跟您要範例檔嗎??
    謝謝您喔!!
    mail:win97672@yahoo.com.tw

    另外可以請教一個問題嗎?
    以下是我自己寫的程式,請問要如何幫MapView加指南針啊? 我有試著使用MyLocationOverlay但是還是一直出錯.MyLocationOverlay如何和我複寫的GPSItemizedOverlay並存阿?
    這個問題我已經Google了好久一直找不到答案~
    -----------------------------------------------
    public void onLocationChanged(Location location) { serachMap(location);
    }
    public void serachMap(Location location){
    GeoPoint gp =
    new GeoPoint(
    (int)location.getLatitude()*1E6), (int)(location.getLongitude()*1E6));
    mapOverlays.clear();
    drawable =this.getResources().getDrawable(R.drawable.marker);
    itemizedOverlay = new GPSItemizedOverlay(drawable);
    OverlayItem overlayitem =
    new OverlayItem(gp, "", "");
    itemizedOverlay.addOverlay(overlayitem); mapOverlays.add(itemizedOverlay); mc.animateTo(gp); mc.setCenter(gp);
    }
    -----------------------------------------------
    **另外還有一個問題如果要地圖更新的話~~
    --------------------------------------------
    mylayer.enableMyLocation(); mylayer.runOnFirstFix(new Runnable()
    {
    public void run()
    { mapController.animateTo(mylayer.getMyLocation());}});
    -----------------------------------------
    這個方法和我使用的有什麼不同?
    哪個效率比較好啊?

    回覆刪除
  41. 範例檔寄過去囉~~ ^^

    您是說「小羅盤」圖案是吧?我記得只要加以下命令就會秀出:

    mOverlay1.enableCompass(); // 啟用羅盤更新, 顯示小羅盤

    您的二個問題沒比較過 @@ ....

    回覆刪除
  42. 感謝您 ~ 已收到!!!

    至於
    mOverlay1.enableCompass()<= MyLocationOverlay物件
    iOverlayt<==IemizedOverlay物件
    兩者都可以加入到 List mapOverlays
    我的IemizedOverlay物件和MyLocationOverlay物件
    經測試後發覺~1.MyLocationOverlay要在onCreate就宣告加入mapOverlays中,但是我自訂的標誌需要在
    onLocationChanged中作位置改變並且
    使用
    mapOverlays.clear();
    再加入
    mapOverlays.add(itemizedOverlay);
    這樣會使的我的羅盤被清除掉...
    目前卡在這個部分
    情況跟這文章內容相似
    http://www.eoeandroid.com/thread-30250-1-1.html
    目前苦無解決辦法 ...

    回覆刪除
  43. 漁郎截出以下的程式片段(包含在 onCreate 中),並不會有你說的情況耶!?

    List〈Overlay〉overlays;
    overlays = map.getOverlays();
    overlays.clear();
    mOverlay1 = new MyLocationOverlay(this, map);
    mOverlay1.enableCompass();
    overlays.add(mOverlay1);

    回覆刪除
  44. 漁郎在整個程式中,只有在 onCreate 中有下 clear() , 其它地方 (例如: onLocationChanged 中都沒再下 clear() , 「維尼」參考參考。

    回覆刪除
  45. 不好意思 可以寄一份範例給我嗎?
    最近剛好在研究,有個範例比較好下手
    ray10533w@gmail.com

    回覆刪除
  46. 請問一下 我導入Eclipse
    smoothcanvas.java卻顯示紅色X
    是怎麼回事呢?
    謝謝!!

    回覆刪除
  47. 在 Problems 裡的錯誤訊息是?

    回覆刪除
  48. 重開一次發現smoothcanvas.java沒有紅色X了
    換成MapViewCompassDemo.java和RotateView.java有紅色X
    錯誤訊息是
    import com.google 無法解析
    MapActivity 無法解析成類型
    MapView 無法解析成類型
    MyLocationOverlay 無法解析成類型
    很多...共54個錯誤
    不知是如何呢?
    謝謝!!

    回覆刪除
  49. 應該是沒安裝 Google APIs by Google Inc. 套件造成。

    回覆刪除
  50. 請去下載與安裝使用 Google 相關服務的「必要」開發套件。

    回覆刪除
  51. Hello~漁郎大大~~不知道可不可以麻煩您寄這份範例檔給我~~
    因為我的專題剛好有用到類似的東西,不知道可不可以請漁郎大大借我參考參考,感恩您~~!!!!謝謝啦^^
    我的e-mail: doris79313@gmail.com

    回覆刪除
  52. 您好,請問可以跟您要範例檔嗎??
    謝謝您喔!!
    mail:pan.yujen@gmail.com

    回覆刪除
  53. 您好,漁郎大大!
    最近小弟也在研究這一塊!
    可以跟您要範例來跑跑嗎?感激不盡!!!
    imtzuyu@hotmail.com

    回覆刪除
  54. 您好~最近課程有用到這部分,不知可跟你拿範例檔看看嗎??
    感謝您!!!! doris79313@google.com

    回覆刪除
  55. 寄出囉~ ^^ , 第一次看到 @google.com 的郵件 , 是 gmail.com 嗎?

    回覆刪除
  56. @乖乖~ 您給的 e-mail address 不對, 被退信了。

    回覆刪除
  57. 你好 我也想要範例程式!!最近研究需要用到

    我E-MAIL是

    fk26541598@yahoo.com.tw

    回覆刪除
  58. 你好:
    我也對範例程式有興趣。可以參考看看嗎
    我的mail: zusohermax@gmail.com
    謝謝了

    回覆刪除
  59. 你好:
    我對你的範例程式也很感興趣
    最近學校方面的課程裡 需要研究到這塊
    不知道能不能也寄給我
    我的e-mail是 happydaysogood@yahoo.com.tw
    麻煩你了

    回覆刪除
  60. 作者已經移除這則留言。

    回覆刪除
    回覆
    1. 剛測試是正常的,你能截個畫面圖寄來瞧瞧嗎?

      刪除
  61. 你好,我對範例程式也有興趣,是否可以研究看看
    我的mail: jiun036@gmail.com
    謝謝!!

    回覆刪除
  62. 您好,您的程式剛好我有研究到,是否可以寄MAIL參考嗎?
    麻煩您了,謝謝。

    kjapo445@yahoo.com.tw

    回覆刪除
  63. 你好,請問您的程式可以MAIL給我做參考嗎? 最近有再研究
    麻煩了~ 謝謝!!
    my mail: s07110424@gmail.com

    回覆刪除
  64. 您太強了!可以寄一份給我研究一下嗎?
    我的Mail:wuchart@gmail.com
    感謝!

    回覆刪除
  65. 您好阿 可以記一份給我嗎 想要學習這個技術
    mail:roger2156134@yahoo.com.tw

    謝謝

    回覆刪除
  66. 你好,請問您的程式可以MAIL給我做參考嗎? 最近有再研究
    麻煩了~ 謝謝!!
    my mail: s11639112@STU.EDU.TW

    回覆刪除
    回覆
    1. ((補充 不好意思 小弟剛學...還不太懂 有些問題想請問漁郎大大
      1.請問範例中所使用的sensor方位感應器 預設值是指向哪個方向呢? 北方嗎?
      2.如果 小弟在MAP中增加一個座標位置 那方位感應器是否能改成指向那個新增的座標位置呢?

      刪除
    2. 範例檔已寄出 ~~

      1. 前方
      2. 不懂您的意思 @@

      刪除
    3. 就是 範例原本指的方向是前方
      可以把指的方向改為一個地標嗎? 比如: 一直指著101大樓
      這樣我就能知道101大樓在我哪個方向
      有這功能嗎@@?

      刪除
    4. 行的!但漁郎忘了怎做了 @@ ... 待我翻箱倒櫃找ㄧ找 ... >< sorry

      刪除
    5. 恩恩 感謝漁郎大大的資訊 那小弟大概有方向前進了
      那小弟會繼續了解程式的 如果還有資訊 希望漁郎提供資訊 感恩>"<

      刪除
  67. 漁郎大~
    可以將此範例寄給小弟嗎~
    想自己試看看~
    感謝大恩~
    ching.han.671@gmail.com

    回覆刪除
    回覆
    1. 收到了~~
      感謝大大~~
      ^______________^

      刪除
    2. 漁郎大~
      是不是因為版本不一樣的關係~
      我匯入之後,都會有錯誤無法消掉,
      我有把專案版本和JAVA版本改掉~
      錯誤還是無法消掉~~
      @@a

      刪除
    3. 漁郎的開發環境如下,您參考參考:

      (1) Eclipse Platform 3.6.2r362_v20110210
      (2) 改範例使用 Android SDK Google APIs 2.1 (API Level 7)
      (3) Java SDK 1.6 for Mac

      PS: 您不妨直接開啟該專案,不用 Import 試試。

      刪除
  68. 你好
    不知可否參考你的程式碼
    研究一下
    我的mail
    wushingwei@gmail.com
    謝謝了..

    回覆刪除
  69. 您好
    請問 可以參考一下你的程式碼嗎??
    我的 e-mail
    skyinblue28@yahoo.com.tw
    謝謝~~

    回覆刪除
  70. 您好 目前正在努力寫相關地圖的應用部分
    但就是旋轉卡關了
    想參考一下您的程式
    我的e-mail: bibi630@gmail.com
    麻煩了 謝謝!

    回覆刪除
  71. 漁郎大你好
    請問可以參考一下你的程式碼嗎
    qwe121223@yahoo.com.tw
    這是我的e-mail
    麻煩了 謝謝!!!

    回覆刪除
  72. 你好,我也需要程式碼..最近在研究這一塊
    信箱為:
    kve15@yahoo.com.tw

    謝謝大大(鞠躬

    回覆刪除
  73. 漁郎大大您好

    小弟初學android程式

    可以寄給我範例檔嗎?

    感謝
    s_alen@hotmail.com

    回覆刪除
  74. 你好:
    可以麻煩請您寄範例檔?
    tstjason@gmail.com
    謝謝!!

    回覆刪除
  75. 您好,漁郎大大:

    小弟是ANDROID新手,想了解地圖旋轉的功能,可以麻煩您寄程式範例檔嗎?
    感謝您! < ( _ _ ) >
    mark61613@gmail.com

    回覆刪除
  76. 您好,網路上真的太多不相干的東西了~
    想跟您索取程式碼,謝謝
    huadi73@hormail.com

    回覆刪除
  77. 抱歉我信箱有打錯字...hotmail.....
    huadi73@hotmail.com
    麻煩您了,謝謝

    回覆刪除
  78. 收到了~謝謝您
    但我想請教一個問題,我使用了你的之後
    地圖都無法用手滑動,另外加上去的圖標也都沒出現
    請問我該怎麼解決呢,謝謝

    回覆刪除
  79. 就是我只是把原來的程式的view的部分加上您的程式碼
    之後我的overlay會無法顯示(雖然有時候會跑出來)
    再來就是我無法用手指去滑動地圖了~

    回覆刪除
  80. 可以麻煩寄給我嗎
    gmail:wumike10@gmail.com

    感激不盡

    回覆刪除
  81. 您好,最近剛好想研究這個方面程式碼
    所以想跟您索取一下參考看看~
    方便寄一份給我麼??

    Gmail: jason.yu0719@gmail.com

    謝謝你

    回覆刪除
  82. 您好,最近剛好想研究GPS這個方面的程式碼
    能否提供讓我參考一下

    Gmail:barry22034@gmail.com

    回覆刪除
  83. hello,可以跟你要範例程式嗎,感恩

    回覆刪除
  84. 不好意思 可以跟你要程式碼 嗎

    deurpye@gmail.com 謝謝

    回覆刪除
  85. 您好,我正在寫有關GPS的程式,想跟您要範例程式

    EMAIL:a0919628423@gmail.com

    回覆刪除
  86. 您好:

    我是ANDROID新手,想了解地圖旋轉的功能,可以麻煩漁郎大寄程式範例檔嗎?
    感謝您!!
    giranntu@gmail.com

    回覆刪除
  87. 可以麻煩漁郎大寄程式範例檔嗎?
    感謝!
    taidara99@gmail.com

    回覆刪除
  88. 您好 可以跟您要這隻程式嗎
    z661223@gmail.com

    謝謝您

    回覆刪除
  89. 您好:

    我最近想做 Android google map 的程式
    可以跟您拿取範例程式進行研究麼?
    e-mail: cram455cog178@gmail.com

    謝謝您

    回覆刪除
  90. 網誌管理員已經移除這則留言。

    回覆刪除
  91. 你好! 我很少看到這方面的資訊! 可以麻煩您給我一份檔案嗎? 謝謝! boy6074d@yahoo.com.tw

    回覆刪除
  92. 漁郎大您好,最近剛好在研究GoogleMap這個方面,公司專案有用到此功能,
    能否提供讓我參考一下,可以麻煩漁郎大寄程式範例檔嗎?
    感謝!

    email: tonyan95@hotmail.com

    回覆刪除
  93. 你好! 我很少看到這方面的資訊!
    ,可以麻煩漁郎大寄程式範例檔嗎?
    我的google 帳號是 tonyan95@hotmail.com

    回覆刪除
  94. 您好,最近剛好在研究LBS的相關應用,如不嫌棄希望能與您獲取相關專案檔以進行深入研究,望能學習切磋,靜候佳音。

    E-Mail
    gi.eastlu@gmail.com

    回覆刪除