Android Google Map API 開發入門教程

fmms 12年前發布 | 79K 次閱讀 Android Android開發 移動開發

開發基于谷歌地圖的應用和普通的android應用差不多都要使用它提供給我們的類庫,所不同的是google map的類庫不是android平臺的基本類庫,是google api的一部分,所以建立項目時,SDK要選擇Google APIs;

還有一點,開發基于地圖的應用時候需要使用google map的APIkey,必須先申請key,然后才能開發基于地圖的應用。

下邊分步驟記錄下,整個過程:

 一、申請google Maps API key(用于開發和debug)

為了能順利的申請Android Map API Key,必須要準備google的賬號和系統的證明書。一般Google發布Key都需要Google賬號,Google賬號是通用的,Gmail的賬號就可以。當一個程序發布時必須要證明書,證明書其實就是MD5.我們這里并不是發布,而只是為了開發測試,可以使用Debug版的證明書,下面我們就來學習如何申請Debug版的Key:

1.找到你的debug.keystore文件

在Eclipse工具下,選擇windows-->Preference-->Android-->Build, 其中Default debug keystore的值便是debug.keystore的路徑了。

2.取得debug.keystore的MD5值

首先cmd命令行進入debug.keystore文件所在的路徑,執行命令:keytool -list -keystore debug.keystore ,這時可能會提示你輸入密碼,這里默認的密碼是“android",這樣即可取得MD5值。

3.申請Android Map 的API Key.

打開瀏覽器,輸入網址:http://code.google.com/android/maps-api-signup.html ,填入你的認證指紋(MD5)即可獲得apiKey了,結果顯示如下:

感謝您注冊 Android 地圖 API 密鑰!
您的密鑰是:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
我IE打開的時候是亂碼,不知道是不是自己電腦有問題。后來改用了chrome就正常顯示了。

到此,我們就完成了API Key的申請了,記錄下Key值,在后續開發中使用。(放在layout中加入的MapView中)

二.Google Map API的使用

Android中定義了一個名為com.google.android.map的包,其中包含了一系列用于在google map上顯示、控制和疊層信息的功能類,以下是該包中最重要的幾個類:

1.MapActivity: 這個類是用于顯示Google Map的Activity類,它需要連接底層網絡。MapActivity是一個抽象類,任何想要顯示MapView的activity都需要派生自 MapActivity,并且在其派生類的onCreate()中,都要創建一個MapView實例。

2.MapView: MapView是用于顯示地圖的View組件。它派生自 android.view.ViewGroup。它必須和MapActivity配合使用,而且只能被MapActivity創建,這是因為 MapView需要通過后臺的線程來連接網絡或者文件系統,而這些線程需要有MapActivity來管理。

3.MapController: MapController用于控制地圖的移動、縮放等。

4.OverLay: 這是一個可顯示于地圖之上的可繪制的對象。

5.GeoPoint: 這是一個包含經緯度位置的對象。

三.實例開發

1.創建工程,注意SDK旋轉為"Goolge APIs”

2.修改AndroidManifest.xml文件

由于使用Google Map API,所以必須添加<uses-library android:name="com.google.android.maps" />

由于需要從網絡獲取地圖數據,所以需要訪問網絡的權限<uses-permission android:name="android.permission.INTERNET"/>

可能還需要添加其他權限。

例如:

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yarin.android.Examples_09_03"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
<activity android:name=".Activity01"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-sdk android:minSdkVersion="5" />
</manifest>&nbsp;

3.創建MapView

要顯示地圖,需要創建一個MapView,在Xml文件中的布局如下。其中的android:apiKey的值就是我們第一步申請的Key了。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
android:id="@+id/MapView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0AubmfALdupLSlQkE67OTXgcQgWtyhXcO7uhsIQ"/>
</RelativeLayout>&nbsp;

當然,可以在程序中通過如下代碼來創建MapView:

MapView map = new MapView( this, "(android maps api key)");

4.實現MapActivity

MapView需要由MapActivity來管理,所以程序部分應該繼承自MapActivity類,必須實現isRouteDisplay方法。

MapView提供了3中模式的地圖,分別可以通過以下方式設置采用什么模式來顯示地圖。

       mMapView.setTraffic(true); //設置為交通模式 

        mMapView.setSatellite(true); //設置為衛星模式//

      mMapView.setStreetView(false); //設置為街景模式

通過setBuiltZoomControls方法設置地圖是否支持縮放。

5.MapController的使用

如果需要設置地圖顯示的地點以及放大倍數等,就需要使用MapController來控制地圖。可以通過如下代碼獲得MapController對象:

mMapController = mMapView.getController(); 

要定位地點,需要構造一個GeoPoint來表示地點的經緯度,然后使用animateTo方法將地圖定位到指定的GeoPoint上,代碼如下:

//設置起點為成都
mGeoPoint = new GeoPoint((int) (30.659259 * 1000000), (int) (104.065762 * 1000000));
//定位到成都
mMapController.animateTo(mGeoPoint);

6.Ovelay的使用

如果需要在地圖上標注一些圖標文字等信息,就需要使用Overlay。這里我們首先要將地圖上的經度和緯度轉換成屏幕上的實際坐標,才能將信息繪制上去。Map API中提供了Projection.toPixels(GeoPoint in,GeoPoint out)方法,可以將經度和緯度轉換成屏幕上的坐標。

首先需要實現OverLay中的draw方法才能在地圖上繪制信息,代碼如下:

class MyLocationOverlay extends Overlay
{
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)
{
........
}
}

綜合上面的代碼如下:

Activity01.java
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 android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
public class Activity01 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) (30.659259 * 1000000), (int) (104.065762 * 1000000));
//定位到成都
mMapController.animateTo(mGeoPoint);
//設置倍數(1-21)
mMapController.setZoom(15);

//添加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;
}
}
}

轉載地址:http://www.cnblogs.com/playing/archive/2011/04/23/2025419.html

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!