Google Map API v2 步步為營 (二)----- Location

來源:互聯網
上載者:User

接上篇。

改造一下MapsActivity:

  MapsActivity  Activity 

實現4個interface:

android.location.LocationListener

GoogleMap.InfoWindowAdapter

GoogleMap.OnMarkerClickListener

GoogleMap.OnMarkerDragListener

本篇要實現在地圖上定位,主要用到LocationListener介面。

另外3個介面關係到 打標記(Marker),移動標記點,以及點擊標記彈出info視窗。這些功能將在下一篇文中整理。   

 

地圖初始化

首先在onCreate中需要對地圖對象做一些設定:

 

 

servicesConnected 檢查service是否可用

      resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(    (ConnectionResult.SUCCESS =="Google Play services is available."=         ConnectionResult connectionResult =  ConnectionResult(resultCode,  errorCode =        Dialog errorDialog =        (errorDialog != = 

上一篇說過,手機調試環境需要安裝Google Play服務和play store。如果沒有安裝,這裡就會返回錯誤碼。

 

initMapView 初始化

       mMapView =       UiSettings setting =     setting.setTiltGesturesEnabled(           

2行,獲得地圖對象 GoogleMap mMapView;後面很多操作都要通過它。

3行,設在地圖模式為normal

4行,UiSettings 設定人機互動相關的各種按鈕手勢等待,例如:

void setTiltGesturesEnabled(boolean)  是否允許手勢改變視角;

void setCompassEnabled(boolean)  是否顯示指南針;

詳細的UiSettings用法可參考官文 https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/UiSettings

 

移動到經緯度地點

先闡明一個概念,Goolge Map假定地圖本身是固定不動的,移動的是camera(public final class CameraUpdate)。

想象一下,在地球上空漂浮著一隻佳能無敵兔,把鏡頭對準魔都,焦距拉近看到了一號線,再拉遠,視角傾斜一下,看到了魔都全貌,還是帶廣角的。不錯吧!

 

回到代碼,這裡需要用的GPS。通過LocationManager來獲得位置服務

mLocManager == mLocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

獲得LocationManager,並檢查GPS是否可用。

在onResume函數中註冊監聽

             (isServiceOk ==                String provider =     (provider !=         mLocManager.requestLocationUpdates(provider, 5*1000, 1,      }

7行,獲得可用的Location Provider,開啟GPS的情況下這裡得到的是GPS provider

9行,註冊位置變化監聽。第二入參5*1000表示每隔5秒更新一次,第三入參表示移動超過1米更新一次。最後一個入參即LocationListener,由於activity implement了LocationListener,所以這裡只需要給activity的this指標。

12行和13行的兩個函數,用於主動擷取最新位置,移動地圖到該位置,稍後貼出。

先看一下位置變化的監聽函數,activity在implement了LocationListener後 需要實現一下幾個函數:

         (mLocation !=                             onStatusChanged(String arg0,   

3~9行,我這裡只處理了

Location mLocation =

函數中,把新的location儲存到mLocation中,然後調用把地圖移動到該位置。

有時我們需要主動查詢最新的Location

        String bestProvider =     Location  newLoction =       (bestProvider !=          newLoction =      (mLocation ==          mLocation =  Location(""       (newLoction !=     }

3行,擷取最優的provider

7行,擷取最近一次的location

8~16行,同樣的,新位置記錄到mLocation中。

getBestProvider函數體如下:

private String getBestProvider(){      
    Criteria criteria = new Criteria();
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    String bestOne = mLocManager.getBestProvider(criteria, true);
    return bestOne;
}

 

上文用到的兩個函數

 

   setLatLng(     (mLocation ==          Toast.makeText(                 dLat =      dLong =     log("setLatLng: (" + dLat + "," + dLong + ")"           LatLng latlng =      ((latlng.latitude == 0) && (latlng.longitude == 0              }         mMapView.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15      animateLatLng(     (mLocation ==          Toast.makeText(                         dLat =      dLong =     log("animateLatLng: (" + dLat + "," + dLong + ")"     LatLng latlng =            }

 

先看第一個:

7~8行,從mLocation中調用getLatitude()取得維度,getLongitude()取得經度。

12行,構造一個LatLng對象

16行, mMapView.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15));

CameraUpdateFactory.newLatLngZoom(latlng, 15) 返回一個CameraUpdate對象,入參是經緯度和zoom level;

GoogleMap的moveCamera方法把地圖移動到該位置。

函數

31行  基本相同,唯一的區別是最後調用的是animateCamera,我們會看到地圖從原location移動到新location的過程。而moveCamera方法是瞬移過去的,不會看到移動過程。

CameraUpdate有很多中構造方法,可以單獨或同時指定位置和放大倍數。指定邊界等待,詳見

https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/CameraUpdateFactory

 

 

最後,要在onPause函數中登出位置服務監聽

mLocManager.removeUpdates(this);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.