Google對於Android提供的Map擴充庫是個好東西,可以輕易開發基於Google Map地圖的應用,要注意到的是com.google.android.maps庫不是標準的Android sdk內容,如果之前安裝sdk時沒有安裝時,那就需要通過"android sdk and avd manager"來安裝Google Map API,如:
安裝完畢就可以進行基於Android map api與Android location api開發應用。
一、開發前的準備工作
首先需要申請Android Map API Key,因為我們現在只要是進行測試熟悉Google map api的應用,所以可以使用Debug版的證明書即可,通過方法找到debug.keystore檔案的位置。
然後在命令提示字元下進入該目錄,執行命令: keytool -list -keystore debug.keystore,當提示你輸入密碼時,輸入預設的密碼android,這樣就可以取得MD5值。
最後開啟申請Key的網站:申請連結。
記錄下API Key,在下一步中就應用到。
開發前的準備工作還差兩步就可以完成了,第一個是要建立一個基於Google API的AVD,第二個就是建立一個基於Google API的工程,這兩步都是很基本的,就不詳說了。
二、Google Map API的應用
之前下載的擴充包com.google.android.maps中包含了一系列用於在Google Map上顯示、控制和層疊資訊的功能類,以下是該包中幾個最重要的類:
- MapActivity:任何想要顯示MapView的activity都需要派生自MapActivty,並且在其衍生類別的onCreate()中,追尋一個MapView執行個體。
- MapView:用於顯示地圖的View組件。
- MapController:用於控制地圖的移動、縮放等。
- Overlay:可顯示於地圖之上的可繪製的對象。
- GeoPoint:包含緯度位置的對象。
下面我們將通過maps包來實現一個地圖瀏覽的程式。
Step1:修改AndroidManifest.xml檔案,在裡面定義如下資訊:<uses-library android:name="com.google.android.maps"/>,注意該定義的位置(開始自己不仔細,把uses拼字成use而已,找了很久才發現是這裡出了錯),然後添加應用程式訪問網路的許可權:<uses-permission android:name="android.permission.INTERNET" />。
Step2:在main.xml中建立MapView,代碼如下:1 <com.google.android.maps.MapView
2 android:id="@+id/MapView01"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:apiKey="03KPIn4oYNLRqlYAsIie3Ad2Gmr1P5uAVBSJ35Q"/>
Step3:實現MapActivity,因為繼承自MapActivity,所以要實現isRouteDisplayed方法,MapView提供3種模式的地圖,如下:
- mMapView.setTraffic(true); //設定為交通模式。
- mMapView.setSatellite(true); //設定為衛星模式。
- mMapView.setStreetView(true); //設定為街道模式。
- mMapView.setBuiltInZoomComtrols(true); //設定地圖是否技術縮放。
Step4:MapController的使用,如果要設定地圖顯示的地點以及放大的倍數等,需要使用到MapController來控制地圖,可以通過如下代碼來獲得MapController對象:mMapController=mMapView.getController();
要定位地點,先構建一個GeoPoint對象,然後使用animateTo方法指定位置,如下面代碼
1 //設定起點為廣州
2 mGeoPoint = new GeoPoint((int) (23* 1000000), (int) (113* 1000000));
3 //定位到廣州
4 mMapController.animateTo(mGeoPoint);
Step5:最後付上具體實現的代碼清單:
package info.ellic.googlemapsample;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;
import java.util.List;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapController;
import com.google.android.maps.Overlay;
public class GoogleMapSample extends MapActivity
{
private MapView mMapView;
private MapController mMapController;
private GeoPoint mGeoPoint;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mMapView = (MapView) findViewById(R.id.MapView01);
//設定為交通模式
//mMapView.setTraffic(true);
//設定為衛星模式
mMapView.setSatellite(true);
//設定為街景模式
//mMapView.setStreetView(false);
//取得MapController對象(控制MapView)
mMapController = mMapView.getController();
mMapView.setEnabled(true);
mMapView.setClickable(true);
//設定地圖支援縮放
mMapView.setBuiltInZoomControls(true);
//設定起點為廣州
mGeoPoint = new GeoPoint((int) (23* 1000000), (int) (113* 1000000));
//定位到廣州
mMapController.animateTo(mGeoPoint);
//設定倍數(1-21)
mMapController.setZoom(12);
//添加Overlay,用於顯示標註資訊
MyLocationOverlay myLocationOverlay = new MyLocationOverlay();
List<Overlay> list = mMapView.getOverlays();
list.add(myLocationOverlay);
}
protected boolean isRouteDisplayed()
{
return false;
}
class MyLocationOverlay extends Overlay
{
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
Paint paint = new Paint();
Point myScreenCoords = new Point();
// 將經緯度轉換成實際螢幕座標
mapView.getProjection().toPixels(mGeoPoint, myScreenCoords);
paint.setStrokeWidth(1);
paint.setARGB(255, 255, 0, 0);
paint.setStyle(Paint.Style.STROKE);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.home);
canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);
canvas.drawText("廣州歡迎你", myScreenCoords.x, myScreenCoords.y, paint);
return true;
}
}
}
運行:
三、定位系統的應用
四、基於Google map api的創意應用