2013年5月2日 星期四

Android程式設計 - Google Maps API v2 調整地圖中心點

地圖座標是使用LatLng物件來表示,LatLng建構子第一個參數表示緯度值,第二個參數表示經度值。例如:

  LatLng nkut = new LatLng(23.97918, 120.69686);

程式中可直接使用GoogleMap物件之moveCamera(CameraUpdate update)方法或animateCamera(CameraUpdate update)方法來移動地圖鏡頭到指定座標點,差別在於animateCamera()會有地圖移動效果。
在上述方法中,update為地圖鏡頭動作物件,必須使用CameraUpdateFactory類別建構CameraUpdate物件。最簡單的方式是使用CameraUpdateFactory.newLatLng (LatLng latLng),例如:


  GoogleMap map = ((SupportMapFragment)
    getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
  LatLng nkut = new LatLng(23.97918, 120.69686);
  map.moveCamera(CameraUpdateFactory.newLatLng(nkut)); 

CameraUpdateFactory.newLatLngZoom()方法除了指定地圖中心LatLng座標,還同時設定地圖縮放等級。例如:

  GoogleMap map = ((SupportMapFragment)
    getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
  LatLng nkut = new LatLng(23.97918, 120.696867);
  map.moveCamera(CameraUpdateFactory.newLatLngZoom(nkut,15.0f));

4 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 你好

    關於 Google Maps API v2有以下的疑問

    1. 需要google_play_services的lib .可是實際上在sdk\extras\google內有2個google_play_services的lib

    1. 一個是確定要用SupportMapFragment的 google_play_services

    2. 一個則是名為google_play_services_froyo的<--可支援用MapFragment

    不過第2個好像支援度有差別?被Google準備放棄?

    2.另外一個問題是.我使用SupportMapFragment的方法.可是如果只顯示全球地圖.是可以跑.只要一加入 map.addMarker 或是 map.moveCamera則會造成FC.從LogCat上是顯示
    E/AndroidRuntime(1117): java.lang.RuntimeException: Unable to start activity ComponentInfo{"package name"/"package name".Main}: java.lang.NullPointerException

    嘗試了很多天了 還是無解

    以下是我分別的程式碼
    ____________layout___________
    //

    ///

    //



    ///
    ___________________
    ___________Java______________
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.model.LatLng;


    public class Main extends FragmentActivity {


    static final LatLng NKUT = new LatLng(23.979548, 120.696745);
    private GoogleMap map =null;

    //private SupportMapFragment fm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // 使用 Fragment屬性 搭配foyo的lib寫法
    /* map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    Marker nkut = map.addMarker(new MarkerOptions().position(WOW).title("WOW").snippet("OO"));

    // Move the camera instantly to WOW with a zoom of 16.
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(WOW, 16)); */


    //SupportMapFragment 屬性完整寫法.SupportMapFragment用於API 8已上都可

    SupportMapFragment fm = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));
    map = fm.getMap();

    //下面註解取消.就會無法執行.出現FC
    //map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(23.979548, 120.696745), 15));

    //Marker WOW= map.addMarker(new MarkerOptions().position(new LatLng(24.979548, 121.696745)).title("WOW"));// 指定經緯度放置標記
    ___________________________


    可以請問哪邊我弄錯了嗎 ?

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

      刪除
    2. 你要把程式碼改成
      map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
      也就是說原本沒有Support的地方你都要檢查一下
      然後加上Support

      接著去XML看你的code

      把最後一行class中MapFragment前面加上Support就可以跑了
      歡迎到我網誌逛逛

      刪除